欢迎来到天天文库
浏览记录
ID:21268939
大小:67.00 KB
页数:7页
时间:2018-10-20
《在 aix 上通过 pollset 接口实现高效的 i-o》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、在AIX上通过pollset接口实现高效的I/O 简介 JDK1.4引入的neChannel channel1 = DatagramChannel.open(); channel1.configureBlocking(false); 如果有数据,就读取并处理数据。如果没有数据可读,read调用立即返回。然后,对另一个文件描述符重复这个过程。在等待一段时间之后,重新开始,重复读取每个文件描述符。这种方法称为忙-等待poll。 poll方法:传统的I/O多路复用方式 由于以下两个问题,忙-等待polling方法会对效率造成严重影响: 当给
2、定的文件描述符上没有数据可读时,它会反复执行read()系统调用,这会浪费大量CPU周期。编缉推荐阅读以下文章AIX使用异步I/O(aio)提高系统性能使用NIM备份和恢复虚拟I/O服务器(VIOS)AIX系统磁盘I/O性能评估 当一个文件描述符上数据准备好时,它无法立即响应。 在多任务系统上尤其应该避免这种忙-等待polling方法。 为了解决这些问题,UNIX®SystemSVR3上引入了一个poll()API,它已经成为POSIX标准的一部分。简单地说,应用程序向内核提供一个文件描述符列表和一个超时值,它需要监视这些文件描述符的读/
3、写/错误状态。内核向相关设备的选择函数注册这个进程/线程,并让这个进程/线程睡眠。当相关设备准备好或计时器过期时,内核唤醒注册的进程/线程。这种方法会显著降低I/O开销;它消除了内核和用户空间之间的大量系统调用和数据复制。另外,应用程序可以立即响应I/O事件。 JavaNIO库引入了一个选择器类,用于从Java应用程序支持这个API。任何Java应用程序都可以通过open()调用打开一个选择器以获取相关联的数据结构,见清单2。 清单2.如何获取选择器对象 Selector selector = Selector.open(); 然后,应
4、用程序用register()调用向选择器注册通道(文件描述符)和感兴趣的操作。例如,如果应用程序希望知道某一通道什么时候准备好读取,可以向选择器注册这个文件描述符并指定读操作,见清单3。 清单3.向选择器注册通道 channel.register(selector, SelectionKey.OP_READ); 图1.传统的poll()方式 如图1所示,选择器在内部保存这些详细信息,直到应用程序在选择器上调用select()方法,见清单4。然后,选择器把通道和感兴趣的操作复制到内核空间,让内核为这个应用程序执行实际的poll。编缉推荐阅
5、读以下文章AIX使用异步I/O(aio)提高系统性能使用NIM备份和恢复虚拟I/O服务器(VIOS)AIX系统磁盘I/O性能评估 清单4.如何启动poll channel.register(selector, SelectionKey.OP_READ); select()调用返回一个文件描述符列表,对于每个文件描述符至少注册了一个事件。然后,应用程序只能对这些文件描述符执行I/O操作。这种方法会消除内核和用户空间之间的大量系统调用和数据复制,从而显著降低开销。 选择器在内部调用一个本机poll()函数(见清单5),这个函数支持在一组文
6、件描述符上多路复用输入和输出: 清单5.poll()API的签名 int poll(struct pollfd fds[], nfds_t nfds, int timeout); pollset方法:AIX解决poll()/select()可伸缩性问题的方法 但是,传统的1234下一页——感谢阅读这篇文章,..,poll方法有可伸缩性问题;它不太适合处理大量文件描述符。根本问题是,随着文件描述符数量的增加,每个poll操作所需的工作量会线性增加。为了提高可伸缩性,已经提出了许多新的API,比如/dev/poll、实时信号、I/O完成端
7、口、/dev/epoll和内核队列。对于哪个API是最好的长期解决方案,有许多争论(见[POLLCMP])。 poll()的哪些方面影响可伸缩性? 每个poll()调用都提供要poll的文件描述符列表。对于每个调用,都要把这个列表复制到内核空间中。图1中红色的事件表示这些重复的复制。 poll一个对象需要两步:首先在文件描述符上建立一个持有计数,然后调用与这个文件描述符相关联的操作。 异步和同步poll之间的主要路径长度差异是,分配和最终清除控制块。 作为poll操作的最后一步,要清除所有控制块。必须从与块相关联的对象中删除每个控制块。这要求
8、poll方法锁住对象。编缉推荐阅读以下文章AIX使用异步I/O(aio)提高系统性能使用NIM
此文档下载收益归作者所有