memcg の QoS 機能は、Linux オペレーティングシステムでメモリリソースを管理し、メモリ使用量を最適化するための機能です。memcg QoS 機能を使用すると、特定のメモリ量をロックして、重要なサービスやアプリケーションの要件を満たすことができます。また、この機能を使用してメモリ使用量の上限を指定し、メモリを大量に消費するタスクによるシステムの不安定化を防ぐこともできます。Linux カーネルのコミュニティ版では、memcg QoS 機能は cgroup v2 インターフェイスでのみサポートされています。カーネルバージョン 4.19.91-18.al7 以降の Alibaba Cloud Linux 2 および Alibaba Cloud Linux 3 では、memcg QoS 機能は cgroup v1 インターフェイスでもサポートされています。
背景情報
Alibaba Cloud Linux カーネルでは、デフォルトで cgroup v1 インターフェイスの memcg QoS 機能が有効になっています。memcg QoS 機能の詳細については、「Documentation/admin-guide/cgroup-v2.rst」をご参照ください。このカーネルドキュメントは、Alibaba Cloud Linux の Debuginfo パッケージおよびソースコードパッケージから入手できます。詳細については、「Alibaba Cloud Linux 2 の使用」をご参照ください。
注意事項
cgroup v1 インターフェイスの memcg QoS 機能を使用する場合、タスクを memcg のリーフノードに配置することを推奨します。タスクパスの例:/sys/fs/cgroup/memory/<intermediate node>/<leaf node>/tasks。
インターフェイスの説明
次の表では、Alibaba Cloud Linux カーネルで cgroup v1 インターフェイスの memcg QoS 機能を実装するインターフェイスについて説明します。
インターフェイス | 説明 |
memory.min | 特定のメモリ量を絶対的にロックします。このインターフェイスによってロックされたメモリは、システムに回収可能な他のメモリがない場合でも回収されません。これにより、cgroup 内のプロセスは必要な最小メモリ量を確保でき、サービスのパフォーマンス低下を防ぎます。このインターフェイスは、パフォーマンス要件を満たすために最小限の常駐メモリ量の保証を必要とするサービスに適しています。 読み取りおよび書き込み操作は次のとおりです:
|
memory.low | 特定のメモリ量を相対的にロックします。このインターフェイスによってロックされたメモリは、システムに回収可能な他のメモリがない場合、部分的に回収されることがあります。これにより、システムはリソースが不足している場合に、より合理的な方法でメモリ割り当てを調整できます。このインターフェイスは、重要でないビジネスアプリケーションやバックグラウンドタスクなど、基本的な保護は必要としますが、絶対的な保護は必要としないサービスに適しています。 このインターフェイスでは、次の読み取りおよび書き込み操作を実行できます:
|
memory.high | メモリ使用量を制限します。このインターフェイスでは、次の読み取りおよび書き込み操作を実行できます:
|
API の例
Alibaba Cloud Linux 3 では、/sys/fs/cgroup/memory/ などの memcg マウントディレクトリで、メモリの割り当てや使用量上限の指定を行います。
次のコマンドは、root ユーザーとしてのみ実行してください。
コマンドの例:
次のコマンドを実行して、test_memcg ディレクトリを作成します:
mkdir /sys/fs/cgroup/memory/test_memcg特定のメモリ量を絶対的にロックします。
次のコマンドを実行して、200 MB のメモリを絶対的にロックします。
echo 209715200 > /sys/fs/cgroup/memory/test_memcg/memory.min次のコマンドを実行して、結果を表示します。
cd /sys/fs/cgroup/memory/test_memcg cat memory.min
特定のメモリ量を相対的にロックします。
次のコマンドを実行して、相対的にロックされるメモリを 200 MB に設定します。
echo 209715200 > /sys/fs/cgroup/memory/test_memcg/memory.low次のコマンドを実行して、結果を表示します。
cd /sys/fs/cgroup/memory/test_memcg cat memory.low
メモリ使用量の上限を指定します。
次のコマンドを実行して、メモリ使用量の上限を 1 GB に設定します。
echo 1073741824 > /sys/fs/cgroup/memory/test_memcg/memory.high次のコマンドを実行して、出力を表示します。
cd /sys/fs/cgroup/memory/test_memcg cat memory.high