Linux 中的io_submit() 系统调用是否保证同一进程多个顺序io_submit() 提交的每个操作的执行顺序?
考虑以下示例: 我在文件描述符上提交了一些 write() 操作,例如:
io_prep_pwrite(iocb_ptrs[0],fd,&buf1,buf1_len,buf1_offset);
io_prep_pwrite(iocb_ptrs[1],fd,&buf2,buf2_len,buf2_offset);
io_submit(ctx,2,&iocb_ptrs[0]);
在提交第一个 io_submit 之后,进程立即再次提交数据:
io_prep_pwrite(iocb_ptrs[2],fd,&buf3,buf3_len,buf3_offset);
io_prep_pwrite(iocb_ptrs[3],fd,&buf4,buf4_len,buf4_offset);
io_submit(ctx,2,&iocb_ptrs[2]);
如果buf3_offset正好和buf1_offset的值相同,是否存在buf1中的数据覆盖buf3中的数据的可能性? 假设我们有一个多核系统,并且执行 aio 提交的进程正在 core1 上运行。 (注意:我们只有一个用户进程)首先 io_submit() 发生了,core1 开始将数据写入磁盘。但是随后发生网络中断,core1 必须停止第一个 io_submit() 以参加中断。现在,core2 处于空闲状态,它进行第二次 io_submit() 调用并将数据发送到磁盘。当 core1 从中断返回时,它将继续处理第一个 io_submit() 并且我要求进程首先写入的数据实际上将最后写入。
这会发生吗?
最佳答案
我不知道this manpage发生了什么概述了linux async io,但它明确指出“操作以任意顺序执行,并且可以针对一个文件描述符启动多个操作”。所以看起来你的紧张是有道理的。
关于c - io_submit writes() 是否保证按顺序执行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24235356/