伺服器好慢啊~ 總之來測試一下吧 – I/O 測試結果
接續上篇的 伺服器好慢啊~ 總之來測試一下吧 – I/O 測試
測試環境
- 硬體:
- Raspberry Pi 4B 4G
- Armor Sheild + 5cm 風扇
- Kingston DataTraveler Kyson 64G (DTKN/64GB) *2
- 軟體:
- Ubuntu 20.04.2 LTS
- hdparm: 9.58+ds-4 / apt
- sysbench: 1.0.18+ds-1 / apt
- fio: 3.16-1 / apt
- 分割區設定:
- MBR / FAT32 / 512K / offset=60672 (原廠預設)
- MBR / ZFS / ZRAID-1
- MBR / BERFS / raid1
建立 ZFS 檔案系統:
sudo zpool create Kyson raidz \ /dev/disk/by-id/usb-Kingston_DataTraveler_3.0_408D5CBFD9DDE460B9A4AE87-0:0 \ /dev/disk/by-id/usb-Kingston_DataTraveler_3.0_B42E99B07A9FE460B954E385-0:0
ZFS 資訊:
$ sudo zpool status pool: Kyson state: ONLINE scan: none requested config: NAME STATE READ WRITE CKSUM Kyson ONLINE 0 0 0 raidz1-0 ONLINE 0 0 0 usb-Kingston_DataTraveler_3.0_408D5CBFD9DDE460B9A4AE87-0:0 ONLINE 0 0 0 usb-Kingston_DataTraveler_3.0_B42E99B07A9FE460B954E385-0:0 ONLINE 0 0 0 errors: No known data errors
建立 BTRFS 檔案系統:
sudo mkfs.btrfs -m raid1 -d raid1 --force --label Kyson \ /dev/disk/by-id/usb-Kingston_DataTraveler_3.0_408D5CBFD9DDE460B9A4AE87-0:0 \ /dev/disk/by-id/usb-Kingston_DataTraveler_3.0_B42E99B07A9FE460B954E385-0:0
BTRFS 資訊:
btrfs-progs v5.4.1 See http://btrfs.wiki.kernel.org for more information. Label: Kyson UUID: 9b055d80-ae6b-4bfd-a213-99e468d4e3d5 Node size: 16384 Sector size: 4096 Filesystem size: 115.50GiB Block group profiles: Data: RAID1 1.00GiB Metadata: RAID1 1.00GiB System: RAID1 8.00MiB SSD detected: no Incompat features: extref, skinny-metadata Checksum: crc32c Number of devices: 2 Devices: ID SIZE PATH 1 57.75GiB /dev/disk/by-id/usb-Kingston_DataTraveler_3.0_408D5CBFD9DDE460B9A4AE87-0:0 2 57.75GiB /dev/disk/by-id/usb-Kingston_DataTraveler_3.0_B42E99B07A9FE460B954E385-0:0
hdparm
測試結果
Round #1 輸出:
/dev/sda: SG_IO: bad/missing sense data, sb[]: 70 00 05 00 00 00 00 0a 00 00 00 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 Timing buffered disk reads: 514 MB in 3.01 seconds = 171.00 MB/sec
Timing buffered disk reads:
Round | -t | -t –direct |
---|---|---|
#1 | 171.00 MB/sec | 174.09 MB/sec |
#2 | 173.34 MB/sec | 175.35 MB/sec |
#3 | 173.45 MB/sec | 174.29 MB/sec |
根據我自己的測試, Kingston DataTraveler Kyson 在 AMD X370 平台上,可以達到 200 MB/s 左右的循序讀取性能。這次在 Raspberry Pi 上跑出這樣的成績,也算是是可圈可點。
sysbench
測試結果
Round #1 輸出:
File operations: reads/s: 2.36 writes/s: 1.57 fsyncs/s: 8.37 Throughput: read, MiB/s: 0.04 written, MiB/s: 0.02 General statistics: total time: 25.4375s total number of events: 185 Latency (ms): min: 0.00 avg: 58.30 max: 1617.59 95th percentile: 733.00 sum: 10784.93 Threads fairness: events (avg/stddev): 185.0000/0.00 execution time (avg/stddev): 10.7849/0.00
File operations / Throughput:
Round | reads/s | writes/s | fsyncs/s | read, MiB/s | written, MiB/s |
---|---|---|---|---|---|
#1 | 2.36 | 1.57 | 8.37 | 0.04 | 0.02 |
#2 | 1.85 | 1.23 | 5.24 | 0.03 | 0.02 |
#3 | 1.76 | 1.17 | 5.46 | 0.03 | 0.02 |
ZFS#1 | 0.34 | 0.23 | 2.91 | 0.01 | 0.00 |
ZFS#2 | 0.41 | 0.27 | 2.63 | 0.01 | 0.00 |
ZFS#3 | 0.35 | 0.24 | 1.51 | 0.01 | 0.00 |
BTRFS#1 | 32.70 | 21.80 | 75.21 | 0.51 | 0.34 |
BTRFS#1 | 36.26 | 24.17 | 83.57 | 0.57 | 0.38 |
BTRFS#1 | 33.42 | 22.28 | 71.40 | 0.52 | 0.35 |
Latency (ms):
Round | min | avg | max | 95th percentile |
---|---|---|---|---|
#1 | 0.00 | 58.30 | 1617.59 | 733.00 |
#2 | 0.00 | 78.78 | 1627.73 | 20.74 |
#3 | 0.01 | 77.37 | 3247.55 | 18.28 |
ZFS#1 | 0.21 | 462.42 | 4794.34 | 4055.23 |
ZFS#2 | 0.17 | 339.24 | 4802.75 | 1618.78 |
ZFS#3 | 0.18 | 200.09 | 3234.36 | 10004.62 |
BTRFS#1 | 0.00 | 8.25 | 1611.23 | 10.65 |
BTRFS#1 | 0.00 | 7.36 | 1620.70 | 12.75 |
BTRFS#1 | 0.00 | 8.21 | 1626.83 | 12.75 |
在 zfs
之下,寫入能力低到令人絕望,連 zfs
附帶的工具都要量不出東西了 Orz
$ sudo zpool iostat -v capacity operations bandwidth pool alloc free read write read write -------------------------------------------------------------- ----- ----- ----- ----- ----- ----- Kyson 3.38G 112G 0 11 13 1.99M raidz1 3.38G 112G 0 11 13 1.99M usb-Kingston_DataTraveler_3.0_408D5CBFD9DDE460B9A4AE87-0:0 - - 0 5 6 1018K usb-Kingston_DataTraveler_3.0_B42E99B07A9FE460B954E385-0:0 - - 0 5 6 1018K -------------------------------------------------------------- ----- ----- ----- ----- ----- -----
而且 CPU Load 一度高達 11,狀況好的時候也一直在 8 左右徘徊… 於是決定跳過 fio
的部份(笑)
改用 BTRFS
之後,sysbench
測試過程中的 CPU Load 一直維持在 1.x 左右徘徊,速度更是一舉超過原廠的 FAT32
!!
fio
測試結果(4K Q1T1)
Command:
fio \ --filename=fio_test \ --size=1G \ --rw=randrw \ --bs=4k \ --name=fio_test \ --output-format=csv
Summary:
Round | Read / IOPS | Read / BW | Write / IOPS | Write / BW |
---|---|---|---|---|
#1 | 541 | 2164 KiB/s | 541 | 2166 KiB/s |
#2 | 681 | 2727 KiB/s | 682 | 2728 KiB/s |
#3 | 669 | 2678 KiB/s | 669 | 2679 KiB/s |
BTRFS#1 | 1270 | 5080 KiB/s | 1270 | 5082 KiB/s |
BTRFS#2 | 427 | 1709 KiB/s | 427 | 1710 KiB/s |
BTRFS#3 | 303 | 1212 KiB/s | 303 | 1212 KiB/s |
這邊可以觀察到一個有趣的現象,因為我的測試是使用一個 script 連續執行的,可見 BTRFS 在連續的大量寫入之下,效能會逐漸遞減
Complete Latency (usec):
fio
測試結果(4K Q32T16)
Command:
fio \ --filename=fio_test \ --size=1G \ --rw=randrw \ --bs=4k \ --iodepth=32 \ --numjobs=16 \ --thread \ --group_reporting \ --name=fio_test \ --output-format=csv
Summary:
Round | Read / IOPS | Read / BW | Write / IOPS | Write / BW |
---|---|---|---|---|
#1 | 2973 | 11894 KiB/s | 2978 | 11914 KiB/s |
#2 | 3147 | 12588 KiB/s | 3152 | 12610 KiB/s |
#3 | 2947 | 11789 KiB/s | 2952 | 11809 KiB/s |
在預設格式(FAT32
)下 Q32T16 的整體表現相較 Q1T1 提昇了 5 倍之多,證明 Linux 佇列的實做有確實發揮作用。
不過,BTRFS
幾經測試之後,還是沒能正常完賽,因此… 同樣沒有測試結果 Orz
Complete Latency (usec):
結論
首先,USB 裝置原理上就不適合大量隨機 I/O(R.I.P. ReadyBoost),而且似乎對軟體 RAID 相當不友善,確切原因不太確定… 不過在 BTRFS 的 4KQ32T16 測試的過程中確實發現 CPU Load 逐步升高到超過 20,這時的 I/O wait 已經逼近 70%,我想應該跟 Queue 的設計有關…吧
總之,乖乖靠一個裝置做 ext4
然後搭配 rsnapshot
做備份大概才是正解。