我一直在使用 select 来处理连接,最近我们的套接字库发生了变化,select 被 Linux 平台的 epoll 取代。
我的应用程序架构是这样的,我只建立一个或最多 2 个套接字连接,并在单个线程中对它们进行 epoll/select。
现在随着最近切换到 epoll,我注意到应用程序的性能有所下降,我真的很惊讶,并期待性能上升或保持不变。我尝试查看其他各个部分,这是唯一改变的代码部分。
如果用于非常少量的套接字(如 1 或 2),epoll 在速度方面是否会降低性能。
还有一点需要注意的是,我在同一个盒子(8 个 cpu 核心)上运行了大约 125 个这样的进程。这可能是在同一台机器上执行 epoll_wait 的进程太多的情况,当我使用 select 时,这个设置是相似的。
我注意到在盒子上平均负载要高得多,但 cpu 使用率却完全相同,这让我认为更多的时间花在 I/O 上,并且可能来自与 epoll 相关的更改。
关于我应该多看什么来确定问题的任何想法/指针。
虽然增加的绝对延迟非常小,比如平均 1 毫秒,但这是一个实时系统,这种延迟通常是不可接受的。
谢谢
你好,
在最新的发现上更新这个问题,除了从 select 切换到 epoll 我发现另一个相关的变化,select 的早期超时是 10 毫秒,但使用 epoll 的方式超时比以前小得多(比如 1 micro..),可以设置太低select 或 epoll 超时导致性能下降?
谢谢