すべてのプロダクト
Search
ドキュメントセンター

Alibaba Cloud Linux:blk-iocost 重みベースのスロットリング機能の構成

最終更新日:Jul 15, 2025

blk-iocost 重みベースのスロットリング機能は、cgroup 入出力サブシステム(blkcg)の重みベースのディスクスロットリング機能に対する Alibaba Cloud Linux の改良点です。 blk-iocost は、アプリケーションまたはプロセスの優先順位に基づいて、ブロックデバイスでの入出力操作に帯域幅を割り当てるために使用される入出力コントローラーです。 blk-iocost は、指定された重み値に基づいて、特定のアプリケーションまたはプロセスによるブロックデバイスの入出力帯域幅の使用量を制御することもできます。 blk-iocost は、ディスク入出力リソースをより適切に制御および管理するのに役立ちます。

説明

cgroup v1 と cgroup v2 は、Linux カーネルのリソース管理機能の 2 つのバージョンです。 Alibaba Cloud Linux カーネルでは、blk-iocost 機能は cgroup v1 と v2 の両方のインターフェイスをサポートしています。ほとんどの場合、システムでアクティブ化されて使用されるのは 1 つのバージョンだけです。 stat -fc %T /sys/fs/cgroup コマンドを実行して確認できます。

  • tmpfs が返された場合、cgroup v1 インターフェイスが使用されています。

  • cgroup2fs が返された場合、cgroup v2 インターフェイスが使用されています。

オペレーティングシステムの制限

  • カーネルバージョン 4.19.81-17 以後の Alibaba Cloud Linux 2

  • Alibaba Cloud Linux 3

cost.qos インターフェイスの使用上の注意

cost.qos は、blk-iocost 機能を有効または無効にし、レイテンシの重みに基づいてサービス品質(QoS)レートを制限するために使用される読み取り/書き込みインターフェイスです。インターフェイスファイルは blkcg のルートグループにのみ存在し、そのフルネームは cgroup のバージョンによって異なります。

  • cgroup v1: blkio.cost.qos

  • cgroup v2: io.cost.qos

設定

構成ファイルの各行は、MAJ:MIN 形式のディスクのメジャー(MAJ)番号とマイナー(MIN)番号で始まり、その後に次の表のパラメーターが続きます。ディスクの MAJ 番号と MIN 番号を照会するには、lsblk | grep <disk name> コマンドを実行します。

パラメーター

説明

enable

blk-iocost 機能を有効にするかどうかを指定します。

  • 0: blk-iocost 機能を無効にします。これはデフォルト値です。

  • 1: blk-iocost 機能を有効にします。

ctrl

制御モード。有効値:

  • auto: システムはディスクカテゴリを自動的に検出し、組み込みパラメーターを使用します。

    重要

    ctrl=auto を設定し、Elastic Compute Service(ECS)インスタンスに接続されているディスクのカテゴリが SSD(標準 SSD、エンタープライズ SSD(ESSD)、または NVMe SSD など)の場合は、SSD の rotational 属性を 0 に設定します。 blk-iocost は入出力コストをより正確に評価し、スケジューリングポリシーを調整して SSD の入出力パフォーマンスを向上させることができます。コマンド例:

    sudo sh -c 'echo 0 > /sys/block/<DISK_NAME>/queue/rotational'

    <DISK_NAME> を実際のディスク名に置き換えます。

  • user: 次の制御パラメーターを構成します。

    • rpct: 読み取りレイテンシのパーセンタイル。有効値: 0 ~ 100。

    • rlat: 読み取りレイテンシのしきい値。単位: マイクロ秒。

    • wpct: 書き込みレイテンシのパーセンタイル。有効値: 0 ~ 100。

    • wlat: 書き込みレイテンシのしきい値。単位: マイクロ秒。

    • min: 最小スケーリング率。有効値: 1 ~ 10000。

    • max: 最大スケーリング率。有効値: 1 ~ 10000。

blk-iocost 機能の有効化

ディスクの blk-iocost 機能を有効にします。この例では、254:48 ディスクが使用され、制御モードは user に設定されています。読み取りおよび書き込みリクエストの 95% 以上でレイテンシ(rlat|wlat)が 5 ミリ秒を超える場合、ディスクは飽和状態とみなされます。カーネルは、50% ~ 150% の範囲内でディスクにリクエストが送信されるレートを調整します。

  • cgroup v1 インターフェイス

    sudo sh -c 'echo "254:48 enable=1 ctrl=user rpct=95.00 rlat=5000 wpct=95.00 wlat=5000 min=50.00 max=150.00" > /sys/fs/cgroup/blkio/blkio.cost.qos'
  • cgroup v2 インターフェイス

    sudo sh -c 'echo "254:48 enable=1 ctrl=user rpct=95.00 rlat=5000 wpct=95.00 wlat=5000 min=50.00 max=150.00" > /sys/fs/cgroup/io.cost.qos'

cost.model インターフェイスの使用

cost.model は、コストモデルを構成するために使用される読み取り/書き込みインターフェイスです。インターフェイスファイルは blkcg のルートグループにのみ存在し、そのフルネームは cgroup のバージョンによって異なります。

  • cgroup v1: blkio.cost.model

  • cgroup v2: io.cost.model

