ハードウェア圧縮アクセラレーションを有効にする (AIX、Linux のみ)

ハードウェア圧縮アクセラレーションを使用して、一部の Power Systems または IBM Z® システムでデータ圧縮および圧縮解除の速度を向上させることができます。 アプリケーションが java.util.zip クラスを使用して Java™ 圧縮サービスを提供する場合、ハードウェア圧縮によって CPU 使用量を削減し、処理時間を短縮することができます。

開始前に

ハードウェア圧縮は PCIe データ圧縮/圧縮解除カードによって行われますが、このカードは、一部のオペレーティング・システムで提供されている Generic Work Queue Engine (GenWQE) デバイス・ドライバーによって駆動されます。 Java アプリケーションでハードウェア圧縮サービスを使用する場合は、システムが以下のソフトウェア要件およびハードウェア要件を満たしている必要があります。
AIX
  • AIX® 7.1、テクノロジー・レベル 3、Service Pack 2 以降
  • GenWQE デバイス・ドライバー。 上記のオペレーティング・システムにはこのドライバーが既に組み込まれています。
  • PCIe3 LP Field Programmable Gate Array (FPGA) アクセラレーター・アダプター
Linux on Power Systems
  • 以下のいずれかのオペレーティング・システム:
    • Red Hat Enterprise Linux® 7 (64 ビット Power Systems 用)
    • サービス・リフレッシュ 1 の変更点の始まりRed Hat Enterprise Linux 7.1 (64 ビット Power Systems (リトル・エンディアン) の場合)サービス・リフレッシュ 1 の変更点の終わり
    • Red Hat Enterprise Linux 7.3 (64 ビット Power Systems (リトル・エンディアン) 用)
  • GenWQE デバイス・ドライバー。 上記のオペレーティング・システムにはこのドライバーが既に組み込まれています。
  • PCIe3 LP Field Programmable Gate Array (FPGA) アクセラレーター・アダプター
Service Refresh 2 フィックスパック 10 の変更点の開始
Linux on IBM Z
  • IBM zEnterprise® zEC12 GA2、 zBC12、 z13、 z14、 サービス・リフレッシュ 6 の変更点の始まりz15 以降サービス更新6の変更点の終わりのいずれかのハードウェア・システム。 その他の要件は、ご使用のハードウェア・システムによって異なります。
サービス・リフレッシュ 6 の変更点の始まり
z15 以降
z15 以降のシステムでは、ハードウェア要件もソフトウェア要件もありません。 これらのシステムにおける Integrated Accelerator for zEDC ソリューションは組み込みデータ・アクセラレーションを提供するため、別のアダプターは必要ありません。
サービス更新6の変更点の終わり
z14 以前
  • 以下のいずれかのオペレーティング・システム:
    • SUSE Linux Enterprise Server System z® 12 以降 SP1
    • サービス・リフレッシュ 3 の変更点の始まりRed Hat Enterprise Linux 7.2 for z Systems ®サービス・リフレッシュ 3 の変更点の終わり
  • GenWQE デバイス・ドライバー。 上記のオペレーティング・システムにはこのドライバーが既に組み込まれています。
  • IBM® zEnterprise zEC12 GA2、 zBC12、 z13、または z14。
  • zEDC Express アダプター (サーバーの PCIe 入出力ドロワーに取り付け)。
注: z14 以前のシステム上のハードウェア圧縮では、 zEDC Express アダプターが使用されますが、これは非推奨になりました。
Service Refresh 2 フィックスパック 10 の変更点の終了

GenWQE, のインストールおよび使用方法の詳細については、 Linux の情報の 「Generic Work Queue Engine ( GenWQE )」の紹介を参照してください。

このタスクについて

データ圧縮アクセラレーションは、Developer Kit Zip ネイティブ・ライブラリーの一部として提供されており、java.util.zip アプリケーション・プログラミング・インターフェースを使用して呼び出すことができます。

手順

  1. z14 以前のみ: 以下の環境変数を設定します。
    export ZLIB_DEFLATE_IMPL=1
    export ZLIB_INFLATE_IMPL=1
    これらの環境変数は、ハードウェア/ソフトウェアの圧縮/圧縮解除を使用するかどうかを指定します。 デフォルトでは、両方の変数が 0 に設定されます。これは、Java アプリケーションの圧縮と圧縮解除の両方にソフトウェア圧縮サービスが使用されることを指定します。
  2. z14 以前のみ: Java アプリケーションの入力バッファーが十分に大きいことを確認してください。

    ハードウェア圧縮アクセラレーターにデータを送信するには、多少の CPU リソースが必要です。 データが少量の場合、このリソース・コストは、ハードウェア圧縮サービスを使用することで達成される節約量を上回ることがあります。 ZLIB_INFLATE_THRESHOLD 変数を使用すれば、ハードウェア圧縮サービスに送信されるデータに対してしきい値を設定できます。 データのサイズがしきい値 (デフォルトは 16 KB) を下回る場合は、ソフトウェア圧縮が代わりに使用されます。

    以下に示すのは、アプリケーションの現在のバッファー・サイズを判別するためのいくつかの方法です。
    • ソース・コードを検査する。
    • アプリケーションをトレースするか (「 J9 VM リファレンス」の「 Java アプリケーションのトレース 」を参照)、またはツールを使用してアプリケーションをモニターすることにより、アプリケーションの動作を調べます。
  3. Java アプリケーションで、 java.util.zip パッケージ内のクラスおよびメソッドを使用して、データを圧縮および圧縮解除します。
    以下の例 (import および try/catch ブロックは除外されています) では、あるファイルからデータを読み取り別のファイルに圧縮データを書き込むために GZIPOutputStream クラスが使用されています。
    // This 64 KB input buffer exceeds the threshold value set by ZLIB_INFLATE_THRESHOLD, 
    // so is elegible for hardware compression:
    byte buffer[] = new byte[64 * 1024];
    byte outputFile[];
    
    input = new FileInputStream(argv[0]);
    output = new ByteArrayOutputStream();
    gzStream = new GZIPOutputStream(output, 4096);
    
    for(;;) {
        // Read data from an uncompressed file:
        readBytes = input.read(buffer);
        if(readBytes < 0) {
            break;
        }
        else {
            // Write data to a compressed file:
            gzStream.write(buffer, 0, readBytes);
        }
    }

結果

ご使用のシステムが、説明にある要件および条件を満たしている場合は、ハードウェア・データ圧縮アクセラレーションが使用されます。 そうでない場合、データ圧縮および圧縮解除には、ソフトウェア・ベースの圧縮サービスが使用されます。

ハードウェア圧縮が対応した Java アプリケーションとハードウェア圧縮が対応していない Java アプリケーションにおける、パフォーマンスの違いを計測したい場合は、以下の環境変数を使用してハードウェア・アクセラレーションを一時的に無効にすることができます。
  • サービス・リフレッシュ 6 の変更点の始まりz15 以降: DFLTCC=0サービス更新6の変更点の終わり
  • z14またはその前:圧縮用ZLIB_DEFLATE_IMPL=0と圧縮解除用 ZLIB_INFLATE_IMPL=0.

問題が発生した場合は、 Power Systems および IBM Z システムでのハードウェア圧縮アクセラレーションの問題 (AIX、 Linux のみ)を参照してください。