Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/135.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在linux上用rtkaio写aio有时很长_C++_C_Linux_Asynchronous_Io - Fatal编程技术网

C++ 在linux上用rtkaio写aio有时很长

C++ 在linux上用rtkaio写aio有时很长,c++,c,linux,asynchronous,io,C++,C,Linux,Asynchronous,Io,我在linux上使用异步io和rtkaio库。在我的测试中,一切都很完美,但在我的实际应用程序中,我发现应该返回得很快的aio_write非常慢。将128KB的内存写入O_直接填充文件可能需要超过100毫秒的时间。 我的测试和应用程序都使用相同的I/O大小,我检查相同的文件系统(GFS) 我添加了计数,我发现大约有50%的异步io操作是短的(短于2毫秒),50%是长的(长于2毫秒) 我还检查了测试和应用程序是否都使用相同的rtkaio库 我迷路了,有人知道我该去哪里吗 另一个与我相关的问题:我并

我在linux上使用异步io和rtkaio库。在我的测试中,一切都很完美,但在我的实际应用程序中,我发现应该返回得很快的aio_write非常慢。将128KB的内存写入O_直接填充文件可能需要超过100毫秒的时间。 我的测试和应用程序都使用相同的I/O大小,我检查相同的文件系统(GFS)

我添加了计数,我发现大约有50%的异步io操作是短的(短于2毫秒),50%是长的(长于2毫秒)

我还检查了测试和应用程序是否都使用相同的rtkaio库

我迷路了,有人知道我该去哪里吗


另一个与我相关的问题:

我并不想泄气,但我怀疑你能否得到一个非常有用的答案,因为这里有太多的变量(集群文件系统、异步I/O、
O\u DIRECT
等),除非有人特别熟悉你的设置,任何人所能做的最好的事情就是给你含糊不清的建议


我想您应该首先尝试确定是实际写入速度慢,还是异步回调处理程序调用时间长。您可以尝试将对
aio_write
的调用替换为常规同步写入调用。另外,您提到的写大小似乎很小,那么为什么要使用
O_DIRECT
?如果有很多小的写入,我认为
O\u DIRECT
会降低这里的性能。

是否使用
open()
打开文件


确保使用
O_NONBLOCK
打开文件,并且使用
O_WRONLY
打开文件。是的,没错,问题非常具体。但我愿意接受任何线索:)。128KB的i/o不是那么小。我只测量对lanunch async io的系统调用,而不是完成I/O所需的时间。我使用O_DIRECT是因为我不需要缓冲,而且我有TBs文件。10倍!我不确定是否需要O_NONBLOCK。aio_write/aio_read不需要它。我还以O_RDWR模式打开,因为我需要读和写。你能详细解释一下为什么你认为需要O_Non Block吗?我承认我在实践中对aio一无所知。但这听起来像是SystemTap的一个很好的应用程序。具体来说,您可以让它显示完整的内核调用树(这里有一些示例脚本),甚至可以在调用之前启用跟踪,然后立即禁用。与时间戳一起,这至少应该缩小使用时间的范围。(听起来它似乎出于某种原因进入了一个回退路径,并等待它决定依赖的写操作或磁盘操作,但这只是猜测。)