相关疑难解决方法(0)

POSIX异步I/O(AIO)的状态是什么?

网页上散布着各种描述POSIX AIO设施的页面,其中包含不同的细节.它们都不是最近的.目前还不清楚他们究竟在描述什么.例如,Linux内核异步I/O支持的"官方"(?)网站说套接字不起作用,但我的Ubuntu 8.04.1工作站上的"aio.h"手册页似乎都暗示它适用于任意文件描述符.然后还有另一个项目似乎在图书馆层工作,文档更少.

我想知道:

  • POSIX AIO的目的是什么?鉴于我能找到的最明显的实现示例说它不支持套接字,整个事情对我来说似乎很奇怪.它只适用于异步磁盘I/O吗?如果是这样,为什么超通用API?如果没有,为什么磁盘I/O首先受到攻击?
  • 哪些示例完整的 POSIX AIO程序我可以看一下?
  • 有没有人真正使用它,真的吗?
  • 哪些平台支持POSIX AIO?他们支持哪些部分?有没有人真的支持隐含的"对任何FD的任何I/O" <aio.h>似乎有希望?

我可以使用的其他多路复用机制非常好,但随处可见的信息碎片让我很好奇.

linux bsd posix asynchronous aio

92
推荐指数
3
解决办法
2万
查看次数

事件驱动和异步之间有什么区别?在epoll和AIO之间?

事件驱动和异步通常用作同义词.这两者有什么不同吗?

另外,epoll和之间有什么区别aio?它们如何结合在一起?

最后,我多次读过Linux中的AIO被严重破坏.究竟是怎么破碎的?

谢谢.

linux asynchronous epoll aio event-driven

40
推荐指数
2
解决办法
1万
查看次数

Linux和I/O完成端口?

使用winsock,您可以将套接字或单独的I/O操作配置为"重叠".这意味着立即返回执行I/O的调用,而实际操作由单独的工作线程异步完成.

Winsock还提供"完成端口".据我所知,完成端口充当句柄(套接字)的多路复用器.如果句柄不在I/O操作的中间,即如果其所有I/O操作都已完成,则可以解复用句柄.

那么,关于我的问题...... linux是否支持完成端口甚至是套接字的异步I/O?

sockets linux posix asynchronous iocp

37
推荐指数
4
解决办法
2万
查看次数

在linux上缓冲异步文件I/O.

我正在寻找在linux上进行异步文件I/O的最有效方法.

POSIX glibc实现使用userland中的线程.

本机aio内核api仅适用于无缓冲操作,内核补丁用于添加对缓冲操作的支持,但这些补丁已超过3年,似乎没有人关心将它们集成到主线中.

我发现了许多允许异步I/O的其他想法,概念和补丁,尽管其中大多数都是在3年以上的文章中.在今天的内核中真正可用的是什么呢?我已经阅读过有关servlet,acalls,内核线程的内容以及我现在甚至都不记得的更多内容.

在今天的内核中进行缓冲异步文件输入/输出的最有效方法是什么?

linux io asynchronous aio linux-kernel

31
推荐指数
2
解决办法
1万
查看次数

Linux async IO的状态?

我在这里问,因为谷歌搜索引导你在档案馆周围愉快的旅行,没有暗示目前的状态.如果你去谷歌,似乎异步IO在2001年到2003年风靡一时,到2006年,有些东西就像epoll并且libaio正在出现; kevent似乎已经消失了,据我所知,仍然没有好的方法来混合基于完成和基于准备的信号,异步sendfile- 甚至可能吗? - 以及单线程事件循环中的所有其他内容.

所以请告诉我,我错了,这一切都很美好! - 而且,重要的是,使用什么API.

在这方面,Linux与FreeBSD和其他操作系统相比如何?

linux io asynchronous

10
推荐指数
2
解决办法
6530
查看次数

Linux磁盘文件AIO

根据本教程,可以使用Linux上的AIO轻松实现异步磁盘文件io,至少从编程/ api的角度来看.但是在本教程之前和之后,我已经阅读了很多帖子和文章,这些要么无法完成,要么应该使用带有补丁和其他许多问题的libevent.另一件事是我应该等待信号的循环,但基于本教程,我可以使用回调机制,这显然使AIO更容易使用.

现在,我不是一个Linux程序员甚至由一个长镜头我只是想找到一种简单的方式来支持Linux上的异步磁盘文件IO,学习它,并把它添加到一个异步磁盘IO库,我需要一个个人项目.目前我在非Windows平台上的Windows和io工作线程上使用重叠io.由于mutithreaded解决方案可能很棘手,我想在Linux上用AIO替换它.

那么,本教程中描述的AIO有什么问题?是性能吗?是否可以使用AIO对操作进行限制?

ps我不关心代码是否无法移植到其他POSIX兼容平台,只要它适用于主要的Linux发行版.而我所关心的只是常规磁盘文件io.

谢谢.

linux aio

9
推荐指数
1
解决办法
8157
查看次数

mmap + madvise真的是一种异步I/O吗?

