Linux AIO ABI wrapper for python (module)
[english] | [한국어 (korean)]
Python wrapper module that uses Linux Kernel AIO directly
In summary, it allows non-blocking and asynchronous use of blocking IO operations such as read(2) and write(2).
The POSIX AIO APIs have the aio_
prefix, but the Linux Kernel AIO has the io_
prefix.
There is already a POSIX AIO API for asynchronous I/O, but Linux implements it in glibc, a user-space library, which is supposed to use multi-threading internally.
So, as you can see from the experiment below, it’s much worse than using the blocking IO API.
linux_aio
ctypes
Examples can be found in the code in the test directory.
cgroup
)Experiment script (requires python 3.7)
1000
times in1ms
intervals.1KB
to100KB
, but it is small.It is not a perfectly fair comparison.
aiofiles
and aiofile
are libraries that support asyncio. Since open()
is blocking, there is a disadvantage that you can not do any other work while IO is going on. libaio
and linux_aio
are non-blocking, but must be polled.
It may differ from environment to environment.
# of files | 1 | 6 | 12 | 24 |
---|---|---|---|---|
aiofiles | 1.681 | 3.318 | 5.354 | 9.768 |
aiofile | 1.543 | 1.958 | 2.493 | 3.737 |
libaio | 1.311 | 1.344 | 1.362 | 1.423 |
open() | 1.252 | 1.322 | 1.375 | 1.481 |
linux_aio | 1.305 | 1.327 | 1.353 | 1.431 |
# of files | 1 | 6 | 12 | 24 |
---|---|---|---|---|
aiofiles | 321 | 321 | 321 | 321 |
aiofile | 3 | 8 | 15 | 26 |
libaio | 1 | 1 | 1 | 1 |
open() | 1 | 1 | 1 | 1 |
linux_aio | 1 | 1 | 1 | 1 |
# of files | 1 | 6 | 12 | 24 |
---|---|---|---|---|
aiofiles | 21MB (22.6GB) | 21MB (22.6GB) | 21MB (22.6GB) | 21MB (22.6GB) |
aiofile | 17MB (258MB) | 17MB (654MB) | 17MB (1080MB) | 18MB (1949MB) |
libaio | 17MB (76MB) | 17MB (76MB) | 17MB (76MB) | 17MB (76MB) |
open() | 17MB (76MB) | 17MB (76MB) | 17MB (76MB) | 17MB (76MB) |
linux_aio | 17MB (76MB) | 17MB (76MB) | 17MB (76MB) | 17MB (76MB) |
# of files | 1 | 6 | 12 | 24 |
---|---|---|---|---|
aiofiles | 42.8% | 85.0% | 102.2% | 113.2% |
aiofile | 31.4% | 52.4% | 67.0% | 84.0% |
libaio | 14.0% | 16.0% | 17.2% | 20.6% |
open() | 13.4% | 17.6% | 21.0% | 26.2% |
linux_aio | 13.0% | 15.0% | 16.0% | 21.0% |