zEnterprise® Data Compression (zEDC) ist eine Lösung für die Beschleunigung der Hardware-und Softwarekomprimierung, die die Geschwindigkeit der Datenkomprimierung auf einigen z/OS® -Systemen erhöhen kann. Wenn Ihre Anwendung Java™ -Komprimierungsservices ausgiebig nutzt, kann zEDC die CPU-Belegung verringern und die Verarbeitungszeiten verkürzen.
Vorbereitende Schritte
Sie benötigen eines der folgenden Hardwaresysteme: IBM® zEnterprise zEC12 GA2, zBC12, z13® oder höher. Weitere Anforderungen hängen von Ihrem Hardwaresystem ab:
- z15® oder höher
- Wenden Sie eines der folgenden PTFs entsprechend Ihrer Version von z/OSan:
- z/OS 2.4: UJ00636
- z/OS 2.3: UJ00635
- z/OS 2.2: UJ00638
Für z/OS 2.5müssen keine zusätzlichen PTFs angewendet werden. Es gibt keine Hardwarevoraussetzungen für Systeme mit z15 oder höher. Die Integrated Accelerator for zEDC -Lösung in diesen Systemen bietet integrierte Datenbeschleunigung, sodass ein separater Adapter nicht mehr benötigt wird.

- z14 oder früher
- Ihr System muss außerdem die folgenden Voraussetzungen erfüllen:
- Ein zEDC Express-Adapter, der in den PCIe-I/O-Schubladen des Hardwaresystems installiert ist.
- Die zEDC -Softwarefunktionalität (ein optionales, bezahltes Feature) muss in einem Parmlib-Member IFAPRDxx aktiviert sein.
Die aktuelle Liste der Voraussetzungen finden Sie in der Dokumentation für Ihre Version von z/OS. Beispiel: Voraussetzungen für zEnterprise Data Compression.
Informationen zu dieser Task
zEDC unterstützt das Komprimierungsformat DEFLATE . Da es sich hierbei um ein Standardformat handelt, können Sie komprimierte oder dekomprimierte Daten zur Dekomprimierung oder Komprimierung auf ein anderes System als IBM Z®übertragen.
zEDC wird von einer IBM zlib-Bibliothek im Paket java.util.zip bereitgestellt. Weitere Informationen zu zEDC, finden Sie in der Dokumentation zu Ihrer z/OS, zum Beispiel: zEnterprise Data Compression (zEDC).
Vorgehensweise
- Nur z14 und früher: Erteilen Sie der Benutzer-ID, die die Java-Anwendung ausführt, Lesezugriff auf die Ressourcenklasse FPZ.ACCELERATOR.COMPRESSION .
Diese Ressourcenklasse ist eine SAF-Ressourcenklasse FACILITY (SAF - System Authorization Facility), die den Zugriff auf den zEDC-Koprozessor regelt. Diese Anforderung gilt nicht für z15 oder höhere Prozessoren.
- Verwenden Sie die UNIX-Umgebungsvariable z/OS , _HZC_COMPRESSION_METHOD, um zu steuern, ob zEDC verwendet wird.
zEDC wird standardmäßig verwendet. Wenn Sie diese Variable auf softwaresetzen, werden stattdessen softwarebasierte Komprimierungsservices verwendet. Wenn Sie einen beliebigen anderen Wert festlegen, wird zEDC verwendet.
- Stellen Sie sicher, dass die z/OS -Eingabepuffer für Ihre Java-Anwendung ausreichend groß sind.
Einige CPU-Ressourcen sind erforderlich, um Daten zur Komprimierung oder Dekomprimierung an die zEDC-Funktion zu senden. Bei kleinen Datenvolumen kann dieser Ressourcenaufwand höher sein als die Einsparungen, die durch die Verwendung von zEDC erreicht werden. Sie können Schwellenwerte für die Daten festlegen, die von " zEDC; komprimiert und dekomprimiert werden. Wenn die Größe der Daten unter dem entsprechenden Schwellenwert liegt, wird stattdessen die Softwarekomprimierung von zlib verwendet:

