6

我想在 rhel 6 平​​台上运行一个简单的磁盘性能测试。只是将 1G 字节写入磁盘。我发现如果文件首先被取消链接,它会比被截断快得多。大约是 1.5 秒对 15 秒。

为什么?我以为 unlink() 最后一个硬链接会将文件截断为 0 并删除 inode。为什么使用 unlink() 的 fwrite 比 truncate 更快?

#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;
}
4

1 回答 1

5

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

于 2013-04-08T05:29:20.147 回答