vfs_aio_pthread — pthread pool を使って 非同期 I/O を実装する
vfs objects = aio_pthread
この VFS モジュールは samba(7)システムの一部である。
vfs_aio_pthread
VFS モジュールは、 pthread API が
有効なプラットフォーム上で、 POSIX AIO インターフェイスを使用せずに
Samba の非同期 I/O を有効にするためのものである。
POSIX AIO は、致命的な制約に悩まされることが多い。たとえば、ある
バージョンの Linux では、高負荷な環境でリアルタイムのシグナルを
使用すると、問題が発生する。別のシステムでは、 AIO の使用に際して
特殊なカーネルモジュールのロードが必要であったり、システム全体で
スケジュールされている非同期リクエスト数に制約があったりする。
glibc ベースのシステム (大半の Linux システム) では、ファイル記述子
あたり、 1 つの処理待ちリクエストしか許可されないため、 glibc の
実装を使用しているシステムでは POSIX AIO が無意味になってしまう。
こうした制約を回避するために、 aio_pthread モジュールが作られた。 このモジュールは、読み取りと書き込みの呼び出しを非同期に処理するため、 内蔵の POSIX AIO インターフェイスに代わって、 pthread pool を使用する。 pthread pool は新しいスレッドを作成することにより生成され、タスクの 割り当てに伴い、 最大で smbd プロセスあたり 100 スレッドまで動的に 拡張される。 この制限を変更する際には、以下で説明する aio num threads パラメーターを 設定すること。 新規の読み取りや書き込みの呼び出しを受信した際にアイドル状態の スレッドが存在した場合、新しいスレッドは作成されず、タスクは既存の アイドル状態のスレッドに割り当てられる。スレッドは 1 秒間アイドル 状態が続くと終了する。
このモジュールを有効にする際には、 smb.conf パラメーターの
aio read size
と aio write size
も適切に設定する必要がある。
このモジュールは、 Samba VFS の pread と pwrite インターフェイスが スレッドセーフでないため、モジュールスタックの最後に配置すること。 このモジュールは、 pread と pwrite システムコールを直接呼び出し、 Samba VFS の pread と pwrite インターフェイスは使用しない。
簡単な使い方:
[cooldata]
path = /data/ice
aio read size = 1024
aio write size = 1024
vfs objects = aio_pthread
I/O 要求を処理するために thread pool 内に作成される smbd 毎のスレッドの最大数を設定する。
デフォルトの値は 100である。