操作系统/数据库
文章平均质量分 91
系统方向笔记
RzBu11d023r
这个作者很懒,什么都没留下…
展开
-
io_uring 使用教程| io_uring 完全指南 | io_uring 实践指导 | io_uring 资料参考
io_uring 完全指南地图背景io_uring 是 2019 年做的,与 kernel 5.1 发布。后续打了很多补丁,比较重要的在 2020年5月之后基本达到了一个很好的可用性。学习这个东西和学习 epoll 系列的、学习 UNP 和 linux 网络编程其实没有什么区别,都是利用已有的工具解决问题,其实不涉及像学 OS、DBMS、分布式系统等这种系统方向技术上的东西,但是有一些惯常做法还是需要记录一下,如何利用工具,以及在工具的限制下解决问题也是一门形式化技术。本文只是提供一个使用 io_uri原创 2022-04-03 00:02:35 · 9032 阅读 · 2 评论 -
基于协程io_uring 异步网络库系列 VII(资料): io_uring 和 NONBLOCK | short read 问题 | io_uring blocking io 资料
这里其实我之前有一个问题的,对于普通的非阻塞read write 来说可能每次读到写到的 n 都不等于我们请求的 nbytes,然后最好情况也最多是 64kb,不可能够传输长(相对)连接大文件的,这个问题 io_uring 提交的时候是否能支持更大的 nbytes 呢? 当然 manual 的说法是Each I/O operation is, in essence, the equivalent of a system call you would have made otherwise, ...原创 2022-03-06 16:30:44 · 1768 阅读 · 0 评论 -
基于协程io_uring 异步网络库系列 VI: io_uring v.s. epoll | proactor v.s. reactor | io_uring Proactor 模型
本文讲解 io_uring 如果编写 proactor 编程模型,同时对比 Reactor 模型。主要涉及的是模型中的 IO 部分,比如 short read。原创 2022-03-06 16:28:10 · 561 阅读 · 0 评论 -
网络编程 高性能定时器数据结构分析 | 时间轮 红黑树定时器性能分析 | 为什么要做用户态定时器
本篇仍然是编写一个网络库、框架(类似muduo、libev、nodejs)的网络编程系列。原文和11月的另一篇笔记的第二部分附录基本内容一致,属于是一稿多投,主要补充了一些分析内容,实际本文技术含量不高,完全是空想臆测的流水账。原创 2022-02-19 00:37:44 · 3507 阅读 · 0 评论 -
数据库系统期末复习III: 并发控制基础、多粒度两阶段封锁 2PL、幻读解决方案
并发控制的重点是三个级别的封锁,2PL 以及 MVCC。本文属于第一部分,复习除了 MVCC 之外的。基本操作Commit:一旦 commit 了,就无法再 Rollback。 Rollback:再 begin transaction 到 commit 之间使用 Abort:和 rollback 是同一个术语。 一个 txn 的生命周期是从 begin txn 开始,到 commit/abort(rollback) 结束。Conflict Searializable 冲突的依赖:必...原创 2021-12-30 15:20:04 · 887 阅读 · 0 评论 -
数据库系统期末复习II: 查询算法实现 | 聚合 | 排序 | 连接
前情提要,上回数据库系统期末复习I:数据库存储与索引技术_我说我谁呢 --CSDN博客 复习完了DBMS存储模型的内模式的实现,包括怎么存储 records,不同的索引实现的数据结构算法以及不同的适用情况。本文聚焦数据库系统中的查询算法。由于 point query 太简单,在上一篇里面就讲完了,这里主要讲解的是 join,aggregation,order by 的实现算法。位置(数据库系统基本构成)Disk Manager:最底层是负责和 OS 打交道的 Disk Manager,但...原创 2021-12-23 17:36:08 · 923 阅读 · 0 评论 -
为什么 Redis 采用单线程还那么快?
本来在总结并发 B+ 树中的死锁问题,看到笔记里面写着 redis 不用做并发死锁活锁那些东西的处理,于是理解一下这一点。CPU 速度的定量数据主要根据 jeff dean 10年前的经典文件:Latency Numbers Every Programmer Should Knowredis 为什么单线程跳表redis 是单线程的,采用 IO multiplexing,因为他是内存数据库,根本不需要 CPU 运算做瓶颈,只要内存够大,本来内存速度就 10GB/s 左右。redis 采用 R...原创 2021-12-23 12:15:44 · 836 阅读 · 0 评论 -
CMU 15-445 Project 2 B+ Tree 技术总结
首先是教科书的伪代码,基本都要按这个来写,不然写不出来的原创 2021-12-23 09:17:40 · 1813 阅读 · 3 评论 -
数据库系统期末复习I:数据库存储与索引技术
主要是期末复习,结合了学关系代数的课程加上重新整理了一下之前的 midterm 总结,重新聚焦一些要点,添加了详细的解释和重新理解知识点。 整理了一下方便自己复习。DBMS 模式结构外模式是模式的访问权限控制视图 模式是库表关系 内模式包括物理存储:heap file,以什么做 clustering,索引类型,压缩与否,加密数据等Relational model 与 SQL关系代数和关系演算:区别是,一个通过算子(函数操作)来表述,关系演算是通过逻辑谓词。对于编程来说,用 rel...原创 2021-12-22 21:23:58 · 2040 阅读 · 0 评论 -
io_uring 用法分析 III :liburing 接口及高性能 Polling 机制
Interrupt 方案是节约 CPU ,但是延迟高,因为用户态正在休眠,调度到他需要花费一定时间(Linux 调度算法是用红黑树的完全公平调度 CFS,和以前看 APUE 的函数调用有关,然后主要优先级依据是通过 virtual runtime 归一化比较的,同等物理时间下高优先级的虚拟时间过得慢,所以能调度多一些)。鉴于 NAPI 已经要求网卡驱动实现本身提供 poll 接口给 trap handler,这样应用层也可以用这个(而 poll 接口也用在 select poll 上原创 2021-11-18 11:23:59 · 3774 阅读 · 0 评论 -
io_uring 用法分析 II :io_uring 原理和系统调用初步介绍
这个为了方便,之后还要总结一下这个全部的用法摘要,方便查阅。所以分为 3 篇内容(其实前面还有一篇讲异步 IO 的也算吧),第一个是 io_uring 的简单原理分析和 raw interfaces,第二篇是讲 liburing 以及高性能 polling 机制,第三篇是接口以及各选项的总结摘要(这之前先参考 manual 和 liburing 的头文件吧,liburing 也自带了 system call 的 manual)。主要的 io_uring 的资料有这些:io_uring.pdf ...原创 2021-11-18 11:22:39 · 3234 阅读 · 0 评论 -
io_uring 用法分析 I :异步 IO ,Windows IOCP 接口与 Proactor 模式
在具体研究 io_uring 之前,有必要了解之前的 aio,包括 glib 实现的 POSIX aio 和 Linux 后来提供的只支持 O_DIRECT 的 Linux aio (不支持 socket 因为 socket 不能 O_DIRECT)。不然我实在看不懂 io_uring 目前的资料(和 epoll 铺天盖地的资料实在是没法比啊)。首先是基本的情况,由于 Linux 早期不支持 Posix ais,所以实际 glib 是在用户态模拟了一个的,实际原理是通过多线程后台同步读写,然...原创 2021-11-18 11:19:53 · 1842 阅读 · 0 评论 -
EPOLL 原理分析线索 SELECT POLL 原理
首先复习一下 select,poll,和 pselect 先吧。select 是传一个 set 给他,内核收到动静返回,我们再检查 set 有谁可用。 pselect 是为了解决信号缺失的问题他保证在睡觉之前检查一下 mask (需要配合 sigprocmask)如果有马上返回。 poll 的主要解决问题只是 ns 的超时而已。linux 也提供了 ppoll 实现 pselect 相似的功能。还有一个要点是 pselect 只用了 bitset ,而 poll 用的是fd结构体数组。由于一个...原创 2021-11-10 20:00:39 · 481 阅读 · 0 评论 -
CMU15-445 数据库系统 Midterm 总结
Relational model主要是 Integrity constraints 和 relation algebra。 这个在数据库课也学了,就不重复了,基本就是那几个符号而已。SQL基本的SQL 操作,Where 谓语, 输出控制 limit order by 这些也不重复了。 主要记住先 join 再查询会快很多。而不是求笛卡尔积。 445课程主要还学一个 CTE 的用法,有 CTE 的好处是可以写递归查询进行某些拼接,但是也不太好用。最主要可能是说避免看到太长的嵌套而导致问题...原创 2021-10-18 15:14:30 · 608 阅读 · 0 评论 -
C++ 标准库 mutex, condition variable, lock 辨析及读写锁编写 互斥锁条件变量锁辨析互斥锁条件变量区别
看C++ 的时候发现我操作系统白读了,竟然忽然看不懂 C++ 的 RWlock。这里记录一下。。。。内核的自旋锁和睡眠锁先复习这个:从自旋锁、睡眠锁、读写锁到 Linux RCU 机制讲解 - RzBu11023R - 博客园 (cnblogs.com)gmutex condition_variable lock概念先区分一下 lock,mutex,ca 的概念,特别是 lock 是作为 mutex 的 RAII 实现这一点是 C++ 学习目的。C++ 文档看这几个:..原创 2021-09-22 18:43:33 · 669 阅读 · 0 评论 -
调试器实现原理 (ptrace) 和 Segmentation Fault 产生摘要
本文总结以下 ptrace 的功能,从流程上讲解以下大致如何实现一个调试器的思路,以及介绍 初学编程时常常遇到的 Segmentation Fault 和 Stack Overflow 的问题的意义。这里注意栈溢出一般是只有 debugger 才能提示,直接运行程序时一样会出现 Segmentation Fault,本文也讲解 debugger 或者用户程序自己如何判断是栈溢出的方案(附相关的系统调用和内核中的原理)。调试器怎么实现(ptrace) 如果要搞破解和开发外挂,可以学习...原创 2021-08-20 23:01:02 · 690 阅读 · 0 评论 -
6.S081 lab: networking e1000 网卡驱动 附 Linux 网卡驱动编写分析
第二篇--PCI设备解析 - o云淡风轻o - 博客园 (cnblogs.com)Writing Network Device Drivers for Linux LG #156 (linuxgazette.net)26.Linux-网卡驱动介绍以及制作虚拟网卡驱动(详解) - 诺谦 - 博客园 (cnblogs.com)Linux网络设备驱动 _驱动模型 - Abnor - 博客园 (cnblogs.com)参考书籍是 Linux Kernel Development 3rd...原创 2021-08-09 01:30:32 · 2424 阅读 · 1 评论 -
从自旋锁、睡眠锁、读写锁到 Linux RCU 机制讲解
总结一下 O/S 课程里面和锁相关的内容. 本文是 6.S081 课程的相关内容总结回顾, 前置知识是基本的操作系统知识以及部分组成原理知识. 举例如: 线程与并发的概念, 中断与管态用户态概念, 以及基本的并发编程锁模型如读写锁等和部分数据结构. 对于 shared data structure, 需要保证读写的 critical section 时具备 consistency, 特别是读的适合, 不希望读到一个不完整的数据或者数据结构的不完整的结构. 比如一个链表在多个线程的读写过...原创 2021-08-07 04:24:07 · 5016 阅读 · 0 评论 -
并发增量复制垃圾回收 (Concurrent and Incremental Copying GC) 和虚拟内存应用
本文是对 6.S081 课程中 VM applications 论文阅读中对虚拟内存能应用于Garbage Collection 的笔记。主要记录垃圾回收的一些算法和解释论文的应用点。内容是从最简单的 Copying GC (DFS) 到 cheney 的 Copying GC,然后讲解 Baker‘s real time incremental GC 到一个基于 Baker 的 Concurrent GC最后分析VM 怎么赋能 Concurrent GC。本文可以作为增强对虚拟内存的理解和进...原创 2021-07-10 01:03:13 · 1068 阅读 · 0 评论