5400rpm

人生シングルスレッド

小ネタ Raspi3+Ubuntu16.04+SDCZ48-128G Fio

Raspi3でベンチマークする

ベンチマーク上の留意点

  • fsはubuntuのデフォルトに合わせext4
  • マウントオプションは discard,noatime 利用
  • USBについて、メモリ側は3.0対応だが本体側のラズパイは2.0であることに注意

ハードウェア情報

  • メモリ 1GB
root@ubuntu:~# free --si -mw
              total        used        free      shared     buffers       cache   available
Mem:            942          37         596           5          19         289         870
Swap:             0           0           0
  • CPU ARM 4スレッド
root@ubuntu:~# cat /proc/cpuinfo  | grep "model name"  | uniq -c
      4 model name      : ARMv7 Processor rev 4 (v7l)
  • USB
ubuntu@ubuntu:~$ lsusb  | grep San
Bus 001 Device 005: ID 0781:5581 SanDisk Corp. Ultra
Bus 001 Device 004: ID 0781:5581 SanDisk Corp. Ultra
ubuntu@ubuntu:~$ lsusb -t
/:  Bus 01.Port 1: Dev 1, Class=root_hub, Driver=dwc_otg/1p, 480M
    |__ Port 1: Dev 2, If 0, Class=Hub, Driver=hub/5p, 480M
        |__ Port 1: Dev 3, If 0, Class=Vendor Specific Class, Driver=smsc95xx, 480M
        |__ Port 3: Dev 4, If 0, Class=Mass Storage, Driver=usb-storage, 480M
        |__ Port 4: Dev 5, If 0, Class=Mass Storage, Driver=usb-storage, 480M

ベンチマーク環境

  • マウント状態
root@ubuntu:~# mkdir /mnt/USB01
root@ubuntu:~# mount -t ext4 -o noatime,discard /dev/sda1 /mnt/USB01/
root@ubuntu:~# df /mnt/USB01/
Filesystem     1K-blocks  Used Available Use% Mounted on
/dev/sda1      119269620 60984 113127000   1% /mnt/USB01
root@ubuntu:~# mount | grep USB
/dev/sda1 on /mnt/USB01 type ext4 (rw,noatime,discard,data=ordered)

ベンチマーク実施

root@ubuntu:~# mkdir /mnt/USB01/fio
root@ubuntu:~# cd /mnt/USB01/fio
  • 設定は後々比較するものでもない小ネタなので手抜き。重いものはメモリで死ぬだろうと予測して軽めのベンチ
root@ubuntu:/mnt/USB01/fio# fio --size=30m --numjobs=4 --iodepth=8 --time_based --runtime=60 --overwrite=1 --ioengine=libaio --bs=4k --group_reporting --direct=1 --name=test --rw=read | grep iops=
  read : io=882528KB, bw=14707KB/s, iops=3676, runt= 60009msec
root@ubuntu:/mnt/USB01/fio# fio --size=30m --numjobs=4 --iodepth=8 --time_based --runtime=60 --overwrite=1 --ioengine=libaio --bs=4k --group_reporting --direct=1 --name=test --rw=write | grep iops=
  write: io=627904KB, bw=10463KB/s, iops=2615, runt= 60010msec
root@ubuntu:/mnt/USB01/fio# fio --size=30m --numjobs=4 --iodepth=8 --time_based --runtime=60 --overwrite=1 --ioengine=libaio --bs=4k --group_reporting --direct=1 --name=test --rw=randread | grep iops=
  read : io=158516KB, bw=2639.8KB/s, iops=659, runt= 60050msec
root@ubuntu:/mnt/USB01/fio# fio --size=30m --numjobs=4 --iodepth=8 --time_based --runtime=60 --overwrite=1 --ioengine=libaio --bs=4k --group_reporting --direct=1 --name=test --rw=randwrite | grep iops=
  write: io=109504KB, bw=1823.2KB/s, iops=455, runt= 60064msec
  • 設定の整形

    • size 30m ... 特に数値に根拠なし
    • numjobs 4 ... スレッド数に合わせる
    • iodepth 8 ... スレッド数との積が32になるよう設定
    • blocksize 4k
    • time_based , runtime=60 , overwrite=1
    • ioengine libaio
  • 結果の整形

test total io bw iops runtime
Seq_Read io=882528KB bw=14707KB/s iops=3676 runt= 60009msec
Seq_Write io=627904KB bw=10463KB/s iops=2615 runt= 60010msec
Rand_read io=158516KB bw=2639.8KB/s iops=659 runt= 60050msec
Rand_write io=109504KB bw=1823.2KB/s iops=455 runt= 60064msec

まとめ

  • 同じUSBメモリで他の環境で試していないため断言できないが遅い
    • Read100MB/s以上を謳っているがシーケンシャルでも14MB/s
    • USB2.0でもよく言われている実効速度目安が30MB/s程度のためそれと比較しても遅い
  • RW共にランダムで大きく値が落ちた
  • ラズパイは速度期待するものではないので周辺機器は消費電力を基準に選んだ方がよさそう

追記もあるよ

いつもの筐体でも試した

USB

  • 3.0で認識されていることを確認
[root@comicsong fio]# lsusb | grep San
Bus 002 Device 002: ID 0781:5581 SanDisk Corp. Ultra
[root@comicsong fio]# lsusb -s 2:2
Bus 002 Device 002: ID 0781:5581 SanDisk Corp. Ultra
[root@comicsong fio]# lsusb -t | grep -A1 "Bus 02"
/:  Bus 02.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/4p, 5000M
    |__ Port 1: Dev 2, If 0, Class=Mass Storage, Driver=usb-storage, 5000M

結果

やたらと遅い。あまりにも遅いので複数回やったらムラが酷い

  • 1回目
  read : io=304356KB, bw=5070.1KB/s, iops=1267, runt= 60020msec
  write: io=731308KB, bw=10287KB/s, iops=2571, runt= 71088msec
  read : io=181856KB, bw=3028.8KB/s, iops=757, runt= 60043msec
  write: io=72568KB, bw=858634B/s, iops=209, runt= 86544msec
  • 2回目
  read : io=348264KB, bw=5802.4KB/s, iops=1450, runt= 60021msec
  write: io=814824KB, bw=11048KB/s, iops=2762, runt= 73752msec
  read : io=182780KB, bw=3044.4KB/s, iops=761, runt= 60040msec
  write: io=42260KB, bw=573176B/s, iops=139, runt= 75499msec
  • 3回目
  read : io=427492KB, bw=7122.1KB/s, iops=1780, runt= 60016msec
  write: io=850004KB, bw=14165KB/s, iops=3541, runt= 60008msec
  read : io=81048KB, bw=1292.2KB/s, iops=323, runt= 62724msec
  write: io=12900KB, bw=185029B/s, iops=45, runt= 71392msec

明日にでもこの筐体で parted からやり直して比較する