- CPUリソースの割当スケジュールとは別に、デバイスI/Oもスケジューラがある(I/Oスケジューラ)
kernel2.6がサポートするI/O Scheduler
Name | 内容 |
---|---|
Complete Fair Queueing(CFQ) | ProcessごとにQueueを割り当て、各Queueに均一の帯域幅を、I/O要求に優先度を設定する。優先度に基づきI/Oが処理される |
deadline | 特定の時間を経過しても実行されていないI/O処理を優先的に処理する(長時間I/O処理が実施されないことを防止する)。データベース管理システムのI/O処理等に向く |
anticipatory | deadlineスケジューラ改良型。Processごとの統計情報に基づき、一般的に連続的なI/O要求を行う傾向があることを利用して一連のI/O処理をまとめて実行するようにする |
noop | 要求順でのI/O処理 |
- CFQはkernel2.6.18以降でのデフォルトI/Oスケジューラ
- CFQはすべてのI/O要求を一度Queueに蓄積し、優先度に基づいてI/O処理を実施する。Processごとに割り当てられる帯域は均等であるため、高負荷の状態でもI/O処理を継続させることに向いている
- anticipatoryは2.6.17までのkernelにおけるデフォルトI/Oスケジューラ。一定時間I/Oを蓄積してから連続的な処理をまとめて実行することによりデバイス読み込みなどの処理性能を高め、総合的なI/O性能の向上を図る
現在使用しているI/Oスケジューラを確認してみる
[root@tkcent1 ~]# cat /sys/block/sda/queue/scheduler noop anticipatory deadline [cfq]
- 使用するI/Oスケジューラを変更するには、echoでschedulerファイルにI/Oスケジューラ名を埋め込む
I/OスケジューラをCFQからanticipatiryに変更してみる
[root@tkcent1 ~]# echo anticipatory > /sys/block/sda/queue/scheduler [root@tkcent1 ~]# cat /sys/block/sda/queue/scheduler noop [anticipatory] deadline cfq
- I/Oスケジューラの種類を問わずに使用することができるチューニング・パラメータとして、I/O request queueの最大長を指定する"nr_requests"がある
現在の"nr_requests"値を確認する
[root@tkcent1 ~]# cat /sys/block/sda/queue/nr_requests 128
- ここでの値の単位はI/O要求数。値を増やすことによりより多くのI/O要求を受け付けられるようになるが、I/Oデバイスの種類によってはQueueが長過ぎる状態となり、逆にパフォーマンスが悪化する場合もある(一般的に非同期I/O処理を行うI/Oデバイスでは有用)
"nr_requests"値を256に変更してみる
[root@tkcent1 ~]# echo 256 > /sys/block/sda/queue/nr_requests [root@tkcent1 ~]# cat /sys/block/sda/queue/nr_requests 256