出版

Linux サーバーから最大限のパフォーマンスを引き出すには、ニーズに合わせて I/O スケジューラを変更する方法を学びます。

LinuxのI/Oスケジューラは、カーネルがディスクへの読み取りと書き込みをコミットする方法を制御します。2.6カーネル以降、管理者はスケジューラを変更できるようになり、プラットフォームをニーズに合わせて完全にカスタマイズできるようになりました。
選択できるスケジューラは3つあり、それぞれに利点があります。これらのスケジューラは以下のとおりです。
- CFQ (cfq):多くの Linux ディストリビューションのデフォルトのスケジューラ。プロセスによって送信された同期要求をプロセスごとの複数のキューに配置し、各キューにディスクにアクセスするためのタイムスライスを割り当てます。
- Noopスケジューラ(noop):先入先出(FIFO)キューコンセプトに基づく、Linuxカーネル向けの最もシンプルなI/Oスケジューラです。このスケジューラはSSDに最適です。
- 期限スケジューラ (期限):要求の開始サービス時間を保証しようとします。
Linuxマシンのパフォーマンスを最大限に引き出したい場合、この部分が重要なポイントとなるかもしれません。幸いなことに、I/Oを制御するスケジューラを変更するのは非常に簡単です。その方法をご紹介します。
参照: 2017年: Linuxが市場シェア5%に達する年 (TechRepublic)
使用しているスケジューラを確認する
まず最初に、システム上でどのスケジューラがI/Oを処理しているかを確認する必要があります。これはコマンドラインから実行でき、ディスクの名前を知っておく必要があります。ここでは、説明を簡潔にするために、対象のディスクがsdaであると仮定します。この情報を入手したら、ターミナルウィンドウを開き、以下のコマンドを実行してください。
cat /sys/block/sda/queue/scheduler
コマンドの結果には、現在実行中のスケジューラが表示されます (図 A )。
図A

スケジューラーの変更
スケジューラの変更には、オンザフライ方式と永続方式の2つの方法があります。オンザフライ方式でスケジューラを変更した場合、再起動後にデフォルトのスケジューラに戻る可能性があります。まずはオンザフライ方式で変更し、どのスケジューラがニーズに最適なパフォーマンスをもたらすかを確認することをお勧めします。
オンザフライでnoopスケジューラに切り替えたいとします。これを行うには、次のコマンドを実行します。
sudo echo noop > /sys/block/hda/queue/scheduler
noop をcfqまたはdeadlineに変更できます。
この変更はマシンを再起動することなく実行できます。変更後、I/Oスケジューラが切り替わり、(うまくいけば)パフォーマンスの向上が見られるはずです(これもニーズによって異なります)。
スケジューラを永続的に変更したい場合は、GRUB設定ファイル内で変更する必要があります。そのためには、sudo nano /etc/default/grub コマンドを実行し、以下の行を変更します。
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
に
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash elevator=noop"
繰り返しになりますが、noop は必要なスケジューラに変更できます。オンザフライで変更した後にこの変更を加えると、新しいスケジューラを有効にするために再起動する必要がなくなります。
以上です。
賢く選択しましょう
ご自身の状況に最適なスケジューラを見つけるには、調査が必要です。各スケジューラの詳細については、CFS、Noop、Deadline の Wiki ページをご覧ください。
こちらもご覧ください
- データセンター対応の Linux ディストリビューション 5 つ
- Linuxマシンに関する必要な情報をすべて1つのコマンドで取得する方法
- CentOS 7にマルウェア検出とウイルス対策をインストールする方法
- UbuntuにAnsibleサーバー管理システムをインストールする方法
- Linux 2017: 大いなる力には大いなる責任が伴う
- Linuxのセキュリティポリシー

ジャック・ウォーレン
ジャック・ウォーレンは、TechRepublic、The New Stack、Linux New Mediaなどで受賞歴のあるライターです。20年以上にわたり様々なトピックを執筆し、オープンソースの熱心な推進者でもあります。ジャック・ウォーレンに関する詳細は、ウェブサイトjackwallen.comをご覧ください。