設定

構成ファイルの各行は、MAJ:MIN 形式のディスクのメジャー(MAJ)番号とマイナー(MIN)番号で始まり、その後に次の表のパラメーターが続きます。ディスクの MAJ 番号と MIN 番号を照会するには、lsblk | grep <disk name> コマンドを実行します。

パラメーター

説明

ctrl

制御モード。有効値:

  • auto: システムは現在のワークロードに基づいて入出力スケジューリングポリシーを自動的に最適化します。

    重要

    ctrl=auto を設定し、ECS インスタンスに接続されているディスクのカテゴリが SSD(標準 SSD、ESSD、または NVMe SSD など)の場合は、SSD の rotational 属性を 0 に設定する必要があります。 blk-iocost は入出力コストをより正確に評価し、スケジューリングポリシーを調整して SSD の入出力パフォーマンスを向上させることができます。コマンド例:

    sudo sh -c 'echo 0 > /sys/block/<DISK_NAME>/queue/rotational'

    <DISK_NAME> を実際のディスク名に置き換えます。

  • user: モデルパラメーターを構成します。

model

モデルパラメーター。有効値: linearmodel パラメーターを linear に設定する場合は、次のモデリングパラメーターを指定します。

  • [r|w]bps: 最大シーケンシャル入出力スループット。単位: バイト/秒。

  • [r|w]seqiops: 1 秒あたりのシーケンシャル入出力操作(IOPS)の制限。

  • [r|w]randiops: ランダム IOPS の制限。

    説明

    カーネルソースコードの tools/cgroup/iocost_coef_gen.py スクリプトを使用して上記のパラメーターを生成し、パラメーターを cost.model インターフェイスファイルに書き込んでコストモデルを構成できます。

cost.model インターフェイスを使用したコストモデルの設定

この例では、254:48 ディスクが使用されています。 model パラメーターを linear に設定し、モデリングパラメーターを指定してコストモデルを構成します。

  • cgroup v1 インターフェイス

    sudo sh -c 'echo "254:48 ctrl=user model=linear rbps=2706339840 rseqiops=89698 rrandiops=110036 wbps=1063126016 wseqiops=135560 wrandiops=130734" > /sys/fs/cgroup/blkio/blkio.cost.model'
  • cgroup v2 インターフェイス

    sudo sh -c 'echo "254:48 ctrl=user model=linear rbps=2706339840 rseqiops=89698 rrandiops=110036 wbps=1063126016 wseqiops=135560 wrandiops=130734" > /sys/fs/cgroup/io.cost.model'

`weight/cost.weight` インターフェイスの使用上の注意

Alibaba Cloud Linux 3 の weight インターフェイスと Alibaba Cloud Linux 2 の cost.weight インターフェイスは、入出力リソースの割り当てを制御するために使用されるカーネルのコアインターフェイスです。どちらのインターフェイスも読み取り/書き込みインターフェイスです。 [1,10000] の範囲内で重み値を構成することにより、ディスク入出力帯域幅を動的に割り当てることができます。インターフェイスファイルは blkcg のサブグループにのみ存在し、そのフルネームは cgroup のバージョンによって異なります。

  • Alibaba Cloud Linux 3

    • cgroup v1: blkio.cost.weight

    • cgroup v2: io.weight

  • Alibaba Cloud Linux 2

    • cgroup v1: blkio.cost.weight

    • cgroup v2: io.cost.weight

設定

  • インターフェイスの重み値 <weight> を設定して、blkcg のデフォルトの重みを変更します。

  • インターフェイスのポート番号と重み値 MAJ:MIN <weight> を設定して、指定したディスクの blkcg の重みを変更します。

重みの変更

blk-iocost 機能を有効にした後、cgroup v1 の blkcg1 制御グループと cgroup v2 の cg1 制御グループを作成し、cgroup v1 には cost.weight インターフェイスを、cgroup v2 には weight インターフェイスを使用して、制御グループのデフォルトの重みを 50 に変更します。次に、254:48 ディスクの制御グループの重みを 50 に設定します。

  • cgroup v1 インターフェイス

    sudo mkdir /sys/fs/cgroup/blkio/blkcg1    # 制御グループ blkcg1 を作成する
    sudo sh -c 'echo "50" > /sys/fs/cgroup/blkio/blkcg1/blkio.cost.weight'    # デフォルトの重みを 50 に変更する
    sudo sh -c 'echo "254:48 50" > /sys/fs/cgroup/blkio/blkcg1/blkio.cost.weight'    # ディスクの重みを 50 に設定する
  • cgroup v2 インターフェイス

    • Alibaba Cloud Linux 3

      sudo mkdir /sys/fs/cgroup/cg1    # 制御グループ cg1 を作成する
      sudo sh -c 'echo "50" > /sys/fs/cgroup/cg1/io.weight'    # デフォルトの重みを 50 に変更する
      sudo sh -c 'echo "254:48 50" > /sys/fs/cgroup/cg1/io.weight'    # ディスクの重みを 50 に設定する
    • Alibaba Cloud Linux 2

      sudo mkdir /sys/fs/cgroup/cg1    # 制御グループ cg1 を作成する
      sudo sh -c 'echo "50" > /sys/fs/cgroup/cg1/io.cost.weight'    # デフォルトの重みを 50 に変更する
      sudo sh -c 'echo "254:48 50" > /sys/fs/cgroup/cg1/io.cost.weight'    # ディスクの重みを 50 に設定する

