
ディスク上のファイルI / O時間を測定しようとしています。すべてのI / OがRAMではなくハードドライブで発生することを確認するために、読み取り時間を設定する前にキャッシュ削除コマンドを実行しました。具体的にはfprintf
、Cプログラムを呼び出して3を作成します。/proc/sys/vm/drop_caches
ソースは次のとおりです。
FILE *f = fopen("/proc/sys/vm/drop_caches", "w");
if (!f)
{
perror("Opening of /proc/sys/vm/drop_caches failed");
return 1;
}
fprintf(f, "3");
fclose(f);
コードは実際には大規模なクラスタの多くのシステムで実行されており、ほとんど奇妙な問題が発生します。上記のコードを実行するには数時間かかることがあります。ここでのワークフローは、読み出し→キャッシュ削除→繰り返しです。読み込みには約5分しかかからないので、その短い時間にキャッシュされた内容が多くないはずです。
両方のコンピュータはほぼ同じソフトウェアとハードウェアを備えていますが、約20のうちの1つだけがキャッシュを削除するのに問題がないようです。
そんなに時間がかかる理由はありますか?場合によっては、プログラムが完全に停止しているようです。この問題を解決する方法についてのヒントはありますか?
編集者:================================================ = =========
私はこれについていくつかのトラブルシューティングを行いました。全体として、私たちはこれがHadoopとHDFSに関連していると思います。
1)コマンドの他のインスタンスが中断されている間にコンピュータでCプログラムを手動で実行でき、場合によっては中断されたプログラムの前に返されます。つまり、プログラムの他のインスタンスがキャッシュを削除して返す可能性があるため、実際のキャッシュの削除にはそれほど時間がかかりません。
2)マシンの1つに問題がない理由は、hadoopまたは他のプログラムがそのノードでクラッシュしてhadoopで使用できなくなったためです。これが私たちがHDFSに関連していると考える理由です。