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技术原理,并通过测试展示了其性能优势。
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 网站上的Socket.IO是一个开源的软件库,用于实时双向通信。它使用WebSockets协议或者退化的轮询技术在浏览器和服务器之间建立连接。Socket.IO可以被用于建立实时应用程序,如即时聊天,游戏和实时股票信息等。 Socket.IO可以在浏览器和服务器之间传输数据,并且它还可以处理跨浏览器的兼容性问题。 ### 回答2: Socket.IO是一个基于Websocket协议的实时应用程序框架。它允许开发者通过简单的API在前后端之间建立双向通信。Socket.IO的官方网站则是一个介绍Socket.IO的官方网页。 官方网站上提供了Socket.IO的完整文档、示例代码和各种资源,供开发者学习和使用。在官方网站上可以找到关于Socket.IO的所有信息,包括如何安装、如何使用以及常见问题等等。对于初学者来说,官方网站提供了非常详细的教程和示例代码,帮助他们快速上手。 除了文档和示例代码,官方网站还提供了Socket.IO的各种扩展和工具。这些扩展和工具可以帮助开发者更好地使用Socket.IO,提高开发效率和应用性能。例如,官方网站上有一些开源项目,可以用于集成Socket.IO和其他技术,如React、Angular等。 官方网站还有一个博客,其中会发布一些关于Socket.IO的最新动态和技术分享。开发者可以通过订阅博客,了解Socket.IO的最新进展和更新。 总之,Socket.IO的官方网站是一个非常重要的资源,对于学习和使用Socket.IO的开发者来说至关重要。它提供了全面的文档、示例代码和扩展,帮助开发者更好地了解和使用Socket.IO。 ### 回答3: socket.io-website是一个开源的网络应用程序开发框架。它基于Node.js平台,提供了实时、双向通信的能力,支持WebSocket、Long Polling等多种通信协议,可以用于构建实时聊天、即时游戏、在线协作等应用。 socket.io-website的主要特点如下: 1.易于使用:socket.io-website提供了简洁的API,使得开发者可以轻松构建实时应用。只需要几行代码就可以实现客户端和服务器之间的通信。 2.跨平台:socket.io-website可以在多个操作系统上运行,包括Windows、Mac和Linux等。 3.支持实时通信:socket.io-website使用WebSocket等实时通信协议,可以实现实时、双向的数据传输,避免了传统的轮询方式的延迟和资源浪费。 4.可靠性较高:socket.io-website使用了心跳机制来检测连接状态,一旦连接断开,会自动重新连接,保证了通信的稳定性。 5.可扩展性:socket.io-website支持分布式部署,可以通过使用redis或MongoDB等数据库来实现多服务器之间的数据共享,从而实现更高的并发和扩展性。 6.兼容性强:socket.io-website可以与各种浏览器和移动设备兼容,不受客户端设备限制,使得开发者能够在多种平台上构建一致的实时应用。 总之,socket.io-website是一个功能强大、易于使用、可靠性较高、可扩展的实时应用框架,可以帮助开发者快速构建实时通信的应用程序,并且支持跨平台运行。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值