2012-12-30 14 views
5

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

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

これはうまくいかないようです。 1359821の

ページフォルトを:あなたはO_DIRECTを使用する場合でも、カーネル私の知る限り9

+0

なぜキャッシュをオフにしたいですか?それはあなたが実生活で得るものです。より多くのタスクやより多くのメモリ負荷でどのように動作するかを確認するには、いくつかの並列ベンチマークを実行するか、またはそのメモリを割り当ててアクセスする「memmuncher」アプリケーションを書きます(ループで - システムを実行する)。 –

+0

'O_SYNC'についてはどうですか? – BAK

+0

O_DIRECT | O_SYNC | O_CREAT | O_RDWRはまだ動作しませんでした。( –

答えて

2

はまだあなたは、ディスクからブロックをキャッシュします。ここ

はGETRUSAGEからが提供するいくつかの情報()

ページが再利用されますカーネルキャッシュを削除する可能性がありますが、これは最初に動作します:

echo 3 > /proc/sys/vm/drop_caches 
+0

いくつかのブロックを何度も訪問する..... –

+0

@ClannChenあなたは毎I/Oの前にそれを呼び出すことができます – iabdalkader

関連する問題