您是否曾經有過「使用 NAS 時,當資料夾內有大量檔案時,開啟會花很長時間」的經驗呢?
「有哪些檔案、檔案屬性為何」等資訊也是儲存在 NAS 上的資料,當您在客戶端的檔案總管等打開 NAS 資料夾時,會從 NAS 取得資料夾內檔案清單及其基本屬性(如建立日期等)的中繼資料。當檔案數量增加時,檔案名稱等資訊及中繼資料的容量也會變大,因此取得完成所需的時間也會增加,導致檔案總管顯示完成的速度變慢。
這次有客戶詢問「當大量檔案儲存在同一個資料夾時,開啟資料夾需要多少時間?」因此我們思考了如何取得可作為指標的數字,並進行了實驗。
實驗環境
TS-h1290FX
CPU : AMD EPYC™ 7302P 16核心/32執行緒處理器,最高3.3 GHz
Memory : 64GB(因某些原因從預設的128GB減少)
Storage : Samsung MZQLB960HAJR-00007 x4
RAID配置 : RAID5
OS : QuTS hero h5.3.0.3066
備註:TS-h1290FX 兩台 HA 架構
與 Windows 客戶端 HP Z8 G4 以 10GbE SFP+ 連接。
※本次為 High Availability 實驗,TS-h1290FX 兩台組成叢集,但認為對讀取速度沒有影響。
實驗方法
在 NAS 資料夾內大量建立檔案,並以幾種方式測量讀取完成所需時間。
※雖然不是實際從檔案總管開啟操作,但應可看出趨勢。
用於大量檔案生成的腳本
#!/bin/sh
#FILESIZE in MB
FILESIZE=1
if [ "${1}" = "" ] ; then
exit 1
else
NumFiles=$1
fi
for i in `seq 1 ${NumFiles}`
do
echo ${i}
filename=`printf testfile.%08d ${i}`
if [ -f "${filename}" ] ; then
echo "skip ${filename}"
else
:
dd if=/dev/zero of=${filename} bs=1M count=${FILESIZE}
fi
done
每個檔案為 1MB,依指示數量建立檔案。
重點在「檔案數量」,「檔案大小」則不影響,因此這裡生成的是小檔案。
檔案清單讀取所需時間的測量方法
使用 find 的方法
time find ./ > /dev/null
將輸出丟棄至 /dev/null,純粹測量掃描檔案所需時間。
使用 ls -la 的方法
time ls -la > /dev/null
同樣將輸出丟棄至 /dev/null。
從 Windows 客戶端使用 dir 的方法
echo |time
dir > nul 2>&1
echo |time
從 time 指令的輸出結果差異測量經過時間。
在測量的數字中,這個結果應最接近從檔案總管開啟資料夾所需的時間。
不過,這個數字包含:
・透過 SMB 協定取得 NAS 檔案清單時的網路處理時間。
・由於客戶端 PC 與 NAS 之間的連接為 10GbE,網路頻寬可能成為瓶頸。
・檔案總管顯示時,不包含必要的繪圖相關處理速度。
・檔案總管顯示時,檔案清單應會緩衝至記憶體,不包含為容納檔案清單所需的記憶體分配時間。
因此,如果客戶端 PC 記憶體不足,必須利用 swap 等方式準備空間來儲存檔案清單時,檔案總管顯示所需時間自然會大幅增加,但這裡的數字不考慮客戶端的情況,請理解。
測量結果
以下為測量結果。(「速度」指的是處理完成所需的「秒數」)

內部處理的 “find”、“ls -la” 在 1,000,000 檔案時,分別於 10 秒、不到 20 秒完成。“find” 只取得檔案名稱,而 “ls -la” 還取得權限等資訊,因此處理較重、所需時間較長。
“dir” 則在 1,000,000 檔案時需要不到 1 分鐘。每個檔案的中繼資料量與 “ls -la” 時差不多(也許還取得 ACL …),推測這個差異來自 SMB 協定的額外負擔。
網路方面,來回的 round trip 也會產生不少時間,因此若啟用 jumbo frame,或採用更高速的連接方式如 25G、100G,時間應會縮短。
僅供參考。
總結
當單一資料夾下檔案數量增加時,檔案總管的反應會變慢。針對這點,我們以 Windows 客戶端的 “dir” 指令進行簡單的定量觀察。
在 1,000,000 檔案時,取得所有檔案清單需不到 1 分鐘,因此建議單一資料夾的檔案數量以 100,000~200,000 為最大值來設計資料夾結構。
此外,這次是在 TS-h1290FX 這款全快閃型號下的確認結果,若是在 TS-464 等入門型號則可能有不同結果。不過即使如此,單一資料夾的檔案數量以 100,000 左右為參考應該比較合適。
希望對您有所幫助。
如果大家也在自己的環境測量並取得結果,歡迎在社群分享。