我正在试图找出是否mmap正在使用文件,然后使用madvise()posix_madvise()使用MADV_WILLNEED/ POSIX_MADV_WILLNEED实际触发后台异步I/O以进行预读.该手册页madvise不指定这是否是如此-的实际行为madvise是左大多不清楚,为了允许执行的灵活性.

但是,当调用madvise()with 时,任何实际的主流POSIX实现(如Linux)是否实际执行异步文件I/O MADV_WILLNEED?我似乎无法得到任何关于此的可靠信息. 这个问题表明它至少在Linux上,即使它不理想,因为没有回调机制.

本书摘录声称posix_fadvisePOSIX_FADV_WILLNEED会做异步读取提前,但没有提及是否madvise()做异步读.

此外,似乎"预读"I/O的整个概念实际上没有任何意义,除非它是异步的.如果它是同步的,它只是让用户应用程序阻止预读,而不是后来实际读取文件时,这似乎不是一个特别强大的优化.

因此,不madvise()MADV_WILLNEED任何主流平台(如Linux)实际做异步预读?

c c++ linux asynchronous mmap

7
推荐指数
1
解决办法
1087
查看次数

在Mono上异步等待实现

在他有关C#async / await中的线程使用的博客文章(http://blog.stephencleary.com/2013/11/there-is-no-thread.html)中,Stephen Cleary详细介绍了如何不使用线程来处理真正的线程。异步操作,例如文件I / O,Web请求等(从现有线程(例如I / O线程)借来的时间除外)

从该帖子看来,当操作系统为Windows时,BCL似乎将使用重叠的I / O或I / O完成端口将操作传递给操作系统。

我的问题是,是否将相同的“无线程”且非阻塞的异步操作模型应用于其他操作系统(主要是Linux的Mono)的C#实现?

如果是这样,那么BCL与OS进行通信的通道是什么,因为IOCP(和重叠的I / O)似乎是Win32 API所特有的?

另外,据推测,一旦到达驱动程序,无论OS是什么,操作都是异步的?

c# mono asynchronous

5
推荐指数
0
解决办法
811
查看次数

io_uring 究竟是什么?

最近我在不同的论坛上看到了这个。据我阅读一些论坛讨论可以看出,它与输入和输出有关。io_uring 究竟是什么?

io io-uring

5
推荐指数
1
解决办法
2021
查看次数

Ubuntu Linux中的异步IO io_submit延迟

我正在寻找有关如何为我在Ubuntu Linux 14.04上运行的应用程序提供高效和高性能异步IO的建议.

我的应用程序处理事务并在磁盘/闪存上创建文件.当应用程序正在进行事务处理时,会创建必须附加到磁盘/闪存上的文件的附加块.应用程序还需要在处理新事务时频繁读取此文件的块.除了还要创建必须附加到此文件的新块之外,每个事务可能还需要从该文件中读取不同的块.有一个传入的事务队列,应用程序可以继续处理队列中的事务,以创建足够深的IO操作管道,以隐藏读取访问的延迟或磁盘或闪存上的写入完成.对于尚未写入磁盘/闪存的块(由先前事务放入写入队列)的读取,应用程序将停止,直到相应的写入完成.

我有一个重要的性能目标 - 应用程序应该产生尽可能低的发布IO操作的延迟.我的应用程序大约需要10微秒来处理每个事务,并准备对磁盘/闪存上的文件发出写入或读取.发出异步读取或写入的额外延迟应尽可能小,以便应用程序可以在每次事务处理时尽可能接近10个usecs,只需要进行文件写入时完成每个事务的处理.

我们正在尝试使用io_submit发出写入和读取请求的实现.我将不胜感激任何有关我们要求的最佳方法的建议或反馈.io_submit会给我们最好的表现以达到我们的目标吗?我应该期望每个写入io_submit的延迟和每个读取io_submit的延迟?

使用我们的实验代码(在2.3 GHz Haswell Macbook Pro,Ubuntu Linux 14.04上运行),我们在扩展输出文件时测量写入io_submit大约50个usecs.这太长了,我们甚至没有接近我们的性能要求.任何帮助我以最小延迟启动写请求的指南都将非常感激.

linux performance latency aio

4
推荐指数
2
解决办法
2142
查看次数

io-uring 实现与 AIO 有何不同?

显然,Linux 已经有了 Asyn-IO (AIO) API。我相信它不是完全异步的。那么 AIO 出了什么问题呢?io_uring 如何克服它?

PS:我尝试阅读https://kernel.dk/io_uring.pdf但无法完全理解,因为我与该语言脱节C

linux aio io-uring

1
推荐指数
1
解决办法
1444
查看次数

标签 统计

linux ×9

asynchronous ×7

aio ×6

io ×3

io-uring ×2

posix ×2

bsd ×1

c ×1

c# ×1

c++ ×1

epoll ×1

event-driven ×1

iocp ×1

latency ×1

linux-kernel ×1

mmap ×1

mono ×1

performance ×1

sockets ×1