IO-Polling实现分析与性能评测

本文后续部分链接:《IO-Polling的代码分析

Linux内核4.4版本中引入IO-Polling的处理模式,这一动态引发了业界对于IO处理模式的一番讨论。事实上,在最早期的计算机系统中,Polling(轮询)曾是主流的IO处理模式,但是为了提高CPU的利用率,中断后来居上成了主流。这篇文章将从IO-Polling和中断的工作原理入手,着重对比两者对NVMe SSD(高速固态存储介质的代表)设备性能的影响,在下一篇文章中,笔者还将对IO-Polling的代码做简单分析。

注:上文提到了Linux内核4.4版本中引入了IO-Polling,该模式和早期的轮询工作方式是有很大区别的。首先并非所有IO设备都是Polling模式,其次对于同一类IO设备,通过接口指定某个设备是否支持Polling。这种Polling更灵活,对于上层的各种混合业务配置也更方便。为了对新旧IO-Polling进行区分,早期的IO-Polling统一称作轮询;而最新的IO-Polling仍将称作IO-Polling。

IO-Polling与中断的原理对比

轮询是指CPU不断地等待并轮询IO设备,看看该IO设备是否有可用的数据到来或者是否准备好发送下一字节数据。假设打印机需要十秒来接收另一个直接的数据,IO-Polling的处理模式下,在打印机处理前一波数据的10秒内,CPU除了重复循环的询问打印机是否准备好接收处理下一字节数据外,将不做任何事情。而同样的时间,CPU可以执行超过二百亿次指令。可想而知,慢速设备轮询模式将是对CPU的极大浪费。

相比轮询,中断能够有效的提高CPU利用率。当IO设备准备好数据时,通知CPU;CPU将中断当前进行的工作任务,并调用特殊的中断服务程序,保存当前状态。及时处理IO设备准备好的数据,处理完IO数据后,在返回继续以前的工作任务。在中断的工作模式下,CPU可以在任务中连续工作而并不检查IO设备,允许IO设备在必要时通知中断它的工作。中断的工作模式下,IO设备和CPU是并行工作的,这极大提高了CPU的利用率。

从上文对轮询和中断原理的介绍可以发现,对于打印机、磁盘这样的IO设备,中断有着巨大的优势,但是在高速存储设备快速发展的今天,PCIe SSD已经非常普及,存储介质从磁带和磁盘向闪存和更新的非易失性介质演进,可以说存储IO设备的处理速度已经有了一个质的提升。

在这样一个背景IO中断处理引入的上下文切换所带来的延迟已经不容忽视。例如一个NVMe SSD的写延迟20μs,而上下文切换大约占用5μs,在延迟占比达25%,这已经是一个较高的开销比例。对于延迟敏感的业务而言,底层的5μs也是一大开销影响。IO-Polling迎来了新的发展机遇。

NVMe设备IO-Polling与中断性能对比

本文中仅做了NVMe SSD在IO-Polling和中断情况下的同步IO模式的性能对比测试。对于libaio的测试结果无效,因为在4.4的内核中还没有实现libaio的IO-Polling模式。

测试方法以及环境配置

A. 编译安装4.4版本的内核

1. 下载linux-4.4.tar.xz并解压缩

2. make menuconfig

3. make

4. make modules

5. make modules_install

6. make install

B. 修改grub,并reboot启动新内核:

C. 测试方法与步骤:

1. 设备预处理

2. 测试中断模式下的性能

3. 开启polling模式

4. 测试polling模式下的性能

D. 测试工具:

Fio-2.2.9

4K随机读延迟性能


从4K随机读延迟性能对比图上我们可以看出,中断模式的4K随机读延迟比IO-Polling模式的延迟要大6μs,延迟降低7%左右,并且IO-Polling模式下,延迟非常平稳,几乎没有抖动。

4K随机写延迟性能


从4K随机写延迟性能对比图上我们可以看出,中断模式的4K随机写的延迟比IO-Polling模式的延迟要大5μs,延迟降低20%左右。并且同4K随机读类似,IO-Polling模式下,延迟也比非IO-Polling的延迟要平稳一些。

测试结果总结

从上述测试结果来看,IO-Polling对于sync模式的direct-io的延迟有较好的提升,sync模式下,无论4K随机读或者随机写IO压力下,延迟平均大约减少5μs,而这5μs几乎就是中断模式下,处理中断时,上下文切换的时间差。相比随机读,对随机写的延迟降低约20%,这对延迟敏感的IO请求来说是极大的性能提升。


本文作者Luna是Memblaze产品工程师,主要的研究方向包括KVM、Virtio等虚拟化技术,最擅长的是PCIe SSD在KVM的虚拟化场景中的优化。Luna之前的一篇文章《QEMU-KVM I/O性能优化之Virtio-blk-data-plane》详细分析了Virtio-blk-data-plane技术原理,并通过测试展示了其性能优势。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 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、付费专栏及课程。

余额充值