io_submit writes()是否保证按顺序执行?

时间:2014-06-16 00:37:33

标签: c linux

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中数据的可能性? 考虑到我们有一个多核系统,并且在核心1上运行aio提交的过程。 (注意:我们只有一个用户进程)首先发生了io_submit(),并且core1开始将数据写入磁盘。但是然后发生网络中断并且core1必须停止第一个io_submit()以参加中断。现在,core2处于空闲状态,它会进行第二次io_submit()调用并将数据发送到磁盘。当core1从中断返回时,它将继续处理第一个io_submit(),并且我要求进程首先写入的数据实际上将最后写入。

这可能发生吗?

1 个答案:

答案 0 :(得分:2)

我不知道this manpage发生了什么,概述了linux async io,但它明确指出“操作是按任意顺序执行的,并且可以启动一个文件描述符的多个操作“。所以看起来你的紧张是合理的。