WEB开发网
开发学院操作系统Linux/Unix 在 AIX 上通过 pollset 接口实现高效的 I/O 阅读

在 AIX 上通过 pollset 接口实现高效的 I/O

 2009-09-05 00:00:00 来源:WEB开发网   
核心提示: 在监视大量文件描述符时,如果在循环中调用 poll(),在 AIX 上通过 pollset 接口实现高效的 I/O(4),poll 所涉及的这些高成本的系统调用会严重影响总体性能,为了让 poll() 能够处理大量文件描述符,就会出现最糟糕的情况,在这种情况下,AIX pollset 接口提供了

在监视大量文件描述符时,如果在循环中调用 poll(),poll 所涉及的这些高成本的系统调用会严重影响总体性能。

为了让 poll() 能够处理大量文件描述符,AIX pollset 接口提供了两个优化措施。第一个措施减少每个 poll 操作在内核和用户空间之间传输的信息量,见 图 2。pollset 接口在本机(内核)pollset 层中创建并维护一个文件描述符集和感兴趣的事件。应用程序直接向本机 pollset 层注册文件描述符和感兴趣的事件。与 poll() 不同,pollset 接口并不要求选择器在每次调用 select() 时复制整个文件描述符集。相反,它只复制在前一次 select() 调用之后新注册的事件。

图 2. Pollset() 方法

在 AIX 上通过 pollset 接口实现高效的 I/O

第二个优化措施是在内核中使用 poll 缓存机制。它跨系统调用在请求的文件描述符集上维护文件描述符状态。在每个 poll 操作的开头,通过 poll 繁忙的文件描述符跟踪状态。空闲文件描述符的状态是已知的,因为在状态改变时会通知 poll 缓存服务。

图 3. poll 缓存内部结构

在 AIX 上通过 pollset 接口实现高效的 I/O

图 3 显示 poll 缓存中的组件及其关系。poll 缓存管理一个可能很大的文件描述符集。其中的每个文件描述符由一个 poll 缓存控制块(pccb)表示。每个 pccb 根据文件描述符散列值放在 poll 缓存中。维护一个未处理列表,它标识最近有状态转换的 pccb。支持选择和 poll 的每个子系统都向 poll 缓存注册。当文件描述符的状态发生变化时,子系统通知 poll 缓存,这会在 poll 缓存中触发状态转换。传统的 poll()/select() 需要检查选择的所有文件描述符,为了解决由此产生的可伸缩性问题,poll 缓存通过状态转换只把 ‘繁忙的’ pccb 转移到事件列表中。这样,poll 操作就不需要访问 pollset 中的所有 pccb。只为已经添加到事件列表中的控制块提供服务。如果繁忙的文件描述符数量接近选择的文件描述符总数,而且文件描述符数量非常大,就会出现最糟糕的情况。在这种情况下,pollset 方法与传统的选择 /poll 方法相比并不能显著提高性能。

上一页  1 2 3 4 5 6 7  下一页

Tags:AIX 通过 pollset

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接