PowerFlex:PowerFlex SDCドライバーのオンデマンド コンパイル

Summary: このナレッジベースの記事では、LinuxシステムでPowerFlex SDCドライバーのオンデマンド コンパイルを有効にする方法について説明します。

This article applies to This article does not apply to This article is not tied to any specific product. Not all product versions are identified in this article.

Instructions

この機能は、Linuxカーネルでのアプリケーション バイナリ インターフェイス(ABI)の変更に対応することを目的としています。これにより、別のカーネル用にプリコンパイルされたSDCドライバーのロードに失敗する可能性があります。

従来、Linux(RPM/DEB)用のSDCインストール パッケージには、そのLinuxディストリビューションのさまざまなカーネル用の複数のSDCカーネル モジュールが含まれていました。カーネルのアップデートを頻繁にリリースするUbuntuなどのディストリビューションにインストールするユーザーの場合、SDCドライバーのDellのリモート リポジトリーに接続し、そこからSDCをダウンロードするようにSDCサービスをセットアップするオプションがありました。

この新機能により、ユーザーは、ドライバーのリポジトリー内の一致するSDCの可用性に依存することなく、実行中のカーネルに完全に一致するSDCドライバーをコンパイルできます。

注:自己コンパイル機能は、SDCがサポートされているLinuxシステムでのみサポートされます。詳細については、PowerFlexサポート マトリックスを参照してください。

ターゲット:セキュリティ上の理由からカーネルを頻繁に更新し、特殊なカスタムカーネルを実行するユーザーは、この機能の恩恵を受けることができます。

 

前提条件
コンパイル手順を成功させるには、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ドライバーを手動でコンパイルするには、次の手順を実行します。

  1. コンパイルバンドルをドライバキャッシュ内のディレクトリから一時ディレクトリにコピーします。バンドルの場所は、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
    ドライバー キャッシュの詳細については、以下の「 ドライバー キャッシュ 」を参照してください。

  2. 一時ディレクトリーに移動し、コンパイル バンドルを抽出します。
    Example:

    tar xzf Dell-PowerFlex-scini_builder-3.6.3000.128.x86_64.tgz
  3. Dell Diagnostics(診断)プログラム build_driver.sh scriptは、抽出されたコンテンツの最上位にあります。引数を指定しないと、スクリプトは実行中のカーネル用にドライバーをコンパイルしようとします。
    別のカーネル用にコンパイルするには、そのカーネルのヘッダーディレクトリへのパスに「-o」と「-s" コマンドライン引数を使用します。
    呼び出しの詳細については、次を実行します。

    build_driver.sh -h
  4. コンパイル・プロセスの出力は、標準出力に出力されます。
    コンパイルが正常に完了すると、生成されるSDCドライバー ファイルscini.koが次の場所にあります。 ./ini/scini.ko間のデッドロックが原因で潜在的なHMONタイムアウトが発生する問題が解決されています。

  5. コンパイル ホストからターゲット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以降

ビデオの説明

 

Affected Products

PowerFlex rack, PowerFlex Appliance, PowerFlex Software

Products

PowerFlex custom node
Article Properties
Article Number: 000224134
Article Type: How To
Last Modified: 18 Sep 2024
Version:  6
Find answers to your questions from other Dell users
Support Services
Check if your device is covered by Support Services.