- z15 und höher
- Verwenden Sie die Umgebungsvariablen _HZC_DEFLATE_THRESHOLD und _HZC_INFLATE_THRESHOLD, um optional den Schwellenwert für die zEDC -Nutzung anzupassen. Gültige Werte in Byte liegen im Bereich von 1 bis 9999999. Beispiel:
_HZC_DEFLATE_THRESHOLD=1 erzwingt die Verwendung von zEDCfür alle Komprimierungsanforderungen mit einer Anfangseingabegröße von mindestens 1 Byte. Wenn diese Umgebungsvariablen nicht festgelegt sind, wird der Standardschwellenwert 1024 für 'deflate' und 'inflate ' verwendet.
- Im Gegensatz zu den Parametern DEFMINREQSIZE und INFMINREQSIZE, die auf z14 oder früheren Systemen verwendet werden, sind die Umgebungsvariablen _HZC_DEFLATE_THRESHOLD und _HZC_INFLATE_THRESHOLD anwendungsspezifisch. Fügen Sie entweder die Variablen zu Ihrer Datei /etc/.profile hinzu, damit sie auf Ihr System angewendet werden, oder legen Sie sie für jede Anwendung fest, in der Sie den Systemstandardschwellenwert für die Datenkomprimierung über Hardware überschreiben möchten.

- z14 und früher
- Mit den Parametern DEFMINREQSIZE und INFMINREQSIZE des Parmlib-Members IQPPRMxx können Sie den Schwellenwert für zEDC -Nutzung steuern. Weitere Informationen finden Sie im Abschnitt zu IQPPRMxx in der Dokumentation zu Ihrer Version von z/OS. Beispiel: IQPPRMxx (PCIE-bezogene Parameter).
Hinweis: Auf Prozessoren des Typs z15 oder höher ist das Parmlib-Member IQPPRMxx in der Konfiguration zulässig. Die Werte für DEFMINREQSIZE und INFMINREQSIZE werden jedoch nicht akzeptiert.
Im Folgenden finden Sie einige Verfahren,
mit denen Sie die aktuelle Puffergröße einer Anwendung bestimmen können:
- Überprüfen Sie den Quellcode.
- Untersuchen Sie das Verhalten der Anwendung, indem Sie einen Trace für sie erstellen (siehe Tracing Java applications in der J9 VM-Referenz) oder sie mit einem Diagnosetool überwachen (siehe Diagnostic tools and data in der J9 VM-Referenz).
- Optional: Nur z14 und früher: Legen Sie die Speichermenge fest, die für z/OS -E/A-Puffer zugeordnet wird.
Die von der zlib-Bibliothek generierten zEDC -Anforderungen verwenden vordefinierte z/OS -E/A-Pufferpools. Die Pufferpools enthalten eine Anzahl Speicherbereiche mit 16 MB, die als
Segmente bezeichnet werden. Sie können die Größe der Pufferpools mithilfe des Parameters MAXSEGMENTS des parmlib-Members IQPPRM
xx festlegen, um die Anzahl der Segmente anzugeben. Der Standardwert lautet 4 (64 MB). Weitere Informationen finden Sie im Abschnitt zu IQPPRMxx in der Dokumentation zu Ihrer Version von z/OS. Beispiel:
IQPPRMxx (PCIE-bezogene Parameter).
Anmerkung: Auf Prozessoren vom Typ z15 oder höher sind diese Puffer nicht erforderlich. Das parmlib-Member IQPPRMxx ist in der Konfiguration weiterhin zulässig, aber die Werte werden nicht akzeptiert.
- Verwenden Sie in Ihrer Java-Anwendung die Klassen und Methoden im Paket java.util.zip , um Daten zu komprimieren und zu dekomprimieren.
Im folgenden Beispiel (das Importe und try/catch-Blöcke ausschließt) wird die Klasse
GZIPOutputStream verwendet, um Daten aus einer Datei zu lesen und komprimierte Daten in eine andere Datei zu schreiben:
// This 64 KB input buffer exceeds the threshold value set by DEFMINREQSIZE, so is elegible for compression by zEDC:
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);
}
}
Ergebnisse
Wenn das System die beschriebenen Voraussetzungen und Bedingungen erfüllt, wird zEDC verwendet. Andernfalls werden für die Datenkomprimierung und -dekomprimierung
softwarebasierte Services verwendet.
Nächste Schritte
Sie können mit dem Befehl D IQP die aktuellen Werte für die zEDC-Parameter anzeigen. Die folgenden Beispiele zeigen die Befehlsausgabe:
z15 oder höher:RESPONSE=S5B
IQP066I 13.20.46 DISPLAY IQP 826
zEDC Information
DEFMINREQSIZE: 1K (STATIC)
INFMINREQSIZE: 1K (STATIC)
Feature Enablement: Enabled

z14 oder früher:RESPONSE=CB8B
IQP066I 05.55.28 DISPLAY IQP 458
zEDC Information
MAXSEGMENTS: 4 (64M)
Previous MAXSEGMENTS: N/A
Allocated segments: 4 (64M)
Used segments: 0 (0M)
DEFMINREQSIZE: 4K
INFMINREQSIZE: 32K
Feature Enablement: Enabled