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

Alibaba Cloud Linux:blk-ioscostウェイトベースのスロットリング機能の設定

最終更新日:Jul 05, 2024

blk-ioscostウェイトベースのスロットリング機能は、cgroup I/Oサブシステム (blkcg) のウェイトベースのディスクスロットリング機能をAlibaba Cloud Linuxで改良したものです。 blk-iocostは、アプリケーションまたはプロセスの優先順位に基づいてブロックデバイス上のI/O操作に帯域幅を割り当てるために使用されるI/Oコントローラです。 blk_iocostはまた、特定の重み値に基づいて、特定のアプリケーションまたはプロセスによるブロックデバイスI/O帯域幅の使用を制御することができる。 blk-ioscostは、ディスクI/Oリソースの制御と管理を改善します。

説明

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

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

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

使用上の注意

  • cost.qos

    このインタフェースは、blk − iocost機能を有効または無効にするために使用され、待ち時間重みに基づいてI/Oサービス品質 (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

      • 0: blk-iocost機能を無効にします。

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

    • ctrl: 制御モード。 有効な値: autoおよびuser

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

        重要

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

        sudo sh -c 'echo 0 > /sys/block/<DISK_NAME>/queue/rotational' # Replace <DISK_NAME> with the actual disk name.
      • user: 次の制御パラメーターを設定します。

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

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

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

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

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

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

  • cost.mo del

    このインターフェイスは、コストモデルを構成するために使用されます。 このインターフェイスは、blkcgのルートグループにのみファイルが存在する読み書きインターフェイスです。 インターフェイスファイルの完全名は、cgroupのバージョンによって異なります。

    • cgroup v1: blkio.cost.mo del

    • cgroup v2: io.cost.mo del

    インターフェイス構成:

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

    • ctrl: 制御モード。 有効な値: autoおよびuser

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

        重要

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

        sudo sh -c 'echo 0 > /sys/block/<DISK_NAME>/queue/rotational' # Replace <DISK_NAME> with the actual disk name.
      • user: モデルパラメーターを設定します。

    • model: モデルパラメータ。 有効値: linear モデルパラメーターをlinearに設定する場合は、次のモデリングパラメーターを指定する必要があります。

      • [r | w]bps: 最大シーケンシャルI/Oスループット。

      • [r | w]seqiops: 1秒あたりの逐次入出力演算 (IOPS) 。

      • [r | w]randiops: ランダムなIOPS。

        説明

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

  • weight (Alibaba Cloud Linux 3) またはcost.weight (Alibaba Cloud Linux 2)

    このインターフェイスは、各ディスクの重み値を設定したり、サブグループのデフォルトの重み (100) を変更したりするために使用されます。 有効な値: 1 ~ 10000 インターフェイスは、インターフェイスファイルがblkcgのサブグループにのみ存在する読み書きインターフェイスです。

    Alibaba Cloud Linux 3

    インターフェイスファイルの完全名は、cgroupのバージョンによって異なります。

    • 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>: MAJ:MINで特定されるディスク上のblkcgの重み。

制限事項

次のカーネルバージョンを含むAlibaba Cloud Linuxイメージのみがblk-iocost機能をサポートしています。

  • Alibaba Cloud Linux 2: 4.19.81-17以降

  • Alibaba Cloud Linux 3: すべてのバージョン

手順

ステップ1: cost.qosを使用してblk-iocost機能を有効にする

シナリオ例: cost.qosインターフェイスを使用して、254:48ディスクのblk-iocost機能を有効にします。 5% を超える読み取りおよび書き込み要求のレイテンシ (rlat | wlat) が5ミリ秒を超える場合、ディスクは飽和していると見なされます。 カーネルは、要求がディスクに送信されるレートを、元のレートの50% から150% までの間隔内で調整します。 cgroup v1およびcgroup v2インターフェイスに対して次のコマンドを実行します。

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'

手順2: cost.mo delを使用してコストモデルを設定する

シナリオ例: cost.mo delインターフェイスを使用してモデルを線形に設定し、モデルパラメーターを指定して254:48ディスクでモデルを構成します。 cgroup v1およびcgroup v2インターフェイスに対して次のコマンドを実行します。

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'

ステップ3: 重みの変更

シナリオ例: ステップ1: cost.qosインターフェイスを使用してblk-iocost機能を有効にすることでcost.qosを設定し、ステップ2: cost.mo delインターフェイスを使用してコストモデルを設定することでcost.mo delを設定すると、blk-iocost機能が有効になります。 次に、blkcg1 (cgroup v1) またはcg1 (group v2) コントロールグループを作成し、cgroup v1のcost.weightインターフェイスまたはcgroup v2のweightインターフェイスを使用して、コントロールグループのデフォルトの重みを50に変更します。 次に、254:48のディスク上のコントロールグループの重みを50に設定します。 cgroup v1およびcgroup v2インターフェイスに対して次のコマンドを実行します。

cgroup v1のコマンド

sudo mkdir /sys/fs/cgroup/blkio/blkcg1 # Create the control group named blkcg1.
sudo sh -c 'echo "50" > /sys/fs/cgroup/blkio/blkcg1/blkio.cost.weight' # Change the default weight to 50.
sudo sh -c 'echo "254:48 50" > /sys/fs/cgroup/blkio/blkcg1/blkio.cost.weight'    # Set the weight for the disk to 50.

cgroup v2のコマンド

  • Alibaba Cloud Linux 2

    sudo mkdir /sys/fs/cgroup/cg1    # Create the control group named cg1.
    sudo sh -c 'echo "50" > /sys/fs/cgroup/cg1/io.cost.weight'    # Change the default weight to 50.
    sudo sh -c 'echo "254:48 50" > /sys/fs/cgroup/cg1/io.cost.weight'    # Set the weight to 50.
  • Alibaba Cloud Linux 3

    sudo mkdir /sys/fs/cgroup/cg1    # Create the control group named cg1.
    sudo sh -c 'echo "50" > /sys/fs/cgroup/cg1/io.weight'    # Change the default weight to 50.
    sudo sh -c 'echo "254:48 50" > /sys/fs/cgroup/cg1/io.weight'    # Set the weight for the disk to 50.

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

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

  • ioscostモニタースクリプト

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

    1. drgnデバッガーをインストールします。 サンプルコマンド:

      sudo pip3 install drgn

      drgnデバッガーの詳細については、「drgn」をご参照ください。

    2. (オプション) iocost_monitor.pyをダウンロードします。

      完全なLinuxカーネルのソースコードをダウンロードしていない場合は、Linuxカーネルのパブリックリポジトリから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.jp 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-ioscostインターフェイスファイル (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は、スケジューラの意思決定プロセスとI/O要求処理を詳細に追跡して、詳細なパフォーマンス分析を提供するのに役立ちます。 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