SC ストレージカスタマ通知: Linux 大規模な IO サイズは、iSCSI ボリュームの可用性に影響する可能性があります。
Summary: 最近のカーネル変更は Oracle Enterprise Linux ディストリビューションに導入されました。これにより、ブロックデバイスでの IO 制限の計算方法の動作を変更できます。
Symptoms
警告:
これらの変更の概要は次のとおりです。
Oracle Linux 6/7:
ELSA-2015-3098 のエンタープライズカーネルセキュリティおよびバグ修正の更新
http://linux.oracle.com/errata/ELSA-2015-3098.html
リリース日/2015-11-13
[3.8.13-100.el6uek/3.8.13-100.el7uek]
block: remove artifical max_hw_sectors cap (Christoph Hellwig) [Orabug: 21511611]
Oracle Linux 5:
ELBA-2015-3076-非対応エンタープライズカーネルバグ修正の更新
http://linux.oracle.com/errata/ELBA-2015-3076.html
リリース日/2015-08-27
[2.6.39-400.260.1.el5uek]
block: remove artifical max_hw_sectors cap (Joe Jin) [Orabug: 21455630]
概要:
Linux システムに存在する各ブロックデバイスには、キューディレクトリが割り当てられます (これには、 / sys/block/xxx/queue/) があります。このディレクトリには、多数の構成ファイルが含まれています。これらのファイルの詳細については、次の場所を参照してください。
https://www.kernel.org/doc/Documentation/block/queue-sysfs.txt
この CSTA に関連する2つのパラメーターは次のとおりです。
max_hw_sectors_kb
単一データ転送でサポートされる最大キロバイト数。
このパラメーターは読み取り専用であり、SCSI の照会応答を介してターゲットストレージデバイスによって提供されます。Storage Center オペレーティングシステム (SCOS) 内の SCSI ターゲットサブシステムは、現在、ゼロで応答しています。これは制限がないことを示しているため、サーバは、その linux カーネルバージョン (32MB) 内で許容される最大値に値を設定します。
max_sectors_kb
ブロック層がファイルシステムリクエストに対して許可する最大キロバイト数。
この値は読み取り/書き込み可能です。この値は、max_hw_sectors_kb 値以上である必要があります。
カーネル2.6.39-400.260.1. el5uek, 3.8.13-100. el6uek, and 3.8.13-100. el7uek で導入された Oracle Linux カーネルの変更は、 max_sectors_kbの計算方法を変更しています。以前のカーネルリリースでは、値は常に512KB に設定されていました。この変更後、max_sectors_kb の値は max_hw_sectors_kb の値に設定されます。これにより、512 KB から32MB までの特定のブロックデバイスへの単一 IO 転送の最大サイズが実質的に向上しました。
この変更により、Storage Center 10Gb iSCSI ドライバの、~ 8MB を超える IO サイズの問題が公開されていました。大規模な io を生成しているサーバープロセスが異常停止したり、大量の IO サイズが原因でボリュームが使用できなくなったりする場合があります。さらに、10Gb iSCSI ドライバの問題によって、コントローラが他の Storage Center サブシステムが必要とするメモリを消費し、大きな影響を及ぼす可能性があります。
対処方法:
この問題を回避するためには、各ブロックデバイスの max_sectors_kb を Linux サーバで動的に変更する必要があります。Linux システムに接続されているマルチパスブロックデバイスのコマンドの例を以下に示します。
#mpath1:
echo 512 >/sys/block/dm-6/queue/max_sectors_kb
echo 512 >/sys/block/sdc/queue/max_sectors_kb
echo 512 >/sys/block/sde/queue/max_sectors_kb
echo 512 >/sys/block/sdk/queue/max_sectors_kb
echo 512 >/sys/block/sdm/queue/max_sectors_kb
これらの変更は、再起動後に永続的ではありません。Init スクリプトは、指定されたサーバが起動して、すべての iSCSI ブロックデバイスに対してこのパラメーターを変更する場合に実行するように実装できます。お客様の環境ごとに、この永続性を実装するには、Linux 管理者または Oracle サポートを参照してください。
次のスクリプト (udev ルール) は、 iSCSI 接続されているすべての COMPELLENT ボリュームの max_sectors_kb を512kb に設定します。このスクリプトは、保証や保証が黙示的にならないように独自の裁量で使用してください。スクリプトをテストすることをお勧めしますが、問題なく動作します。
次の内容を使用して、ファイル99-cml-Iscsiをディレクトリ/etc/udev/rules.d/に作成します。
[root@localhost/] # cat/etc/udev/rules.d/99-cml-iscsi.rules
# Max_sectors_kb Dell Storage Center iSCSI マップされたボリュームの変更
ACTION = = "add", \
ENV = = "*-iscsi-* compellent *", \
RUN + = "/bin/sh-c ' echo 512 >/sys $ DEVPATH/queue/max_sectors_kb '"
影響を受けるバージョン:
すべての SCOS バージョンは、10Gb iSCSI インターフェイスを使用する影響を受けます。Fibre Channel、1 Gb iSCSI、および FCoE は影響を受けません。
解決策:
Max_sectors_kb問題は、7.01.12、7.02.01、および7.03.01 以降の SCOS バージョンで解決されました。
SCOS 6.07.03 以降では、10Gb iSCSI ドライバのメモリ消費の問題に対処するために、変更が使用可能になります。