EC2 Nitro ベースのインスタンスでホストされている EBS ボリュームから最大限の I/O パフォーマンスを得るにはどうすればよいですか?

所要時間2分
0

Amazon Elastic Compute Cloud (Amazon EC2) Nitro ベースのインスタンスでワークロードを実行しています。自分のインスタンスでホストされている Amazon Elastic Block Store (Amazon EBS) ボリュームから最大限の I/O パフォーマンスを得られるようにしたいと考えています。

解決策

1.     EBS ボリュームが IOPS クォータに達したかどうかを確認します。ボリュームが IOPS クォータに達するとレイテンシーが増加し、レイテンシーが増加するとパフォーマンスに影響します。詳細については、以下を参照してください: Amazon EBS プロビジョンド IOPS ボリュームのパフォーマンスを最適化するにはどうすればよいですか?
注: GP2 ボリュームを使用している場合は、ボリュームがバーストクレジットを使い果たしていないことを確認してください。

2.    NVMe ストレージを使用する場合は、次のオペレーティングシステム (OS) のいずれかを実行する必要があります。

  • Amazon Linux - Amazon マシンイメージ (AMI) 以降およびカーネル 4.12 以降
  • CentOS - 7.0 以降およびカーネル 3.10 以降
  • Red Hat - 7.0 以降とカーネル 3.10 以降
  • カーネル 5.0 を搭載した Ubuntu 19.10 またはカーネル 5.0 以降を搭載した Ubuntu 18.04.03
    注: これらの Ubuntu バージョンでは、マルチキューはデフォルトで有効になっています。
  • Ubuntu - 16.04 または 16.10
    注: これらの Ubuntu バージョンでは、マルチキュースケジューラーはカーネルにコンパイルされていないため、個別のモジュールロードが必要です。
  • SUSE 12 または SUSE 11 SP3 以降
  • Windows Server 2008 R2、2012 R2、および 2016 またはそれ以降

または、カーネルバージョンがマルチキュー機能を備えた I/O スケジューラーをサポートしていることを確認します。最も一般的なマルチキュー I/O スケジューラーは、Kyber、mq-deadline、および budget fair queue (bfg) です。

注: Oracle、Linux、Debian などの OS では、マルチキュー I/O スケジューラを含んでいるかサポートしているカーネルバージョンを使用してください。CentOS とそのカーネルバージョンは、マルチキュー I/O スケジューラーをサポートしています。

これらの OS の以前のバージョンを使用すると、Nitro ベースのインスタンスではホストレベルでマルチキュー処理が行われるため、I/O パフォーマンスが低下する可能性があります。このため、OS レベルのスケジューラーとホストレベルのスケジューラーが互換でなくなります。

EBS ボリュームに送信された I/O 読み取りまたは書き込みリクエストは、ボリュームに捕捉されるまでに複数のレイヤーを通過します。Nitro ベースのインスタンスにマルチキューでないスケジューラーを備えた古いカーネルバージョンでは、I/O スケジューラーレイヤーの遅延 (I2D) が発生することがあります。この遅延は、blktraceblkparse、および btt ツールを使用するテストやベンチマーク結果で生じます。これらのツールの詳細については、die.net ウェブサイトの blktraceblkparse、および btt を参照してください。

Nitro ベースのインスタンスでの I/O パフォーマンスを向上させるため、CentOS 7 にはマルチキューブロック I/O キューイングメカニズム (blk-mq) が搭載されています。このメカニズムでは、デバイスドライバーが I/O リクエストを複数のハードウェアキューまたはソフトウェアキューにマッピングできます。Nitro ベースのシステムから最大限のパフォーマンスを得るには、最新のカーネルを搭載した最新の OS を使用することをお勧めします。

CentOS 6 の I/O スケジューラー

$cat /sys/block/xvdf/queue/scheduler noop anticipatory deadline \[cfq\]$cat config-2.6.32-754.30.2.el6.x86\_64 | grep -i blk\_mq

注: CentOS 6 カーネルの設定ファイルは noop スケジューラを使用しているため、blk_mq は返されません。

Redhat 9 およびカーネル 5.14 以降の I/O スケジューラー

cat /sys/block/<EBS device name>/queue/scheduler \[none\] mq-deadline kyber bfq

スケジューラーを選択する前に、それぞれの詳細を確認してください。詳細については、Red Hat ウェブサイトの「20.1. 利用可能なディスクスケジューラー」を参照してください。

EC2 インスタンスの実行時に OS レベルのスケジューラーを更新するには、次のコマンドを実行します。

#sudo echo 'kyber'> /sys/block/<EBS device name>/queue/scheduler

I/O スケジューラを恒久的に変更するには、GRUB 設定を変更し、エレベーターパラメーターを更新します。以下に、CentOS とRed Hat Enterprise Linux (RHEL) 用の手順を示します。

1.    次のコマンドを実行します。

#sudo vim /etc/default/grubGRUB\_CMDLINE\_LINUX="crashkernel=auto rd.lvm.lv=centos/root rd.lvm.lv=centos/swap rhgb quiet elevator=kyber"

2.    次のコマンドを実行します。

#sudo grub2-mkconfig -o /boot/grub2/grub.cfg

インスタンスが再起動されても、I/O スケジューラーは設定されたとおりになります。

AWS公式
AWS公式更新しました 6ヶ月前
コメントはありません