- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我在带有 rtkaio 库的 linux 上使用异步 io。在我的测试中,一切都完美无缺,但是,在我的实际应用程序中,我发现应该返回得非常快的 aio_write 却非常慢。将 128KB 写入 O_DIRECT 填充文件可能需要 100 多英里。我的测试和应用程序都使用相同的 I/O 大小,我检查相同的文件系统 (GFS)。
我添加了计数,我发现大约有 50% 的异步 io 操作是短的(短于 2 英里),50% 的是长的(长于 2 英里)。
我还检查了测试和应用程序都使用相同的 rtkaio 库。
我很迷茫,有人知道我应该去哪里看吗?
我的另一个相关问题:/proc/sys/fs/aio-nr is never higher than 1024 (AIO on linux)
最佳答案
我并不是要气馁,但我怀疑你会得到这个问题的非常有用的答案,因为这里有太多变量(集群文件系统、异步 I/O、O_DIRECT
等),除非有人特别熟悉您的设置,否则任何人能做的最好的事情就是给您模糊的建议。
我想您应该首先尝试确定是实际写入速度慢,还是异步回调处理程序的调用耗时长。您可以尝试用常规同步写入调用替换对 aio_write
的调用。此外,您提到的写入大小似乎很小,那么您为什么要使用 O_DIRECT
?如果有很多小写入,我认为 O_DIRECT
会降低这里的性能。
关于c++ - 带有 rtkaio 的 linux 上的 aio_write 有时很长,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1763712/
更改或释放传递给 aio_write 以便写入文件的缓冲区是否安全。或者我应该等待操作完成?该函数是将所有缓冲区内容复制到队列还是仅复制对数据的引用? 最佳答案 来自man 7 aio: he con
有没有办法检查是否没有 AIO 写入给定文件?我在我的 Unix 类(class)上制作了一个项目,该项目将是一个上下文无关(基于 UDP)的国际象棋服务器,并且所有数据都必须存储在文件中。应用程序将
我试图从本质上模仿 sendfile(2) 的功能以异步方式使用 aio_read(3)和 aio_write(3) . 一切似乎都工作正常,除了测试大型(> 150k)文件。 我有一个简单的stru
我正在寻找 POSIX aio_write 函数的简单示例。 到目前为止我尝试过的内容 下面的内容并不是太重要。只需跳转即可回答 下面的代码创建一个文件,但不向其中写入任何内容。 aio_error
我正在将 write 重写为 aio_write,这样我就可以处理超时(而且我不想为 select 而烦恼) .我从手册页中不明白的一件事是 aio_write 怎么会失败。 对于write,我最感兴
我知道 POSIX write 函数可以成功返回,即使它没有写入整个缓冲区(如果被信号中断)。您必须检查短写并恢复它们。 但是 aio_write 有同样的问题吗?我不认为它会发生,但文档中没有提到它
我正在尝试向文件中写入一个简单的内容,但 AIO 似乎不起作用。可能是什么问题?我知道有一些不必要的额外 header 。 #include #include #include #include #i
我正在尝试使用 aio_write(1) 函数。下面的代码是我的程序。但是,aio_write() 总是返回 EINVAL。 看了EINVAL的错误原因:aio_offset、aio_reqprio、
Linux man-page for aio_write说 The buffer area being written out must not be accessed during the oper
我开始使用aio写一个简单的客户端服务器程序。我的客户端程序: int main(int argc, char const *argv[]) { int port = 6000; s
我在 Linux 2.6.16.46 上玩这段代码: io.aio_fildes = open(name, O_CREAT | O_TRUNC | O_WRONLY | O_SYNC, 00300);
我有一个 C 程序,它写入 32768 个 block ,每个 block 大小为 16K(总大小为 512MB),到运行 3.18.1 内核的系统上的 ext4 文件系统。该程序的常规写入系统调用版
我实现了需要读写的游戏服务器。所以我接受传入连接并使用 aio_read() 开始读取它,但是当我需要发送一些东西时,我停止使用 aio_cancel() 读取然后使用 aio_write ()。在
我正在尝试用“a”字符填充我的文件,我需要使用 aio_write。这是我的写作功能 int da_aio_write(const int d, struct aiocb *aiorp, void *
aio_write() 和 O_NONBLOCK write() 有什么区别?此外,我使用 O_NONBLOCK 函数将 write() 用于使用文件描述符的文本文件,并通过在函数前后放置一个计时器来
我有一个使用 linux aio_write 和 aio_read 的测试实用程序。此测试实用程序包装我的静态库并对其进行测试。这个库是多线程黑盒。 到目前为止,它运行良好。但是现在我们对这个黑盒进行
我在带有 rtkaio 库的 linux 上使用异步 io。在我的测试中,一切都完美无缺,但是,在我的实际应用程序中,我发现应该返回得非常快的 aio_write 却非常慢。将 128KB 写入 O_
我是一名优秀的程序员,十分优秀!