gpt4 book ai didi

c - 使用 Linux AIO 写入 eventfd

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:20:25 28 4
gpt4 key购买 nike

我的应用程序充当系统上运行的其他应用程序的高性能服务器。在开发过程中,我测量到大约 30% 的内核仅用于调用 eventfd_write(),因此尝试使用 libaio 通过单个系统调用编写多个 evenfd。然后我发现 eventfd 不支持 AIO。

不为 eventfd 实现 AIO 是否有任何明显的障碍,或者只是暂时没有人需要它?

您是否知道任何尝试为 eventfd 实现 AIO 的现有工作?

最佳答案

尽管写入 eventfd 只是写入内存,但写入本身是一个系统调用。因此,您的 CPU 必须切换上下文,跳入内核,快速写入,然后切换回您的用户空间应用程序。

上下文切换的成本很高,远远超过单次 64 位写入。

我们有哪些选择?

  1. 不要使用 eventfd,在共享内存中使用原子标志。您将消除系统调用,您的性能将显着提高。

  2. 不要在每个事件上写入 eventfd:

    • 考虑将您的事件分批进行,每批只写一次。
    • 考虑在事件队列非空后切换到轮询模式,然后在队列再次为空后切换回轮询模式。
  3. 如果在您的上下文中有意义,请将 eventfd 写入一个单独的线程。

我相信您更了解您的应用程序,因此您会想出更多的优化...如果没有 - 只需在 StackOverflow 上询问即可;)

关于c - 使用 Linux AIO 写入 eventfd,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43922859/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com