高效网络数据处理:Fast Select 与系统调用规避策略
1. Fast Select 概述
Fast Select 是为了优化系统中 select()
函数调用效率而提出的一系列方法。其核心目标是减少 select()
调用过程中的冗余操作和开销,提高系统性能。以下是一些基本的优化思路:
- 每次调用时重新创建兴趣 :考虑更改 API(P9),为输入和输出使用单独的位图;或者保留 API,使用增量计算(P12a)。
- 恢复后重新检查状态 :在知道描述符何时准备好的协议模块和 select
模块之间传递信息(P9)。
- 让内核重新检查已知未准备好的描述符的就绪状态 :内核跨调用保持状态,避免对已知未准备好的描述符重新检查就绪状态(P12a,使用增量计算)。
- 使用与就绪大小线性相关的位图,而非描述符大小 :从根本上改变 API,避免对位图表示的所有描述符进行基于状态的查询(P9)。
2. 不改变 API 加速 select()
Banga 和 Mogul [BM98] 提出了三种方法来消除 select()
调用中的前三个主要开销来源:
1. 避免从头重建位图
- 操作步骤 :
- 应用程序代码使用两个描述符位图,位图 A 用