2012-08-09 52 views
4

目錄中有10000個文件的文件A和有10個文件的目錄中的文件B會讀寫文件A比文件B慢嗎? 會受到不同日誌文件系統的影響嗎?Linux中的I/O性能

回答

5

瀏覽目錄和開放文件會慢一些(而不論這是否是在實踐中顯着依賴於文件系統)。該文件上的輸入/輸出完全相同。

編輯:
爲了澄清,「文件」目錄中的是不是真的的文件,而是一個鏈接(「硬鏈接」,而不是符號鏈接),它僅僅是一個某種元數據的名稱,但與您認爲「文件」無關。這也是通過unlink系統調用刪除文件的歷史原因,而不是通過假設的deletefile調用。 unlink刪除鏈接,如果這是最後一個鏈接(但只有那麼!),該文件。

對於一個文件在不同目錄中有一百個鏈接是完全合法的,打開一個文件然後將其移動到不同的位置甚至取消鏈接它(當它保持打開狀態時)是完全合法的。它不會影響您以任何方式讀取/寫入文件描述符的能力,即使文件(據您所知)甚至不再存在。

+0

一般的應用程序將創建一個基於文件名的層次結構,以跨這些目錄分手。 – Geoffrey 2012-08-09 07:27:57

+0

@Geoffrey在讀/寫時會影響查找文件以打開文件和/或I/O性能的時間嗎?基於使用的文件系統創建這種結構是否有意義?是的,你可以在面頰上輕輕地讀出這些問題。 – HonkyTonk 2012-08-09 11:28:06

+0

@HonkeyTonk =如果你處理大量的文件,你應該這樣做,它不那麼難,例如...只是用md5/crc32或者其他東西散列文件名,然後使用前2/3組十六進制字符2/3級。例如:「abc.txt」變成「56b6f095」,所以如果需要的話,建立路徑「/56/b6/f0/abc.txt」,或者更深。你甚至可以使用其餘的散列作爲文件名。 – Geoffrey 2012-08-09 11:32:34

1

一般而言,一旦文件被打開,你有它的句柄,訪問該文件的性能將是相同的,無論其他文件有多少是在同一目錄下。您可以在可能能夠檢測到打開該文件所需的時間的小差異,因爲操作系統將不得不搜索該目錄中的文件名。

0

日記旨在減少文件系統崩潰,恕我直言,恢復時間,也不會影響文件的讀/寫速度。用於處理磁盤(SQUID)上的文件的海量Journaling ext2