rhel 6 プラットフォームでディスク パフォーマンスの簡単なテストを実行したいと考えています。1Gバイトをディスクに書き留めるだけです。最初にファイルのリンクを解除すると、切り捨てられるよりもはるかに高速になることがわかりました。15 秒に対して約 1.5 秒でした。
なんで?unlink() は、最後のハード リンクがファイルを 0 に切り捨て、inode を削除すると考えました。fwrite が truncate よりも unlink() の方が速いのはなぜですか?
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int
main(int argc, char* argv[])
{
if (argc < 2) {
return -1;
}
char buf[1024];
srand(time(0));
int i;
for (i = 0; i < 1024; ++i) {
buf[i] = rand();
}
/* unlink(argv[1]); */
FILE* fp = fopen(argv[1], "wb+");
if (fp == NULL) {
perror("fopen");
return -1;
}
for (i = 0; i < 1024 * 1024; ++i) {
if (fwrite(buf, 1024, 1, fp) != 1) {
perror("fwrite");
return -1;
}
}
return 0;
}