如果unlink()文件先于截断它,则fwrite()会更快

时间:2013-04-08 05:23:50

标签: c linux

我想在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;
}

1 个答案:

答案 0 :(得分:5)

当磁盘上有足够的可用空间时,删除文件可能比截断文件更快,文件系统可以删除文件并懒惰地回收它们的空间。它可以将inode标记为已删除并在后台或稍后删除该文件,并立即创建新的inode,为新写入做好准备。