Habilitación de la aceleración de compresión de hardware (solo AIX, Linux)

Puede utilizar la aceleración de compresión de hardware para aumentar la velocidad de compresión y descompresión de datos en algunos sistemas Power Systems o IBM Z® . Si la aplicación utiliza clases java.util.zip para proporcionar servicios de compresión Java™ , la compresión de hardware puede reducir el consumo de CPU y acortar los tiempos de proceso.

Antes de empezar

La compresión de hardware se lleva a cabo mediante una tarjeta de compresión/descompresión de datos PCIe impulsada por el controlador de dispositivos Generic Work Queue Engine (GenWQE) que se proporciona en algunos sistemas operativos. Si desea que las aplicaciones Java utilicen servicios de compresión de hardware, el sistema debe cumplir los siguientes requisitos de software y hardware:
AIX
  • AIX® 7.1, Nivel de tecnología 3, Service Pack 2 o posterior
  • Controlador de dispositivo GenWQE. Los sistemas operaciones antes mencionados incluyen este controlador.
  • Adaptador del acelerador FPGA (Field Programmable Gate Array) PCIe3 LP
Linux on Power Systems
  • Uno de los siguientes sistemas operativos:
    • Red Hat Enterprise Linux® 7 para Power Systems de 64 bits
    • Inicio de cambios para la actualización del servicio 1Red Hat Enterprise Linux 7.1 para Power Systems de 64 bits (Little Endian)Fin de los cambios para la renovación de servicio 1
    • Red Hat Enterprise Linux 7.3 para Power Systems de 64 bits (Little Endian)
  • Controlador de dispositivo GenWQE. Los sistemas operaciones antes mencionados incluyen este controlador.
  • Adaptador del acelerador FPGA (Field Programmable Gate Array) PCIe3 LP
Inicio de los cambios para la renovación de servicio 2 fixpack 10
Linux on IBM Z
  • Uno de los siguientes sistemas de hardware: IBM zEnterprise® zEC12 GA2, zBC12, z13, z14, Inicio de cambios para la actualización del servicio 6z15 o posteriorFin de los cambios para la renovación de servicio 6. Los requisitos adicionales dependen del sistema de hardware:
Inicio de cambios para la actualización del servicio 6
z15 y posteriores
No hay requisitos de hardware o software para los sistemas z15 o posteriores. La solución Accelerator for zEDC en estos sistemas proporciona aceleración de datos integrada, por lo que ya no es necesario un adaptador independiente.
Fin de los cambios para la renovación de servicio 6
z14 y anteriores
  • Uno de los siguientes sistemas operativos:
    • SUSE Linux Enterprise Server para System z® 12 SP1, o posterior
    • Inicio de cambios para la actualización del servicio 3Red Hat Enterprise Linux 7.2 para z Systems ®Fin de los cambios para la renovación de servicio 3
  • Controlador de dispositivo GenWQE. Los sistemas operaciones antes mencionados incluyen este controlador.
  • IBM® zEnterprise zEC12 GA2, zBC12, z13o z14.
  • El adaptador zEDC Express, instalado en los cajones de E/S de PCIe del servidor.
Nota: La compresión de hardware en z14 y sistemas anteriores utiliza el adaptador zEDC Express, que ahora está en desuso.
Fin de los cambios para la renovación de servicio 2 fixpack 10

Para obtener más información sobre la instalación y el uso de GenWQE,, consulte la introducción de Generic Work Queue Engine ( GenWQE ) en la información de Linux.

Acerca de esta tarea

Accelerated Data Compression se suministra como parte de la biblioteca nativa Zip del kit de desarrollador, que se llama mediante la interfaz de programación de aplicaciones java.util.zip.

Procedimiento

  1. z14 y anteriores únicamente: Establezca las siguientes variables de entorno:
    export ZLIB_DEFLATE_IMPL=1
    export ZLIB_INFLATE_IMPL=1
    Estas variables de entorno especifican si se utiliza la compresión de hardware o software. De forma predeterminada, ambas variables se establecen en 0, lo que especifica que los servicios de compresión de software se utilizan tanto para la compresión como para la descompresión de aplicaciones Java.
  2. z14 y anteriores únicamente: Compruebe que los almacenamientos intermedios de entrada para la aplicación Java son suficientemente grandes.

    Es necesario algún recurso de CPU para enviar datos del acelerador de compresión de hardware. Para pequeñas cantidades de datos, el coste de este recurso puede ser mayor que el ahorro que se consigue utilizando servicios de compresión de hardware. Puede establecer un valor de umbral para los datos que deben enviarse a los servicios de compresión de hardware, utilizando la variable ZLIB_INFLATE_THRESHOLD. Si el tamaño de los datos está por debajo del umbral (el valor predeterminado es 16 KB), en su lugar se utiliza la compresión de software.

    Estos son algunos métodos para determinar el tamaño del almacenamiento intermedio actual de una aplicación:
    • Examinar el código fuente
    • Examine el comportamiento de la aplicación rastreándola (consulte Rastreo de aplicaciones Java en la J9 Referencia de VM) o supervisándola con una herramienta.
  3. En la aplicación Java, utilice las clases y métodos del paquete java.util.zip para comprimir y descomprimir datos.
    El siguiente ejemplo (que excluye importaciones y bloques try/catch) utiliza la clase GZIPOutputStream para leer datos de un archivo y grabar datos comprimidos en otro archivo:
    // 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);
        }
    }

Resultados

Si el sistema cumple los requisitos y las condiciones que se describen, se utiliza la compresión de datos de hardware acelerada. En caso contrario, se utilizarán los servicios de compresión basados en software para la compresión y descompresión de datos.

Si desea medir la diferencia del rendimiento para la aplicación Java con y sin compresión de hardware, puede utilizar las siguientes variables de entorno para inhabilitar temporalmente la aceleración de hardware:
  • Inicio de cambios para la actualización del servicio 6z15 o posterior: DFLTCC=0Fin de los cambios para la renovación de servicio 6
  • z14 o anterior: ZLIB_DEFLATE_IMPL=0 para la compresión y ZLIB_INFLATE_IMPL=0 para la descompresión.

Si tiene problemas, consulte Problemas de aceleración de compresión de hardware en Power Systems y sistemas IBM Z (AIX, Linux ).