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