5

現在、C でディスク ファイル操作 (おそらく一種の dbms) で b+tree と通常のバランス ツリーのパフォーマンス テストを行っています。b+tree は bbst よりも高速であると予想されます。 〇作戦。しかし、いくつかのテストの後、システムがディスク ファイルのキャッシュを行っていることがわかりました。ファイルは完全にメモリに保存されていました (私のメモリ サイズは 32GB です)。ディスク I/O が実行されないため、b+tree は決して bbst よりも高速ではありません。それで、b+tree がパフォーマンスで勝つようにシステム キャッシングを無効にする方法があるのだろうか? O_DIRECT|O_SYNC でファイルを開こうとしました:

int fd = Open("sb.dat", O_DIRECT|O_SYNC|O_CREAT|O_RDWR, S_IRWXU|S_IRWXG|S_IRWXO);

しかし、うまくいかないようです。

getrusage() によって提供される情報を次に示します。

ページの回収: 1359821

ページフォールト: 9

4

1 に答える 1

2

私の知る限り、カーネルは、使用している場合でもディスクからブロックをキャッシュしますO_DIRECT。カーネルキャッシュを削除できますが、これは最初にのみ機能します。

echo 3 > /proc/sys/vm/drop_caches
于 2012-12-30T09:00:04.770 に答える