3002|1

6423

帖子

16

TA的资源

版主

楼主
 

IO-Polling的代码分析 [复制链接]

原文地址
在前一篇文章《IO-Polling实现分析与性能评测》中提到了IO-Polling与中断的原理区别,并通过两种模式下NVMe SSD的性能测试对两者进行了对比。这篇文章将深入到IO-Polling的代码层面,对这一IO处理模式进行一个解读。
IO-Polling模式已经加入了linux 4.4的内核,并已有多个成员组在测试IO-Polling对快速设备的性能影响。目前的IO-Polling仅支持direct-IO的sync模式读写操作,后期将加入对libaio的IO-Polling的支持,详细见下图git log信息。

IO-Polling的代码分析
本文基于linux内核4.4版本,简单分析支持IO-Polling模式内核块设备层,文件系统以及底层NVMe驱动所修改修改的大致内容。4.4版linux内核的IO-Polling共修改33个文件,详细修改列表见下图:

在block/blk-core.c中主要新增blk-poll函数,用以支持polling模式。在blk-poll函数中,如果底层驱动不支持mq或者mq中不支持polling模式,则会返回上层,采用中断模式。如果底层驱动支持mq的polling模式,则调用底层驱动的poll函数进行IO处理,详细函数内容见下图。

在block/blk-mq-sysfs.c以及block/blk-sysfs.c文件中,增加了sys文件系统对io-poll参数的支持

在block/blk-mq.c文件中,修改各个函数增加对poll逻辑的处理。

除以上对通用块设备层的修改,各个IO设备要支持polling模式,还需要对各自的设备进行部分修改。以NVMe 设备为例,NVMe 驱动源码中增加nvme_poll函数,在注册是挂载到block层,当上层以polling模式访问NVMe 设备时,驱动将调用nvme_poll函数,而不再走中断模式。NVMe 驱动代码修改大致如下:

而在文件系统层fs/direct-io.c中,direct-io的有关函数的已修改支持polling,实际测试中polling只有在direct_io中才起作用,buffer_io模式下,IO模式依然采用中断方式。前一篇文章中仅提供了裸设备polling模式性能数据,对于文件系统的polling模式将在后期对此做详细分析。

结语
上层应用业务虽然大部分是异步模式的,但对于基于同步IO,并且对延迟非常敏感小部分关键业务而言,IO-Polling所带来的延迟收益也是有巨大帮助的。同时,linux内核也在不断进化过程中,异步模式Polling也将加入。随着高速存储设备的发展,IO-Polling的工作模式对延迟敏感型业务将发挥更大的作用。
本文作者Luna是Memblaze产品工程师,主要的研究方向包括KVM、Virtio等虚拟化技术,最擅长的是PCIe SSD在KVM的虚拟化场景中的优化。Luna之前的一篇文章《QEMU-KVM I/O性能优化之Virtio-blk-data-plane》详细分析了Virtio-blk-data-plane技术原理,并通过测试展示了其性能优势。

此帖出自FPGA/CPLD论坛

最新回复

讲的非常好,看了收获很多,十分感谢   详情 回复 发表于 2020-9-20 14:33
点赞 关注
个人签名training
 

回复
举报

78

帖子

0

TA的资源

一粒金砂(初级)

沙发
 

讲的非常好,看了收获很多,十分感谢

此帖出自FPGA/CPLD论坛
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表