我想在rhel 6平台上运行一个简单的磁盘性能测试。它只是将1G字节写入磁盘。我发现如果文件首先取消链接,它会比截断文件快得多。与15秒相比,它大约是1.5秒。
为什么呢?我认为unlink()最后一个硬链接会将文件截断为0并删除inode。为什么使用unlink()比使用truncate更快的fwrit?
#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;
}
答案 0 :(得分:5)
当磁盘上有足够的可用空间时,删除文件可能比截断文件更快,文件系统可以删除文件并懒惰地回收它们的空间。它可以将inode标记为已删除并在后台或稍后删除该文件,并立即创建新的inode,为新写入做好准备。