我的应用程序充当系统上运行的其他应用程序的高性能服务器。在开发过程中,我测量到大约30%的内核只用于调用eventfd_write(),因此尝试使用libaio使用单个syscall编写多个evenfd。然后我发现eventfd不支持aio。
有没有明显的障碍不为eventfd实现aio,或者目前没有人需要它?
你知道有任何现有的工作试图实现AIO的Envifd吗?

最佳答案

尽管对eventfd的写入只是对内存的写入,但写入本身是一个系统调用。因此,cpu必须切换上下文,跳转到内核,快速编写,然后切换回用户空间应用程序。
上下文切换的成本非常高,比一次64位写入要高很多。
我们有什么选择?
不要使用eventfd,在共享内存中使用原子标志。您将消除系统调用,性能将显著提高。
不要在每个事件上写入eventfd:
考虑将事件分批分组,每批只写一次。
考虑在事件队列为非空时切换到轮询模式,然后在队列再次为空时切换回轮询模式。
如果在上下文中有意义,请将eventfd write移动到单独的线程。
我相信你对你的应用程序更了解,所以你会想出更多的优化…如果不是-就在stackoverflow上询问;)

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

10-11 03:38