PowerFlex:PowerFlex SDCドライバーのオンデマンド コンパイル
Summary: このナレッジベースの記事では、LinuxシステムでPowerFlex SDCドライバーのオンデマンド コンパイルを有効にする方法について説明します。
Instructions
この機能は、Linuxカーネルでのアプリケーション バイナリ インターフェイス(ABI)の変更に対応することを目的としています。これにより、別のカーネル用にプリコンパイルされたSDCドライバーのロードに失敗する可能性があります。
従来、Linux(RPM/DEB)用のSDCインストール パッケージには、そのLinuxディストリビューションのさまざまなカーネル用の複数のSDCカーネル モジュールが含まれていました。カーネルのアップデートを頻繁にリリースするUbuntuなどのディストリビューションにインストールするユーザーの場合、SDCドライバーのDellのリモート リポジトリーに接続し、そこからSDCをダウンロードするようにSDCサービスをセットアップするオプションがありました。
この新機能により、ユーザーは、ドライバーのリポジトリー内の一致するSDCの可用性に依存することなく、実行中のカーネルに完全に一致するSDCドライバーをコンパイルできます。
ターゲット:セキュリティ上の理由からカーネルを頻繁に更新し、特殊なカスタムカーネルを実行するユーザーは、この機能の恩恵を受けることができます。
前提条件
コンパイル手順を成功させるには、SDCサービスのホストに次のパッケージをインストールする必要があります。
- GNU C コンパイラ (GCC) の最新バージョンである GCC
- GNU make(1) です。
- 実行中のカーネルのカーネル開発パッケージ。このパッケージは、一般的に次の名前で入手できます。
- kernel-devel: RPM パッケージマネージャーを使用したディストリビューション用。(Red Hat、SUSEなど)
- Debian パッケージマネージャ (Debian、Ubuntu など) を使用したディストリビューションの linux-header
自動オンデマンド編集
SDCドライバーの自動オンデマンド コンパイルを許可するには、ホストが前述の 「前提条件 」セクションに記載されているすべての前提条件を満たしている必要があります。SDCドライバーを起動する際、次のすべての条件が満たされている場合、SDCサービスはSDCドライバーのコンパイルを試みます。
-
実行中のカーネルと一致するSDCが、ドライバー キャッシュで使用できません。
ドライバー キャッシュの詳細については、以下の「 ドライバー キャッシュ 」を参照してください。 -
という名前のファイル
/etc/emc/scaleio/scini_sync/.build_scini存在。
ファイルの内容は無視されます。ただし、将来の機能拡張のために、空のままにしておく必要があります。
このファイルは、touch(1)コマンドを使用します。
手動コンパイル
SDCドライバーを使用する場合、コンパイル ホストは前述の 「前提条件」 セクションに記載されているすべての前提条件を満たしている必要があります
SDCドライバーを手動でコンパイルするには、次の手順を実行します。
-
コンパイルバンドルをドライバキャッシュ内のディレクトリから一時ディレクトリにコピーします。バンドルの場所は、PowerFlexのバージョンとLinuxディストリビューションによって異なります。
たとえば、Red Hat Enterprise Linux 9ベースのディストリビューションの場合、PowerFlex 3.6.3 SDCのバンドルは次のとおりです。/bin/emc/scaleio/scini_sync/driver_cache/RHEL9/3.6.3000.128/Dell-PowerFlex-scini_builder-3.6.3000.128.x86_64.tgz
ドライバー キャッシュの詳細については、以下の「 ドライバー キャッシュ 」を参照してください。 -
一時ディレクトリーに移動し、コンパイル バンドルを抽出します。
Example:tar xzf Dell-PowerFlex-scini_builder-3.6.3000.128.x86_64.tgz
-
Dell Diagnostics(診断)プログラム
build_driver.shscriptは、抽出されたコンテンツの最上位にあります。引数を指定しないと、スクリプトは実行中のカーネル用にドライバーをコンパイルしようとします。
別のカーネル用にコンパイルするには、そのカーネルのヘッダーディレクトリへのパスに「-o」と「-s" コマンドライン引数を使用します。
呼び出しの詳細については、次を実行します。build_driver.sh -h
-
コンパイル・プロセスの出力は、標準出力に出力されます。
コンパイルが正常に完了すると、生成されるSDCドライバー ファイルscini.koが次の場所にあります。./ini/scini.ko間のデッドロックが原因で潜在的なHMONタイムアウトが発生する問題が解決されています。 -
コンパイル ホストからターゲットSDCホストにドライバー ファイルをコピーし、ドライバー キャッシュ内のコンパイル バンドルと同じ場所にあるターゲット カーネル バージョンに一致するディレクトリーにコピーします。
たとえば、カーネル バージョン 5.14.0-362.24.1.el9_3.x86_64 に準拠したドライバーの場合、ドライバー ファイルのターゲット パスは/bin/emc/scaleio/scini_sync/driver_cache/RHEL9/3.6.3000.128/5.14.0-362.24.1.el9_3.x86_64/scini.ko間のデッドロックが原因で潜在的なHMONタイムアウトが発生する問題が解決されています。
Additional Information
ドライバー キャッシュ
特定のカーネルに対して正常にコンパイルされたSDCドライバーは、ドライバー キャッシュの適切なディレクトリーにコピーされ、そのコンパイルは再度トリガーされません
ドライバー キャッシュの場所は次のとおりです。 /bin/emc/scaleio/scini_sync/drive_cache間のデッドロックが原因で潜在的なHMONタイムアウトが発生する問題が解決されています。
ビルド ログ
自動オンデマンド コンパイルが有効になっている場合、すべてのコンパイル ログが /bin/emc/scaleio/scini_sync/driver_build.log.
コンパイルが成功すると、次のようなメッセージが表示されます。
make: Entering directory '/usr/src/linux-headers-5.15.0-30-generic' "Following additional compilation's conditions are defined:" BLK_MQ_HEADER BLK_DEV_MAX_SEGMENTS SOCKET_HAS_NET_IN_CREATE BIO_BI_BDEV BIO_BI_STATUS BLK_QUEUE_FLAG_FUNCS BLK_INITIALIZE_RMQ_FN WAIT_QUEUE_ENTRY_T HAS_SCSI_REQUEST HAS_SCSI_REQ HAS_SCSI_CMND HAS_SCSI_IOCTL HAS_SCSI_IOCTL_WITH_GENDISK HAS_QUEUE_FLAG_DISCARD HAS_DISK_LIVE_IN_GENHD CC [M] /tmp/PowerFlex_driver_build_hpoM6l/ini/./linux/api/api_main.o CC [M] /tmp/PowerFlex_driver_build_hpoM6l/ini/./linux/api/api_mos.o CC [M] /tmp/PowerFlex_driver_build_hpoM6l/ini/./linux/api/api_net.o CC [M] /tmp/PowerFlex_driver_build_hpoM6l/ini/./linux/api/api_ioctl.o CC [M] /tmp/PowerFlex_driver_build_hpoM6l/ini/./linux/api/api_blk_io.o CC [M] /tmp/PowerFlex_driver_build_hpoM6l/ini/./linux/api/api_blk_dev.o LD [M] /tmp/PowerFlex_driver_build_hpoM6l/ini/scini.o "Following additional compilation's conditions are defined:" BLK_MQ_HEADER BLK_DEV_MAX_SEGMENTS SOCKET_HAS_NET_IN_CREATE BIO_BI_BDEV BIO_BI_STATUS BLK_QUEUE_FLAG_FUNCS BLK_INITIALIZE_RMQ_FN WAIT_QUEUE_ENTRY_T HAS_SCSI_REQUEST HAS_SCSI_REQ HAS_SCSI_CMND HAS_SCSI_IOCTL HAS_SCSI_IOCTL_WITH_GENDISK HAS_QUEUE_FLAG_DISCARD HAS_DISK_LIVE_IN_GENHD MODPOST /tmp/PowerFlex_driver_build_hpoM6l/ini/Module.symvers CC [M] /tmp/PowerFlex_driver_build_hpoM6l/ini/scini.mod.o LD [M] /tmp/PowerFlex_driver_build_hpoM6l/ini/scini.ko BTF [M] /tmp/PowerFlex_driver_build_hpoM6l/ini/scini.ko Skipping BTF generation for /tmp/PowerFlex_driver_build_hpoM6l/ini/scini.ko due to unavailability of vmlinux make: Leaving directory '/usr/src/linux-headers-5.15.0-30-generic' 02-Apr-2024 11:46:48 INFO: Success.
SDC init-container
SDC initコンテナは、この機能を使用するように事前構成されています。gcc と make パッケージが含まれており、 /etc/emc/scaleio/scini_sync/.build_scini ファイルが存在します。ただし、コンパイルを成功させるには、ホストカーネルのカーネルヘッダーディレクトリをコンテナにマッピングする必要があります。 /usr/src間のデッドロックが原因で潜在的なHMONタイムアウトが発生する問題が解決されています。たとえば、dockerを使用してコンテナを手動で実行するには、ホストに正しいkernel-develパッケージをインストールした後、 -v/usr/src:/usr/src をコマンドラインに、カーネルヘッダーディレクトリをコンパイルスクリプトで使用できるようにします。
制限事項
ホストのLinuxディストリビューションで使用可能なGCCコンパイラーが、一部のカーネルに対してSDCをコンパイルするのに十分なほど高度でない状況が考えられます。この状況は、おそらくそのディストリビューションに共通するものではなく、カスタムカーネルが関係するため、まれです。この場合、ユーザーは非標準パッケージリポジトリからより高度なGCCをインストールする必要があり、そのGCCの場所を$PATHで指定する必要があります。SDCサービスへの代替GCCパスを自動的に提供する方法はありません。
バージョン
3.6.3以降
4.5.2以降
ビデオの説明