はじめに
この実験(Lab)では、tuned を使用して RHEL システムのパフォーマンスを最適化し、nice と renice を使用してプロセスの優先度を管理する方法を学びます。まず、tuned のインストールを確認し、利用可能なプロファイルを一覧表示することから始めます。その後、tuned プロファイルを変更することがシステムパラメータにどのように影響するかを観察します。
この実験では、CPU 負荷の高いプロセスを開始して監視し、次に nice と renice を使用してそれらの優先度を調整し、リソース割り当てへの影響を理解します。最後に、実行中のプロセスをクリーンアップする方法を学び、RHEL でのパフォーマンスチューニングに関する完全な理解を深めます。
tuned のステータス確認と利用可能なプロファイルのリスト表示
このステップでは、tuned デーモンのステータスを確認し、RHEL システムで利用可能なチューニングプロファイルを一覧表示する方法を学びます。tuned は、特定のワークロードのパフォーマンスを最適化するためにシステム設定を調整する、動的な適応型システムチューニングデーモンです。チューニングプロファイルを使用して、一連のシステムワイド設定を適用します。
tunedデーモンが実行されていることを確認します。 このコンテナ環境では、tunedデーモンが実行されているかどうかを、そのプロセスを探すことで確認します。また、コマンドに応答するかどうかを確認することで、その機能を検証することもできます。まず、
tunedプロセスが実行されているか確認します。pgrep tunedtunedが実行されている場合、このコマンドはプロセス ID (PID) を返します。PID が返されない場合は、デーモンを手動で起動できます。sudo /usr/sbin/tuned &次に、実行されていることを確認します。
pgrep tuned次のような出力が表示されるはずです。
739(注:出力の PID 値は異なります。)
さらに、
tunedがステータスのクエリに応答するかどうかを確認することで、tunedが機能していることを確認できます。sudo tuned-adm activeこれにより、現在アクティブなプロファイルがエラーなしで返されるはずです。
利用可能なチューニングプロファイルを一覧表示し、アクティブなプロファイルを特定します。
tuned-adm listコマンドは、利用可能なすべてのチューニングプロファイルを表示し、現在アクティブなものを強調表示します。sudo tuned-adm listパスワードの入力を求められます。出力の
Current active profileに注目してください。Available profiles: - accelerator-performance - Throughput performance based tuning with disabled higher latency STOP states - aws - Optimize for aws ec2 instances - balanced - General non-specialized tuned profile - balanced-battery - Balanced profile biased towards power savings changes for battery - desktop - Optimize for the desktop use-case - hpc-compute - Optimize for HPC compute workloads - intel-sst - Configure for Intel Speed Select Base Frequency - latency-performance - Optimize for deterministic performance at the cost of increased power consumption - network-latency - Optimize for deterministic performance at the cost of increased power consumption, focused on low latency network performance - network-throughput - Optimize for streaming network throughput, generally only necessary on older CPUs or 40G+ networks - optimize-serial-console - Optimize for serial console use. - powersave - Optimize for low power consumption - throughput-performance - Broadly applicable tuning that provides excellent performance across a variety of common server workloads - virtual-guest - Optimize for running inside a virtual guest - virtual-host - Optimize for running KVM guests Current active profile: virtual-guestvirtual-guestプロファイルの設定を確認します。virtual-guestプロファイルは、仮想マシンのデフォルトであることがよくあります。その設定ファイルを調べて、どのような設定が適用されているかを理解できます。cat /usr/lib/tuned/virtual-guest/tuned.confこのコマンドは、
virtual-guestプロファイルのtuned設定を表示します。これには、他のプロファイルから継承するパラメータが含まれます。# ## tuned configuration # [main] summary=Optimize for running inside a virtual guest include=throughput-performance [vm] ## If a workload mostly uses anonymous memory and it hits this limit, the entire ## working set is buffered for I/O, and any more write buffering would require ## swapping, so it's time to throttle writes until I/O can catch up. Workloads ## that mostly use file mappings may be able to use even higher values. # ## The generator of dirty data starts writeback at this percentage (system default ## is 20%) dirty_ratio = 30 [sysctl] ## Filesystem I/O is usually much more efficient than swapping, so try to keep ## swapping low. It's usually safe to go even lower than this on systems with ## server-grade storage. vm.swappiness = 30vm.dirty_background_ratioパラメータが適用されていることを確認します。virtual-guestプロファイルにはthroughput-performanceが含まれています。throughput-performanceが通常設定するパラメータ、たとえばvm.dirty_background_ratioを確認してみましょう。このパラメータは、システムがバックグラウンドでダーティページをディスクに書き込み始めるタイミングを制御します。sysctl vm.dirty_background_ratio出力には、このカーネルパラメータの現在の値が表示されます。
vm.dirty_background_ratio = 10
tuned プロファイルの変更とシステムパラメータの変化の観察
このステップでは、アクティブな tuned プロファイルを変更し、システムパラメータへの即時的な影響を観察する方法を学びます。tuned プロファイルを変更することで、スループット集約型のタスクや省電力など、さまざまなワークロードに合わせて調整された一連のパフォーマンス最適化をすばやく適用できます。
現在のアクティブなチューニングプロファイルを
throughput-performanceに変更します。throughput-performanceプロファイルは、ある程度のレイテンシを犠牲にしてでも、高いスループットを必要とするシステム向けに設計されています。通常、ディスク I/O とネットワークパフォーマンスを最適化します。tuned-adm profileコマンドを使用して、プロファイルを切り替えます。sudo tuned-adm profile throughput-performanceパスワードの入力を求められます。
$ sudo tuned-adm profile throughput-performance [sudo] password for user:新しいアクティブなプロファイルを確認します。 プロファイルを変更した後、新しいプロファイルが実際にアクティブであることを確認することをお勧めします。これは、
tuned-adm activeを使用して行うことができます。sudo tuned-adm active出力には、
throughput-performanceがアクティブなプロファイルとして表示されるはずです。Current active profile: throughput-performancevm.dirty_ratioおよびvm.swappinessパラメータが変更されたことを確認します。throughput-performanceプロファイルは、vm.dirty_ratioやvm.swappinessなど、メモリ管理に関連するカーネルパラメータを変更します。virtual-guestプロファイルはthroughput-performanceから継承しますが、throughput-performanceプロファイルに直接切り替えると、virtual-guest 固有の変更なしに基本値が適用されます。vm.dirty_ratio: このパラメータは、システムがダーティページ (変更されたがまだディスクに書き込まれていないページ) で埋めることができるシステムメモリの最大割合を定義します。値が大きいほど、より多くのデータをメモリにバッファリングできるため、スループットが向上する可能性があります。vm.swappiness: このパラメータは、カーネルが匿名メモリ (アプリケーションデータ) を RAM からスワップ領域にどの程度積極的にスワップアウトするかを制御します。値が小さいほど、カーネルはより多くのアプリケーションデータを RAM に保持しようとします。これは一般的にパフォーマンスにとって優れています。
sysctlを使用して、現在の値を確認してみましょう。sysctl vm.dirty_ratio sysctl vm.swappinessvirtual-guestプロファイルの設定 (dirty_ratio = 30, vm.swappiness = 30) から、基本のthroughput-performanceプロファイルの値に変更されたことを確認する必要があります。vm.dirty_ratio = 40 vm.swappiness = 10(注:これらの値は、virtual-guest 固有の変更なしに、基本の throughput-performance 最適化を反映しています。)
RHEL で CPU 負荷の高いプロセスを開始し、監視する
このステップでは、CPU 負荷の高いプロセスを開始し、そのリソース使用量を監視する方法を学びます。これは、プロセスがシステムリソースをどのように消費しているかを理解し、ボトルネックを特定するために不可欠です。sha1sum /dev/zero コマンドを使用します。このコマンドは、無限のゼロのストリームの SHA1 チェックサムを継続的に計算し、効果的に CPU サイクルを消費します。
重要: この演習では、デバイスファイルに対して無限のチェックサムを実行し、意図的に大量の CPU リソースを消費するコマンドを使用します。この演習を終了するか、次のラボに進む前に、すべての演習プロセスを終了する必要があります。
システム上の CPU コアの数を決定します。 CPU コアの数を理解することで、システムを完全に活用するために実行する CPU 負荷の高いプロセスの数を決定できます。この情報は、
/proc/cpuinfoで確認できます。grep -c '^processor' /proc/cpuinfoこのコマンドは、
processorで始まる行数をカウントします。これは、論理 CPU コア (または仮想プロセッサ) の数に対応します。2(注:システムの構成によっては、出力に異なる数のコアが表示される場合があります。)
CPU コアごとに
sha1sum /dev/zero &コマンドの 2 つのインスタンスを開始します。 高負荷のシステムをシミュレートするために、sha1sum /dev/zero &の複数のインスタンスを開始します。コマンドの末尾にある&は、プロセスをバックグラウンドで実行し、ターミナルを引き続き使用できるようにします。たとえば、2 つの CPU コアがある場合は、4 つのインスタンス (2 インスタンス/コア * 2 コア) を開始します。for i in $(seq 1 $(grep -c '^processor' /proc/cpuinfo | awk '{print $1 * 2}')); do sha1sum /dev/zero & doneこのコマンドは、CPU コア数に基づいて開始するプロセスの数を動的に計算します。
[1] 1234 [2] 1235 [3] 1236 [4] 1237(注:出力の PID 値は、例とは異なります。)
バックグラウンドジョブが実行されていることを確認します。
jobsコマンドは、シェルセッションから現在バックグラウンドで実行されているすべてのプロセスを一覧表示します。jobs開始したばかりの
sha1sumプロセスのリストが表示されるはずです。[1] Running sha1sum /dev/zero & [2] Running sha1sum /dev/zero & [3] Running sha1sum /dev/zero & [4]- Running sha1sum /dev/zero &psおよびpgrepコマンドを使用して、各sha1sumプロセスの CPU 使用率 (%) を表示します。psコマンドは、現在のプロセスのスナップショットを報告します。これとpgrepを組み合わせて、sha1sumプロセスをフィルタリングします。ps -o pid,pcpu,nice,comm: これは、出力形式を指定します。プロセス ID (pid)、CPU 使用率の割合 (pcpu)、nice値 (nice)、およびコマンド名 (comm)。$(pgrep sha1sum): このコマンド置換は、sha1sumという名前のすべてのプロセスの PID を見つけ、それらをpsへの引数として渡します。
ps -o pid,pcpu,nice,comm $(pgrep sha1sum)各
sha1sumプロセスが CPU のかなりの割合を消費していることがわかります。PID %CPU NI COMMAND 5248 48.8 0 sha1sum 5249 48.7 0 sha1sum 5250 48.8 0 sha1sum 5251 48.8 0 sha1sum(注:
%CPUの値は変動する可能性がありますが、高いはずです。これは、CPU 使用率が高いことを示しています。NI列は nice 値を示しています。)実行中のすべての
sha1sumプロセスを終了し、何も残っていないことを確認します。 続行する前に、これらの CPU 負荷の高いプロセスをクリーンアップすることが重要です。pkillコマンドは、名前に基づいてプロセスを終了します。pkill sha1sum次に、バックグラウンドで
sha1sumジョブが実行されていないことを確認します。jobs出力が空であるか、すべてのジョブが終了したことを示しているはずです。
[1] Terminated sha1sum /dev/zero [2] Terminated sha1sum /dev/zero [3] Terminated sha1sum /dev/zero [4]- Terminated sha1sum /dev/zero(注:プロセスが停止しているため、「Terminated」メッセージが表示される場合があります。)
RHEL で nice および renice を使用してプロセスの優先度を調整する
このステップでは、nice および renice コマンドを使用して、プロセスのスケジューリング優先度に影響を与える方法を学びます。プロセスの nice 値 (別名 niceness) は、Linux スケジューラに対するその優先度を示します。nice 値が低い (より負の値) ほど優先度が高く、nice 値が高い (より正の値) ほど優先度が低くなります。nice 値の範囲は通常、-20 (最高優先度) から 19 (最低優先度) で、0 がデフォルトです。
sha1sum /dev/zero &の複数のインスタンスを開始し、次にniceレベルが 10 の追加のインスタンスを 1 つ開始します。 ビジー状態のシステムをシミュレートするために、いくつかのsha1sumプロセスを開始します。次に、意図的に低い優先度 (高いnice値) で 1 つを開始し、その影響を観察します。まず、3 つの通常のインスタンスを開始します (必要に応じて CPU コア数に基づいて調整しますが、競合を作成するために仮想プロセッサと同じ数以上にする必要があります)。
for i in {1..3}; do sha1sum /dev/zero & done次に、
niceレベルが 10 の 4 番目のインスタンスを開始します。このプロセスは、他のプロセスよりも低い優先度を持ちます。nice -n 10 sha1sum /dev/zero &次のような出力が表示され、バックグラウンドプロセスの PID が示されます。
[1] 5443 [2] 5444 [3] 5445 [4] 5446(注:出力の PID 値は異なります。)
psおよびpgrepコマンドを使用して、各プロセスの PID、CPU 使用率 (%)、nice値、および実行可能ファイル名を表示します。%CPUおよびNI列を観察します。nice値が 10 のインスタンスは、他のインスタンスよりも低い CPU 使用率 (%) を表示する必要があります。これは、スケジューラがそのインスタンスに CPU 時間を少なく与えるためです。ps -o pid,pcpu,nice,comm $(pgrep sha1sum)NI値が10のプロセスを探します。その%CPUは、他のプロセスよりも著しく低いはずです。PID %CPU NI COMMAND 5443 56.8 0 sha1sum 5444 58.0 0 sha1sum 5445 56.5 0 sha1sum 5446 6.7 10 sha1sum(注:正確な
%CPU値は、システムの負荷とコア数によって異なりますが、nice 10のプロセスはより低い割合を持つはずです。)sudo reniceコマンドを使用して、通常のプロセスの 1 つのniceレベルを 5 に変更します。reniceコマンドを使用すると、すでに実行中のプロセスのnice値を変更できます。これを実証するために、通常のプロセスの 1 つ (nice 値 0) を nice 値 5 に変更します。まず、前の
psコマンドの出力から、nice値が 0 のsha1sumプロセスの 1 つの PID を特定します。上記の例の最初のもの (PID 5443) を使用しましょう。sudo renice -n 5 <PID_of_regular_process><PID_of_regular_process>を、特定した実際の PID に置き換えます。例:sudo renice -n 5 5443優先度の変更を確認する出力が表示されるはずです。
5443 (process ID) old priority 0, new priority 5psおよびpgrepコマンドを繰り返し実行して、CPU 使用率 (%) とniceレベルを表示します。nice値を変更したプロセスの CPU 使用率の変化を観察します。nice 値 5 のプロセスは、nice 値 0 のプロセスと比較して CPU 使用率がわずかに低くなっているはずですが、nice 値 10 のプロセスよりも高くなっています。ps -o pid,pcpu,nice,comm $(pgrep sha1sum)変更されたプロセスの
NI値が現在5であり、その CPU 使用率が新しい優先度レベルを反映していることがわかります。PID %CPU NI COMMAND 5443 55.4 5 sha1sum 5444 67.2 0 sha1sum 5445 67.1 0 sha1sum 5446 7.5 10 sha1sum(注:正確な
%CPU値は異なりますが、nice 値が低い (優先度が高い) プロセスがより多くの CPU 時間を取得することを確認する必要があります。)
実行中のプロセスをクリーンアップ
この最終ステップでは、実験中に開始されたすべてのバックグラウンドプロセスが適切に終了していることを確認します。これは、意図しないリソース消費を防ぎ、今後の使用のために実験環境をリセットするための重要なクリーンアップステップです。
pkillコマンドを使用して、sha1sumという名前パターンを持つすべての実行中のプロセスを終了します。pkillコマンドは、名前に基づいてシグナル (デフォルトではSIGTERM) をプロセスに送信するための効率的な方法です。これにより、前のステップで開始したすべてのsha1sumプロセスが停止します。pkill sha1sumプロセスが終了したことを示すメッセージが表示される場合があります。
[3]- Terminated sha1sum /dev/zero [2]- Terminated sha1sum /dev/zero [4]+ Terminated nice -n 10 sha1sum /dev/zero [1]+ Terminated sha1sum /dev/zerosha1sumプロセスがまだ実行されていないことを確認します。pgrepを使用して、sha1sumプロセスがまだアクティブかどうかを確認できます。pgrepが出力を返さない場合、そのようなプロセスは実行されていません。pgrep sha1sumこのコマンドは出力を返さないはずです。これは、すべての
sha1sumプロセスが正常に終了したことを示しています。$ pgrep sha1sum $
まとめ
この実験では、RHEL でシステムパフォーマンスの最適化のために tuned を管理し、利用する方法を学びました。まず、tuned サービスのインストールとステータスを確認し、利用可能なチューニングプロファイルを一覧表示することから始めました。これらのプロファイルを使用して、tuned が特定のワークロードに合わせてシステム設定を動的に調整することを理解しました。次に、labex ユーザーとして SSH 経由でシミュレートされた servera 環境にログインし、dnf list tuned を使用して tuned パッケージのインストールを確認しました。
この実験ではさらに、tuned プロファイルを変更してシステムパラメータへの影響を観察し、さまざまなプロファイルがシステムの動作をどのように変更できるかを実証しました。また、CPU を集中的に使用するプロセスを開始および監視する実践的な経験も得ました。これは、パフォーマンスのボトルネックを特定するために不可欠です。最後に、nice および renice コマンドを使用してプロセスの優先度を調整し、リソース割り当てを効果的に管理する方法を学び、実行中のプロセスをクリーンアップしてシステムを初期状態に戻すことで締めくくりました。



