Linux

軟體RAID10設置寫入小文件非常慢,這正常嗎?

  • November 5, 2014

我在 Linux 3.16.6-203.fc20.x86_64 上有一個軟體 RAID-10 設置,具有 1.2 元數據和預設塊大小 (512K):

$ cat /proc/mdstat
md0 : active raid10 sdc1[4] sdb1[0] sdd1[2] sde1[3]
     3907023872 blocks super 1.2 512K chunks 2 near-copies [4/4] [UUUU]
     bitmap: 4/30 pages [16KB], 65536KB chunk

unused devices: <none>

文件系統是 ext4,位於 LVM 之上,位於 RAID-10 卷組之上。

$ df -k .
Filesystem                     1K-blocks      Used  Available Use% Mounted on
/dev/mapper/vg_raid10-lv_home 2015734504 810039552 1103278568  43% /home

帶有安裝選項:

$ mount | grep vg_raid10-lv_home
/dev/mapper/vg_raid10-lv_home on /home type ext4 (rw,relatime,seclabel,stripe=256)

一切似乎都很好。SMART 表示所有磁碟都完全正常,沒有重新分配、掛起或離線的扇區。原始同步寫入吞吐量似乎相當不錯:

$ dd if=/dev/zero of=tmp.bin bs=1G count=1 oflag=dsync
1+0 records in
1+0 records out
1073741824 bytes (1.1 GB) copied, 7.85743 s, 137 MB/s

但是,當向 RAID 陣列寫入小 100b(編輯:如答案中所指出的那樣,我正在寫入 512 字節塊,而不是 100 字節塊)時,它非常慢(每次同步寫入大約 84 毫秒):

$ dd if=/dev/zero of=tmp.bin bs=512 count=1000 oflag=dsync
1000+0 records in
1000+0 records out
512000 bytes (512 kB) copied, 84.2859 s, 6.1 kB/s

這對於我擁有的 RAID-10 配置是否正常?

RAID10 不會加速任何形式的 . O_*SYNC,至少對於小文件不會。您一次寫入 512b,並且在每次寫入後將其強制寫入磁碟(加上讀取它所需的元數據,例如文件大小)。

這需要 RAID10 寫入至少 2 個磁碟,可能是 4 個(即所有磁碟)。所有這些寫入都需要在它返回 dd 之前完成,因為這是所O_DSYNC要求的保證。

你的 dd 命令給了我 73.7 kB/s - 在 SSD 上。所以是的,我想這很正常。或者更確切地說, dd 並不是一個好的基準。

RAID 當然不會對小文件進行任何加速。訪問時間仍然保持不變,對於一個需要 HDD 大部分精力的小文件,首先將讀取頭讀取到文件的物理地址將比實際讀取它花費更長的時間。

(如果你有 4K 扇區磁碟,你會進一步減慢速度,這些磁碟必須做一些特殊的事情才能寫入不到一個完整的扇區。)

引用自:https://unix.stackexchange.com/questions/166128