インターセプト ライブラリ

libioil ライブラリを使用すると、libc を使用するアプリケーションから DFuse への読み取りオペレーションと書き込みオペレーションのパフォーマンスを向上させることができます。このライブラリは、アプリからの POSIX の読み取り呼び出しと書き込み呼び出しをインターセプトし、ユーザー空間で直接処理することで、カーネルをバイパスします。

libioil の使用

インターセプト ライブラリを使用するには、DAOS インストール ディレクトリの共有ライブラリを指すように LD_PRELOAD を設定します。

LD_PRELOAD=/usr/lib64/libioil.so

次に例を示します。

$ dd if=/dev/zero of=./foo bs=1G count=20
20+0 records in
20+0 records out
21474836480 bytes (21 GB, 20 GiB) copied, 45.6925 s, 470 MB/s

$ LD_PRELOAD=/usr/lib64/libioil.so dd if=/dev/zero of=./bar bs=1G count=20
20+0 records in
20+0 records out
21474836480 bytes (21 GB, 20 GiB) copied, 15.735 s, 1.4 GB/s

-lioil フラグを使用して、コンパイル時にアプリケーションとインターセプト ライブラリをリンクすることもできます。

インターセプト ライブラリを使用してパフォーマンスを評価するには、パフォーマンスに関する考慮事項パフォーマンスをテストするをご覧ください。

アクティビティをモニタリングする

インターセプト ライブラリのアクティビティ レポートを有効にするには、D_IL_REPORT 環境変数を設定します。これは、通常はプログラムの終了時に、共有ライブラリのデストラクタでのアクティビティの簡単な概要を返します。

D_IL_REPORT に割り当てられた値は、stderr にログに記録する読み取り呼び出しと書き込み呼び出しの数を定義します。すべての呼び出しをログに記録するには、値を -1 に設定します。プログラムの終了時にのみ概要を出力するには、値を 0 に設定します。

次に例を示します。

$ D_IL_REPORT=1 LD_PRELOAD=/usr/lib64/libioil.so dd if=/dev/zero of=./bar bs=1G count=5
[libioil] Intercepting write of size 1073741824
5+0 records in
5+0 records out
5368709120 bytes (5.4 GB, 5.0 GiB) copied, 4.13708 s, 1.3 GB/s

$ D_IL_REPORT=3 LD_PRELOAD=/usr/lib64/libioil.so dd if=/dev/zero of=./bar bs=1G count=5
[libioil] Intercepting write of size 1073741824
[libioil] Intercepting write of size 1073741824
[libioil] Intercepting write of size 1073741824
5+0 records in
5+0 records out
5368709120 bytes (5.4 GB, 5.0 GiB) copied, 4.18626 s, 1.3 GB/s

$ D_IL_REPORT=-1 LD_PRELOAD=/usr/lib64/libioil.so dd if=/dev/zero of=./bar bs=1G count=5
[libioil] Intercepting write of size 1073741824
[libioil] Intercepting write of size 1073741824
[libioil] Intercepting write of size 1073741824
[libioil] Intercepting write of size 1073741824
[libioil] Intercepting write of size 1073741824
5+0 records in
5+0 records out
5368709120 bytes (5.4 GB, 5.0 GiB) copied, 4.12114 s, 1.3 GB/s

coreutils パッケージのほとんどの GNU ユーティリティなど、一部のプログラムには、終了時に stderr を閉じるデストラクタ関数があります。つまり、インターセプト ライブラリは cp や cat などの多くの基本コマンドでは機能しますが、インターセプト ライブラリによって生成されたサマリーを表示することはできません。