SSDのIOスケジューラに対するちょっとした誤解
IO傾向によるスケジューラのとの相性
SSDのIOスケジューラは常にnoopにすべきか?
- 実施ハードウェア
[comicsong@comicsong fio]$ sudo /usr/sbin/smartctl -i /dev/sda | grep "Device Model:" Device Model: M4-CT256M4SSD2 [comicsong@comicsong fio]$ grep "model name" /proc/cpuinfo | uniq -c 4 model name : Intel(R) Core(TM) i3-2100T CPU @ 2.50GHz [comicsong@comicsong fio]$ sudo dmidecode -s baseboard-product-name H77M-ITX [comicsong@comicsong fio]$ free -mw --si total used free shared buffers cache available Mem: 3580 189 2982 8 1 407 3171 Swap: 524 209 314
- OS/ファイルシステム/マウントオプション/fioバージョン
[comicsong@comicsong fio]$ cat /etc/redhat-release CentOS Linux release 7.2.1511 (Core) [comicsong@comicsong ~]$ mount | grep sda /dev/sda1 on /mnt/mint type ext4 (rw,noatime,discard,data=ordered) [comicsong@comicsong fio]$ pwd /mnt/mint/var/tmp/fio [comicsong@comicsong fio]$ rpm -q fio fio-2.2.8-2.el7.x86_64
- fio jobファイル
[global] directory=/mnt/mint/var/tmp/fio/tmp/ size=500m numjobs=8 iodepth=4 time_based runtime=10 overwrite=1 ioengine=libaio bs=4k group_reporting [test]
- テストコマンド
for SCHEDULER in cfq deadline noop do for TEST in read write randread randwrite rw do sudo fio iotest.ini -rw ${TEST} -ioscheduler ${SCHEDULER} -description ${SCHEDULER}_${TEST} | grep -A1 "Description " done sudo cat /sys/block/sda/queue/scheduler echo "---------------" done
- 結果
Description : [cfq_read] read : io=2456.1MB, bw=251261KB/s, iops=62815, runt= 10013msec Description : [cfq_write] write: io=2599.8MB, bw=265632KB/s, iops=66407, runt= 10022msec Description : [cfq_randread] read : io=1260.4MB, bw=128234KB/s, iops=32058, runt= 10064msec Description : [cfq_randwrite] write: io=1831.7MB, bw=186167KB/s, iops=46541, runt= 10075msec Description : [cfq_rw] read : io=983836KB, bw=98040KB/s, iops=24510, runt= 10035msec noop deadline [cfq] --------------- Description : [deadline_read] read : io=2303.1MB, bw=235548KB/s, iops=58886, runt= 10016msec Description : [deadline_write] write: io=2605.6MB, bw=266193KB/s, iops=66548, runt= 10023msec Description : [deadline_randread] read : io=1127.9MB, bw=115482KB/s, iops=28870, runt= 10001msec Description : [deadline_randwrite] write: io=1891.4MB, bw=192926KB/s, iops=48231, runt= 10039msec Description : [deadline_rw] read : io=837996KB, bw=83424KB/s, iops=20856, runt= 10045msec noop [deadline] cfq --------------- Description : [noop_read] read : io=2261.4MB, bw=231239KB/s, iops=57809, runt= 10014msec Description : [noop_write] write: io=2604.3MB, bw=266090KB/s, iops=66522, runt= 10022msec Description : [noop_randread] read : io=1124.7MB, bw=115147KB/s, iops=28786, runt= 10001msec Description : [noop_randwrite] write: io=1889.5MB, bw=192629KB/s, iops=48157, runt= 10042msec Description : [noop_rw] read : io=764948KB, bw=74433KB/s, iops=18608, runt= 10277msec [noop] deadline cfq ---------------
- まとめ
- ベンチマークの実行時間、試行回数が少ないなど確度は低いから値は参考程度に
- 「この環境の
M4-CT256M4SSD2
でこんなテスト条件の場合」ということを忘れない
- 「この環境の
- noopはwrite系は早いがreadでは劣り、またwriteもシーケンシャルならほぼ差はない
- 特にシーケンシャルのioミックスは全スケジューラ中最もIOPS値が低かった
- ベンチマークの実行時間、試行回数が少ないなど確度は低いから値は参考程度に
「SSD=noop」のような紐付けはしない。IO傾向を把握し最適なスケジューラを選択すべき