Asynchronous I/O (非同期I/O)

非同期I/Oは、通信が進行中でもCPUが同時に実行を続けられるようにする入出力処理の形式です。

ディスクとネットワークはCPUよりも桁違いに遅いです。I/O操作を開始して結果を待つのではなく、データが必要になることが分かったらすぐにCPUがI/O操作を開始し、I/O操作の結果に依存しない他の命令の実行を続けることができます。

説明のために大まかな比較をいくつか示します。

デバイス

レイテンシー

帯域幅

CPU L3 キャッシュ

10ns

>400 GB/秒

メモリ

100ns

100GB/秒

ディスク (NVMe SSD)

400us

380MB/秒

通信網

50~200ミリ秒

1 Gb/秒 (125 MB/秒)

(fioによる報告による実際のディスク統計で、サイズ2KBのランダム読み取りで約190k IOPS)

幸いなことに、SSDドライブは操作を同時に実行できるため、CPUは同時に複数のリクエストを開始し、実行を続け、その後ほぼ同時に複数の操作の結果を受け取ることができます。

一部のデータベース(例:lmdb / mdbx)は、ディスクへの読み書きにメモリマップドストレージを使用しています。残念ながら、メモリマップドストレージはカーネル(mmap)によって実装されており、非同期ではないため、操作が完了するのを待っている間、実行がブロックされます。

非同期i/oについての詳細はこちらで読むことができます。

Last updated