一般的なモニタリングツール

blk-iocost は、システムの入出力パフォーマンスを監視および評価する必要があります。次のツールまたはインターフェイスを使用して、入出力リソースの使用状況を監視し、リソース使用率を最適化できます。

  • iocost モニタースクリプト

    カーネルソースコードの tools/cgroup/iocost_monitor.py スクリプトは、drgn デバッガーを使用してカーネルパラメーターを取得し、入出力パフォーマンスのモニタリングデータを提供します。スクリプトを使用するには、次の手順を実行します。

    1. drgn デバッガーをインストールします。

      sudo pip3 install drgn
    2. iocost_monitor.py スクリプトをダウンロードします。

      wget https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/plain/tools/cgroup/iocost_monitor.py
    3. iocost_monitor.py スクリプトを実行します。

      この例では、vdd ディスクが使用されています。

      sudo python3 ./iocost_monitor.p vdd

      次のコマンド出力が返されます。

      vdd RUN  per=500.0ms cur_per=3930.839:v14620.321 busy= +1 vrate=6136.22% params=hdd
                                active    weight      hweight% inflt% dbt  delay usages%
      blkcg1                       *    50/   50   9.09/  9.09   0.00   0  0*000 009:009:009
      blkcg2                       *   500/  500  90.91/ 90.91   0.00   0  0*000 089:091:092
  • cgroup v1 の blkio.cost.stat インターフェイスファイル

    Alibaba Cloud Linux カーネルは、cgroup v1 インターフェイスの blk-iocost インターフェイスファイル(blkio.cost.stat)を提供します。このインターフェイスファイルには、各制御対象デバイスの QoS データが記録されます。インターフェイスファイルを表示するには、次のコマンドを実行します。

    cat /sys/fs/cgroup/blkio/blkcg1/blkio.cost.stat

    次のコマンド出力が返されます。

    254:48 is_active=1 active=50 inuse=50 hweight_active=5957 hweight_inuse=5957 vrate=159571
  • ftrace ツール

    Alibaba Cloud Linux カーネルは、blk-iocost 機能に関連する ftrace ツールを提供します。 blk-iocost 機能の場合、ftrace はスケジューラーの意思決定プロセスと入出力リクエスト処理を詳細にトレースして、詳細なパフォーマンス分析を提供するのに役立ちます。ftrace ツールを使用するには、次の手順を実行します。

    1. enable 属性を 1 に設定して、ftrace ツールを有効にします。

      sudo sh -c 'echo 1 > /sys/kernel/debug/tracing/events/iocost/enable'
    2. 出力情報を表示します。

      sudo cat /sys/kernel/debug/tracing/trace_pipe

      次のコマンド出力が返されます。

          dd-1593  [008] d...   688.565349: iocost_iocg_activate: [vdd:/blkcg1] now=689065289:57986587662878 vrate=137438 period=22->22 vtime=0->57986365150756 weight=50/50 hweight=65536/65536
          dd-1593  [008] d.s.   688.575374: iocost_ioc_vrate_adj: [vdd] vrate=137438->137438 busy=0 missed_ppm=0:0 rq_wait_pct=0 lagging=1 shortages=0 surpluses=1
      <idle>-0     [008] d.s.   688.608369: iocost_ioc_vrate_adj: [vdd] vrate=137438->137438 busy=0 missed_ppm=0:0 rq_wait_pct=0 lagging=1 shortages=0 surpluses=1
          dd-1594  [006] d...   688.620002: iocost_iocg_activate: [vdd:/blkcg2] now=689119946:57994099611644 vrate=137438 period=22->26 vtime=0->57993412421644 weight=250/250 hweight=65536/65536
      <idle>-0     [008] d.s.   688.631367: iocost_ioc_vrate_adj: [vdd] vrate=137438->137438 busy=0 missed_ppm=0:0 rq_wait_pct=0 lagging=1 shortages=0 surpluses=1
      <idle>-0     [008] d.s.   688.642368: iocost_ioc_vrate_adj: [vdd] vrate=137438->137438 busy=0 missed_ppm=0:0 rq_wait_pct=0 lagging=1 shortages=0 surpluses=1
      <idle>-0     [008] d.s.   688.653366: iocost_ioc_vrate_adj: [vdd] vrate=137438->137438 busy=0 missed_ppm=0:0 rq_wait_pct=0 lagging=1 shortages=0 surpluses=1
      <idle>-0     [008] d.s.   688.664366: iocost_ioc_vrate_adj: [vdd] vrate=137438->137438 busy=0 missed_ppm=0:0 rq_wait_pct=0 lagging=1 shortages=0 surpluses=1