首页 / 知识
关于linux:POSIX异步I / O(AIO)的状态是什么?
2023-04-16 20:50:00

What is the status of POSIX asynchronous I/O (AIO)?网上散布着许多页面,这些页面以不同的细节描述了POSIX AIO设备。它们都不是最新的。目前尚不清楚他们在描述什么。例如,这里的Linux内核异步I / O支持的"官方"(?)网站说套接字不起作用,但是我的Ubuntu 8.04.1工作站上的" aio.h"手册页似乎都暗示着它适用于任意文件描述符。然后还有另一个项目似乎可以在库层工作,甚至需要更少的文档。 我想知道:
我可以使用的其他多路复用机制非常好,但是随处可见的随机信息碎片使我感到好奇。 通过kqueue,epoll,IO完成端口等解决了有效执行套接字I / O的问题。进行异步文件I / O有点晚了(除了Windows的重叠I / O和solaris对posix AIO的早期支持)。 如果您要进行套接字I / O,最好使用上述机制之一。 因此,AIO的主??要目的是解决异步磁盘I / O问题。这很可能是Mac OS X仅支持常规文件而不是套接字支持AIO的原因(因为kqueue还是要好得多)。 写操作通常由内核缓存,并在以后清除。例如,当驱动器的读取头正好经过要写入块的位置时。 但是,对于读取操作,如果您希望内核对读取进行优先级排序和排序,则AIO实际上是唯一的选择。这就是为什么内核可以(理论上)比任何用户级别的应用程序做得更好的原因:
也就是说,posix AIO有一个非常尴尬的接口,例如:
至于使用posix AIO的实际应用程序,您可以看一看lighttpd(lighty),它在引入支持时也会发布性能评估。 到目前为止,大多数posix平台都支持posix AIO(Linux,BSD,Solaris,AIX,tru64)。 Windows通过其重叠的文件I / O支持它。我的理解是,只有Solaris,Windows和Linux才真正支持异步。文件I / O一直到驱动程序,而其他OS则模拟异步。具有内核线程的I / O。 Linux是个例外,它在glibc中的posix AIO实现模拟了用户级线程的异步操作,而其本机异步I / O接口(io_submit()等)一直到驱动程序都是异步的,前提是驱动程序支持它。 我相信在OS中,不为任何fd支持posix AIO而是将其限制为常规文件是相当普遍的。 网络I / O并不是AIO的优先事项,因为编写POSIX网络服务器的每个人都使用基于事件的非阻塞方法。 旧式的Java"数十亿个阻塞线程"方法令人毛骨悚然。 磁盘写I / O已经被缓冲,可以使用posix_fadvise之类的功能将磁盘读I / O预取到缓冲区中。 这将直接的,无缓冲的磁盘I / O留作AIO的唯一有用目的。 直接,无缓冲的I / O仅对事务数据库真正有用,并且那些数据库倾向于编写自己的线程或进程来管理其磁盘I / O。 因此,最后使POSIX AIO失去了任何有用的作用。 不要使用它。 libtorrent开发人员提供了有关此问题的报告:http://blog.libtorrent.org/2012/10/asynchronous-disk-io/ 有aio_write-在glibc中实现; 第一次调用aio_read或aio_write函数会产生许多用户模式线程,对该线程发出aio_write或aio_read post请求,该线程会进行pread / pwrite操作,完成后,答案将回传到被阻止的调用线程中。 它们也是"真正的" aio-内核级别支持(需要libaio,请参见io_submit调用http://linux.die.net/man/2/io_submit); 为此也需要O_DIRECT(可能并非所有文件系统都支持O_DIRECT,但主要的文件系统都支持它) 看这里: http://lse.sourceforge.net/io/aio.html http://linux.die.net/man/2/io_submit POSIX AIO和Linux上的libaio之间的区别? |
最新内容
相关内容
linux内核打包命令?
linux内核打包命令?,信息,工具,系统,软件,内核,管理,标准,情况,智能,文件,如何定制自己的linux内核用户可以使用mkinitrd命令来生成一个initrdlinux进入网站命令?
linux进入网站命令?,系统,环境,网站,传播,终端,命令,窗口,快捷键,界面,虚拟机,虚拟机中的linux怎么进入命令方式点击打开开始菜单里的终端。打linux命令进程状态?
linux命令进程状态?,系统,状态,进程,命令,数据,管理,软件,名称,信息,参数,Linux终止前台进程的命令1、首先,连接相应linux主机,进入到linux命令linux状态监控命令?
linux状态监控命令?,系统,情况,工具,状态,信息,实时,环境,命令,标准,分析,Linux系统监控要用到哪些命令1、命令 可以用百度搜索 你值得拥有:25linux网卡状态命令?
linux网卡状态命令?,系统,网络,电脑,信息,状态,地址,设备,工具,技术指标,网卡,11.LINUX中用来设置、查看网卡状态的命令是()。1、ifconfig命令linux查询内核数命令?
linux查询内核数命令?,系统,第一,信息,命令,实时,软件,电脑,内核,个数,界面,如何查看linux服务器的cpu数量,内核数,和cpu线程数?1、如何查看lilinux入侵网站命令?
linux入侵网站命令?,工作,地址,信息,系统,数字,网站,名称,命令,网络,密码,linux常用命令1、linux系统常用操作命令如下:ls:全拼list,功能是列出目linux系统内核命令?
linux系统内核命令?,信息,系统,工作,工具,电脑,软件,管理,设备,内核,发展,如何查看已安装的Linux内核请在mirrors/里找一个合适的下载点,再到pulinux系统内核命令?
linux系统内核命令?,信息,系统,工作,工具,电脑,软件,管理,设备,内核,发展,如何查看已安装的Linux内核请在mirrors/里找一个合适的下载点,再到pulinux网站根目录命令?
linux网站根目录命令?,系统,一致,设备,网站,目录,根目录,信息,标准,位置,电脑,Linux中怎么切换到根目录?1、找到需要移动文件选择。右键而后选linux命令格式描述?
linux命令格式描述?,地址,图片,系统,工作,命令,信息,设备,百分比,名字,首次,linux命令的格式化命令是什么?1、Linux的磁盘格式化命令是“mkfslinux访问网站的命令?
linux访问网站的命令?,地址,系统,服务,工作,网站,命令,网络,管理,信息,网址,Linux必学的网络操作命令Linux的网络命令比较多,其中一些命令像pin