linux aio 内核 版本,Linux内核如何处理异步I/O(AIO)请求?

在谈论I/O时,"更快"的概念很棘手."更快"意味着更高的带宽吗?还是延迟较低?或者给定请求大小的带宽?或者给定队列深度的延迟?或者延迟,带宽,请求大小,队列深度以及许多其他参数或工作负载的组合?我在这里假设您正在考虑吞吐量/带宽,但是,记住存储设备的性能不是单维度量标准是件好事.

SSD是高度并行的设备.SSD由许多闪存芯片组成,每个芯片具有可以独立读/写的多个芯片.SSD利用这一点并行执行许多I/O,而不会显着增加响应时间.因此,就吞吐量而言,SSD看到的并发I/O数量很重要.

让我们了解线程提交同步I/O时会发生什么:a)线程花费一些CPU周期来准备I/O请求(生成数据,计算偏移,将数据复制到缓冲区等),b)系统调用是执行(例如pread()),执行传递给内核空间,线程阻塞,c)内核处理I/O请求并遍历各种内核I/O层,d)提交I/O请求到设备并遍历互连(例如PCIe),e)I/O请求由SSD固件处理,f)实际读取命令发送到适当的闪存芯片,g)SSD控制器等待数据, h)SSD控制器从闪存芯片获取数据并通过互连发送.此时数据离开SSD,阶段ea)反向发生.

如您所见,同步I/O进程正在与SSD进行请求乒乓.在上述许多阶段中,实际上没有从闪存芯片读取数据.除此之外,虽然您的SSD可以并行处理数十到数百个请求,但它在任何给定时刻最多只能看到一个请求.因此,吞吐量非常非常低,因为您实际上并没有真正使用SSD.

异步I/O有两种方式:a)它允许进程并行提交多个I/O请求(SSD有足够的工作来保持忙碌),以及b)它允许通过各个处理阶段流水线化I/O(因此将阶段延迟与吞吐量解耦).

您看到异步I/O比同步I/O更快的原因是因为您比较苹果和橙子.同步吞吐量处于给定的请求大小,低队列深度,并且没有流水线.异步吞吐量具有不同的请求大小,更高的队列深度以及流水线.你看到的数字无法比较.

大多数I/O密集型应用程序(即大多数应用程序,如数据库,Web服务器等)都有许多执行同步I/O的线程.虽然每个线程在任何给定时刻最多可以提交一个I/O,但内核和SSD设备会看到许多可以并行提供的I/O请求.多个同步I/O请求带来与多个异步I/O请求相同的好处.

异步和同步I/O之间的主要区别归结为I/O和进程调度以及编程模型的方式.如果正确完成,异步和同步I/O都可以从存储设备中挤出相同的IOPS /吞吐量.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值