【发布时间】:2011-10-02 00:08:02
【问题描述】:
有没有人使用过 Linux aio 函数(io_*,不是 posix aio)?如果有人可以提供一些示例的链接(或在此处提供一些示例),那就太好了。另外,您对它们的使用有何一般看法/cmets?
我正在开发一个 I/O 库,有人建议我看看它们。众所周知,它们在某些情况下比 POSIX aio 表现更好,我想看看。
谢谢。
【问题讨论】:
-
这是评论而不是答案,但除了在最极端的情况下,仅仅为了性能而选择复杂的非标准 API 可能是一个非常大的错误,尤其是当差异在最好的。如果您不喜欢 POSIX AIO(这是一个非常丑陋和痛苦的 API),更好的方法是创建专用的 IO 线程。
-
是的。我的库中确实有用于 I/O 的专用线程。但是我和一个人进行了简短的交谈,他说当他使用 linux io_* 函数以随机顺序编写文件时,与“write”和“aio_write”相比,他看到了明显更好的性能。因此产生了好奇心。
-
他试过
pwrite吗?如果您将write用于“随机顺序”,那么只需在每个write之前进行额外的lseek调用,就会在系统调用开销方面产生巨大的额外成本。您也可以尝试posix_fadvise向内核提示您打算执行随机访问。 -
他没有提到pwrite,所以我猜他没有,这就是为什么我很想尝试一下。几个小时以来我一直在研究,io_prep_pwrite 似乎是 aio 功能之一。
-
在“Daniel McNiel's (OSDL) aiocp test”部分下找到了一个示例here
标签: c linux io linux-kernel