システムのチューニングはカーネルの最適化やアプリケーションの活用だけでなく、無駄のない高速なシステムを構築するところから始まります。たとえばパーティションやファイルシステムの設定によっても、サーバの速度は速くも遅くもなります。また動作させるサービスや定期的に実行されるスケジュールタスクなどについても、性能への影響があります。
よく注意して計画し、インストールを行うことで、特定の目的に正確に適合したシステムを構築することができるようになります。そこからシステムのチューニングを行う場合であっても、かかる時間を削減することに繋がります。本章で示している全ての変更点は、インストール時の 3.11項 「インストール設定」 をお読みください。
の手順内で実施することができます。詳しくはサーバの用途とハードウエアの配置にもよりますが、パーティション方式がマシンの性能そのものに影響を与えることがあります。用途やハードウエアの配置によるパーティション方式の選択は、本章の範疇ではありませんので詳しく説明はしていません。ただし、一般的に下記のようなルールでパーティション方式を選択すると、よりよい性能を得られます。なお、外付けのストレージシステムを使用する場合は、下記のルールには当てはまりません。
ディスク領域を最大限に使用した場合であっても、少しだけ空き容量が残るように設計してください。ディスク領域が完全に埋まってしまうと、明らかな性能劣化が発生します。
複数のディスクに対して、読み込みや書き込みの処理が分散されるように設計してください。たとえば下記のようなことが考えられます:
オペレーティングシステムとデータ、ログファイルのディスクをそれぞれ別々のものにする
メールサーバのスプールディレクトリを別のディスクに分ける
複数のディスクに対して、ユーザのホームディレクトリのディスクを分ける
インストールするパッケージの選択は、マシンの性能に直接影響するものではありませんが、注意深くパッケージを選択することで、いくつかの利点が発生します。また、サーバを構築するにあたっては、必要な最小限のパッケージのみをインストールするようにしてください。パッケージの数を減らしておけばサーバの管理の手間を省くことができるだけでなく、潜在的なセキュリティ問題も減らすことができます。これに加えて、不要なパッケージをインストールしなければ、不要なサービスが動作してしまうようなこともありません。
openSUSE Leap では、インストール概要の画面でインストールするパッケージを選択することができます。既定では作業範囲からあらかじめ設定されたパターンを選択し、インストールを行うことができますが、 YaST のソフトウエアマネージャを起動して、より細かくインストールするパッケージを選択することもできます。
よくある不要なパターンには、たとえば下記のようなものがあります:
サーバを動作させるだけであれば、完全なデスクトップ環境は不要です。どうしてもグラフィカル環境が必要な場合は、 IceWM などのより経済的なソリューションをお使いになることをお勧めします。
サーバを単独で管理しなければならない場合で、アプリケーションをコマンドラインから制御できる場合は、このパターンをインストールする必要はありません。ただし、リモートのマシンから GUI アプリケーションを起動して管理するような場合は、このパターンが必要となることに注意してください。また、お使いのアプリケーションが GUI のみで管理できるような場合や、 YaST の GUI 版が必要である場合は、このパターンをインストールしてください。
このパターンは、そのマシンから印刷を行いたい場合にのみ選択すべきです。
X Window System を動作させてしまうと、サーバではあまり必要とされないにもかかわらず、多くのリソースを消費することになってしまいます。お使いのシステムをサーバとして使用する場合、 multi-user.target
( ) を systemd
の既定のターゲットに指定しておくことをお勧めします。この場合でも、リモートからグラフィカルなアプリケーションを起動することができます。
既定の手順でインストールを行うと、いくつかのサービスを開始するように設定してしまいます (具体的にどのようなサービスであるのかは、インストール時のパターン選択やパッケージ選択によって異なります) 。それぞれのサービスはリソースを消費してしまうものですので、不要なサービスについては止めておくことをお勧めします。 YaST のサービス管理モジュールを起動するには、
› › を選択します。YaST のグラフィカル版をお使いの場合は、列ヘッダの部分を押すことで、並べ替えを行うことができます。これを利用して、サービスの動作状況を確認してください。 次に再起動を行うまでの間、サービスを無効化しておきたい場合は、サービスを選んで
を押します。恒久的に無効化したい場合は、 内の を選択します。下記の一覧には、 openSUSE Leap のインストール直後に既定で開始されるサービスの一覧を示しています。各サービスの説明をお読みのうえ、不要であれば無効化してください:
Advanced Linux Sound System (Linux でのサウンドシステム) を読み込みます。
監査システム (詳しくは パートVI「Linux 監査フレームワーク」 をお読みください) 向けのデーモンです。監査を必要としない場合は、無効化してください。
Bluetooth ドングルのコールドプラグを処理します。
プリンタデーモンです。
*.class
や *.jar
というファイル名の Java プログラムを実行できるようにします。
NFS をマウントする際に必要なサービスです。
Windows* サーバ内の SMB/CIFS ファイルシステムをマウントする際に必要となります。
起動時にスプラッシュスクリーン (ロゴの表示) を行います。
ハードディスクはコンピュータシステム内で最も遅いコンポーネントであるため、性能面ではよくボトルネックになります。お使いの用途に適したファイルシステムを使用することで、性能を改善できる可能性があります。また、特殊なマウントオプションを設定したり、プロセスの I/O 優先順位を設定したりすることで、システムの速度をさらに向上させることができる場合があります。
openSUSE Leap には btrfs, ext4, ext3, ext2, xfs など、様々なファイルシステムが用意されています。それぞれのファイルシステムには利点と欠点がそれぞれ存在しています。
NFS (バージョン 3) のチューニングについては、 https://nfs.sourceforge.net/nfs-howto/ にある NFS Howto (英語) に詳細が書かれています。なお、 NFS で共有されているファイルシステムをマウントする場合、最初に試すべきことは、 wsize
と rsize
の各マウントオプションで、読み込みと書き込みのブロックサイズを 32768
に増やしてみることです。
ファイルシステム内のファイルやディレクトリには、 3 種類のタイムスタンプが設定されています。対象のファイルやディレクトリを最後に読み込んだ日時を表す アクセス日時, 最後に修正した日時を表す 更新日時, そしてメタデータを最後に修正した日時を表す 変更日時 です。このうちアクセス日時については、対象のファイルやディレクトリを読み込んだだけで書き込みを行う必要が生まれてしまうことから、著しい性能オーバーヘッドを与える結果になってしまいます。そのため既定では、その時点までのアクセス日時が 1 日以上古い場合か、もしくは更新日時や変更日時よりも古い場合にのみ、ファイルシステムのアクセス日時の更新を行うように設定されています。この機能は relative access time (相対アクセス日時) と呼ばれ、マウント時のオプションでは relatime
という名称が設定されています。アクセス日時の更新を完全に無効化したい場合は、 noatime
というオプションを設定しますが、こちらはアプリケーション側に悪影響が出ないかどうかをご確認のうえ、設定してください。特にファイルサーバや Web サーバ、ネットワークストレージサーバなどに使用する場合は、影響が発生することがあります。また、既定で設定される相対アクセス日時の機能についても、アプリケーション側に影響があることがありますので、そのような場合は、 strictatime
オプションを指定してください。
ファイルシステムによっては (ext4 などがこれにあたります) 、 lazy time stamp updates という機能に対応しているものがあります。この機能はマウントオプションで lazytime
という名前が設定されていて、タイムスタンプの更新をメモリ内にのみ保持し、ディスクには書き込まないようにします。ディスクへの書き込みは、 fsync
や sync
のシステムコールが発生した場合や、ファイルサイズの更新などでファイルの情報を書き込まなければならない場合、もしくはタイムスタンプが 24 時間以上古い場合や、ファイル情報をメモリから掃き出す必要がある場合にのみ、行われます。
ファイルシステムに対するマウントオプションを変更するには、 /etc/fstab
ファイルを直接編集するか、もしくは YaST のパーティション設定モジュール内のマウント設定で、 の欄に指定を行ってください。
ionice
によるディスクアクセスの優先順位設定 #Edit sourceionice
コマンドは 1 つのプロセスに対してディスクアクセスの優先順位を設定するためのコマンドです。この仕組みにより、バックアップジョブなどのように、ディスクアクセスを頻繁に行うものの、時間的な制約がないようなプログラムに対して、他のプログラムへの影響を小さくすることができます。 ionice
ではその逆に、ディスクへのアクセスを即時に行わせるよう、プログラムの優先順位を上げることもできます。ただし一般的な書き込み処理の場合、ページキャッシュにのみ書き込まれ、ディスクへの書き込みは別途のカーネルプロセスが行うことに注意してください。この場合、 I/O 優先順位の設定が適用されなくなってしまいます。また、 I/O クラスと優先順位の設定は、 blk-mq I/O パス (詳しくは 13.2項 「blk-mq I/O パスで利用可能な I/O エレベータ」 をお読みください) 向けの BFQ I/O スケジューラの場合にのみ効果があることにも注意してください。スケジューリングクラスとしては、下記の 3 種類を設定することができます:
このクラスが設定されたプロセスは、その他のプロセスがディスク I/O を行っていない場合にのみ、ディスクへのアクセスが許可されるようになります。
こちらが既定のスケジューリングクラスで、特段の I/O 優先順位を指定しない場合の優先順位になります。このクラスが設定されたプロセスに対しては、さらに細かく 0
から 7
までのレベル (0
が最も高い優先順位になります) を設定することができます。同じベストエフォートの優先順位が設定されたプロセス同士では、ラウンドロビン形式で I/O が割り当てられることになります。なお、カーネルのバージョンによっては、ベストエフォートのクラスの扱いが異なる場合があります。詳しくは ionice(1)
のマニュアルページをお読みください。
このクラス内のプロセスの場合、ディスクへのアクセスは常に取得することができます。この場合も、 0
から 7
までのレベル (0
が最も高い優先順位) を設定することができます。なお、他のプロセスの動作を妨害する可能性があり得ることから、注意してお使いください。
詳細や正確なコマンド書式については、 ionice(1)
のマニュアルページをお読みください。各アプリケーションに対して帯域を精密に制御する必要がある場合は、 第10章 「カーネルコントロールグループ」 で説明しているカーネルコントロールグループを使用してください。