0%

本文基于linux kernel 3.19.8版本梳理一下读文件的过程,从vfs开始,到发送请求给block层结束。

阅读全文 »

应用程序可以通过posix_fadvise()来告诉内核访问文件的模式,建议内核如何进行IO以达到最优性能(如名字所示,它仅仅是一个建议或期望,内核不承诺遵守)。可用的模式有:POSIX_FADV_NORMALPOSIX_FADV_SEQUENTIALPOSIX_FADV_RANDOMPOSIX_FADV_NOREUSEPOSIX_FADV_WILLNEEDPOSIX_FADV_DONTNEED。本文看一看它们的行为。

阅读全文 »

BatchSystem是Tikv实现multi-raft的基石,本文介绍BatchSystem的实现。BatchSystem本身是一个抽象出来的通用的模块,不牵涉业务逻辑(multi-raft),方便单独介绍。

阅读全文 »

Rust中match随处可见,但是其中有一些细节值得注意:被match的对象可以是值也可以是引用,pattern可以是值也可以是引用,这就有4种组合,各自是什么行为呢?

阅读全文 »

Block层的请求在device的queue里会发生reorder与merge以提高效率,然而,在进入device的queue之前也会做同样的努力,这就是plug机制。

阅读全文 »

简单介绍advanced format disks(4K扇区磁盘)的产生与标准,并对比512e磁盘分区对齐与不对齐时的性能。

阅读全文 »

iostat可以获取到特定device的IO请求信息,如read/write数,合并数,request size,等待时间等。但这些都是基于device统计的,我们无法获取到基于IO的详细信息,特别是等待时间都花在哪里了?比如多少时间是在IO scheduler(device的queue)中排队,从发送到device driver到完成又是多少时间。blktrace可以提供这些信息。

阅读全文 »