问题标签 [aio]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
459 浏览

hornetq - HornetQ 不在 ubuntu 上使用 AIO

我已经在 ubuntu 上安装了 libaio,并使用编程配置运行嵌入式 HornetQ,我这样做是为了在日志上使用 AIO,但我在启动时看到,它没有得到 AIO,总是使用 NIO。有什么方法可以确定它为什么会失败?

0 投票
2 回答
1882 浏览

linux - Linux内核AIO,开放系统调用

为什么 Linux Kernel AIO 不支持异步“开放”系统调用?因为“打开”可以长时间阻塞文件系统,不是吗?

0 投票
3 回答
4521 浏览

java - Java NIO windows 实现

在使用 NIO.2 AIO 功能进行项目时,我查看了“旧”NIO 选择器实现,发现在 Windows 上使用了默认的选择功能,由于内部实现不好,它在 Windows 上根本无法缩放。每个人都知道,在 windows 上 IOCP 是唯一真正的解决方案。当然,完成时回调模型不适合 NIO 选择器模型,但这是否实际上意味着在 Windows 上使用 NIO 基本上不是一个好主意?

例如:新的 AIO 功能包括 IOCP 实现。

在使用已放弃对 AIO 的支持的最新 Netty 框架时尤其如此。所以 Netty 在 Windows 上的速度不如它可能的快?

0 投票
1 回答
5798 浏览

linux - ubuntu中libaio包的作用是什么

我最近开始使用 Ubuntu 并尝试安装一些软件包并遇到了这个软件包libaio,这个软件包的目的是什么,我们什么时候需要在 Ubuntu 上安装它?

0 投票
1 回答
406 浏览

c++ - 来自 STDIN_FILENO 的 aio_read 在 OS X 中返回 EAGAIN

当我在 OS X 中编译这段代码时:

用 g++ 编译它,然后像这样执行它:

它返回:

为什么?如果我在没有前面的情况下运行它,echo "Hello" |它会按预期工作。此外,fcntl 调用不需要引起问题,但它们确实表明 STDIN 没有O_NONBLOCK设置。

0 投票
1 回答
55 浏览

c - 在 aio_write 到文件请求后更改数据

更改或释放传递给 aio_write 以写入文件的缓冲区是否安全?还是我应该等待手术完成?该函数是将所有缓冲区内容复制到队列还是仅复制对数据的引用?

0 投票
1 回答
76 浏览

c - 一个进程中的两个阻塞操作

我有 2 份简单的工作。第一个是从管道读取。第二是通过超时做一些操作。问题是让它在一个过程中工作(我知道如何在两个过程中做到这一点,但它不适合我..)。

并且有一些理由不使用 cron。2 个作业应该异步运行(互不阻塞)。

有任何想法吗?

0 投票
0 回答
152 浏览

c++ - aio_read 导致 OSX 上的地址错误

我在 OSX 中有异步 io 代码,它基本上执行以下操作:

偏移量是非对齐的,缓冲区没有对齐限制。(我知道这是使用异步 io 进行同步读取的“毫无意义”的方式,但这与我的问题无关)。

在某些情况下,当我运行此代码时,我会收到错误代码 14(错误地址)。我认为问题在于可能读取超出缓冲区的末尾并写入filedes.

有没有人经历过类似的事情?

OSX 文档没有提到对齐的要求,只是希望堆栈上没有缓冲区,因为它是异步的(如果我们在读取完成之前阻塞,则不适用)。但我确实找到了一些文档aio_read缓冲区和大小需要 512 字节对齐。有谁知道这个限制(或任何其他对齐限制)是否适用于 OSX aio_read

关于这里可能发生的任何其他想法?

0 投票
1 回答
7132 浏览

c - Linux 内核如何处理异步 I/O (AIO) 请求?

我正在编写一个 C 程序,通过直接从原始块设备文件读取数据来从 SSD 驱动器读取数据。

我正在尝试Linux AIO(我说的是Linux AIO API,即由linuxaio.h诸如io_submit(...)等提供的功能,而不是POSIX AIO API)。我使用标志打开块设备文件,O_DIRECT并确保写入缓冲区与块大小对齐。

我注意到 Linux AIO 它比使用带有O_DIRECT标志的同步 IO 快得多。

最让我惊讶的是,通过使用 Linux AIO 发出许多几 KB 的小随机读取所获得的吞吐量明显高于使用同步 I/O 和O_DIRECT.

所以,我想知道:为什么 Linux AIO 的性能比同步 I/O 更好?使用 AIO 时内核做了什么?内核是否执行请求重新排序?与使用同步 I/O 相比,使用 Linux AIO 会导致更高的 CPU 利用率吗?

非常感谢提前

0 投票
1 回答
985 浏览

c++ - 从引导时保留的内存写入时,内核 AIO (libaio) 写入请求失败

我对 linux aio (libaio) 很陌生,希望这里有更多经验的人可以帮助我。

我有一个执行从 PCI 设备到系统 RAM 的高速 DMA 的系统。然后我想直接从 DMA 地址空间使用 libaio 将数据写入磁盘。目前,用于 DMA 的内存是通过使用“memmap”内核引导命令在引导时保留的。

在我的应用程序中,内存使用 mmap 映射到虚拟用户空间地址指针,我相信我应该能够将其作为缓冲区传递给 io_prep_pwrite() 调用。但是,当我这样做时,写入似乎没有成功。当使用 io_getevents 获取请求时,“res”字段的错误代码为 -22,打印为“Bad Address”。

但是,如果我从先前映射的内存位置执行 memcpy 到由我的应用程序分配的新缓冲区,然后在调用 io_prep_pwrite 时使用指向此本地缓冲区的指针,则请求工作正常并且数据被写入磁盘。问题是执行 memcpy 会为我需要将数据流式传输到磁盘的速度造成瓶颈,并且我无法跟上 DMA 速率。

我不明白为什么我必须先复制内存才能使写请求起作用。我创建了一个最小的示例来说明以下问题。bufBaseLoc 是映射地址,localBuffer 是数据复制到的地址。我不想执行以下行:

...或者根本没有 localBuffer 。在“准备 IOCB”部分我想使用:

...但它不起作用。但是本地缓冲区,它只是一个副本,确实有效。

有没有人知道为什么?任何帮助将不胜感激。

谢谢,