同一目錄下檔案數目對效率的影響
看到這篇《Tree-structured FSFS repositories》真的必須記錄一下。不過還是先前情提要一番,再來記錄重點,與自己的想法好了。
Subversion 的 FSFS 原本是把每個 revision 存成一個檔案,放在同一個目錄下。所以,如文中舉例的 Apache Software Foundation (ASF) 的 repository clone,如果總共有 500k 個 revisions,就會有 500k 個檔案,塞在同一個目錄裡。而即將推出的 Subversion 1.5,會改進 FSFS,將檔案以 1000 為單位,分散在不同的子目錄下。
本篇文章值得記錄的有以下幾點:
- "Macro-benchmarks using a clone of the ASF repository (about 500k revisions) showed that the new scheme might be slightly (<1%) slower than the old scheme for reads"
- "VFAT exhibits roughly O(N) behaviour, and slows down quite a bit above 2000 or so revisions."
- 但實際上卻是:"What I saw was a response time that was O(log N) up to 1,024 files, and what I thought was O(N) from 2,048 onwards; on closer inspection, the latter is actually much closer to O(N2)."
最讓我驚訝的是,在「現代」的檔案系統裡[1],將檔案分散到不同目錄,反而讓速度降低了 1%。這與我以前搞 BBS 時,所認知到的不太一樣。這可能是因為,如同文中所說的:"I ran some micro-benchmarks that showed that most filesystems are more sensitive to the depth of the directory tree (the number of path components) than the number of files in the directory. ",在一消一長之間,速度反而變慢了。
不過,這可能也要看,程式是怎麼處理檔案存取的。另外,將檔案分散到不同目錄,另外一個好處就是,可以善加利用不同的硬碟,以達到實質上的分散。例如,A 到 M 開頭的檔案,放在 /storage/a-m 目錄下,而 N 到 Z 開頭的檔案,則放到 /storage/n-z 目錄下,不過,/storage/a-m 是從 ad1 硬碟 mount 上來的,而 /storage/n-z 則是從 ad2 硬碟 mount 上來的。因為以目前常見的檔案系統裡,不同硬碟還是必須處於不同目錄下[2],而不能做到,同一個目錄某些檔案從 A 硬碟來,其他檔案從 B 硬碟來。
最後的想法是,VFAT 的效率還真是差啊。
Random Posts
- None Found
Similar Posts
- None Found
One Backlink
同一目錄下檔案數目對效率的影響該文探討若有大量的檔案需要管理時,是要放在 同一個目錄 像 PTT 一樣以某種規則散布在各個目錄下 (註:以第一個英文字母做切割)
Post a Comment