6

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

1 に答える 1

5

ディスクに十分な空き領域があり、ファイル システムがファイルを削除してその領域を遅延して再利用できる場合、ファイルを削除する方がファイルを切り詰めるよりも速く見える場合があります。inode を削除済みとしてマークし、バックグラウンドで、または後でファイルを削除し、ほぼ瞬時に新しい inode を作成して、新しい書き込みの準備を整えることができます。

于 2013-04-08T05:29:20.147 に答える