zEnterprise Compactação de dados (somentez/OS )

O zEnterprise® Data Compression (zEDC) é uma solução de aceleração de compactação de hardware e software que pode aumentar a velocidade da compactação de dados em alguns sistemas z/OS® Se seu aplicativo usar serviços de compactação Java™ extensivamente, o zEDC poderá fornecer consumo de CPU reduzido e tempos de processamento mais curtos.

Antes de começar

Você deve ter um dos seguintes sistemas de hardware: IBM® zEnterprise zEC12 GA2, zBC12, z13® ou mais recente. Outros requisitos dependem do sistema de hardware:Início de mudanças no service refresh 6
z15® ou posterior
Aplique uma das seguintes PTFs, de acordo com seu nível de z/OS:
  • z/OS 2.4: UJ00636
  • z/OS 2.3: UJ00635
  • z/OS 2.2: UJ00638
Observe que para o z/OS 2.5, PTFs adicionais não precisam ser aplicadas Não há requisitos de hardware para z15 ou sistemas posteriores. A solução Integrated Accelerator for zEDC nesses sistemas fornece aceleração de dados integrada, portanto, um adaptador separado não é mais necessário..
Término das mudanças para o service refresh 6
z14 ou anterior
Seu sistema também deve ter os seguintes requisitos:
  • Um adaptador zEDC Express, que é instalado nas gavetas de E/S PCIe do sistema de hardware.
  • O recurso de software zEDC (um recurso opcional, pago) deve ser ativado em um membro parmlib IFAPRDxx .
Para obter a lista mais atualizada de requisitos, consulte a documentação para sua versão do z/OS, por exemplo: Requisitos para zEnterprise Compactação de Dados.

Sobre essa tarefa

zEDC suporta o formato de compactação DEFLATE . Como este é um formato padrão, é possível transferir dados compactados ou descompactado para um sistema diferente de IBM Z®, para descompactação ou compactação

zEDC é fornecido por uma biblioteca zlib IBM no pacote java.util.zip . Para obter mais informações sobre o zEDC, consulte a documentação de sua versão do z/OS, por exemplo: zEnterprise Data Compression (zEDC).

Procedimento

  1. z14 e anterior: Conceda acesso READ ao FPZ.ACCELERATOR.COMPRESSION para o ID do usuário que executará o aplicativo Java.
    Essa classe de recurso é uma classe de recurso FACILITY do System Authorization Facility (SAF), que regula o acesso ao coprocessador zEDC. Esse requisito não se aplica a processadores z15 ou mais recentes
  2. Use a variável de ambiente do UNIX do z/OS , _HZC_COMPRESSION_METHOD, para controlar se zEDC é usado.
    Por padrão, o zEDC é usado. Se você configurar essa variável como software, os serviços de compactação baseados em software serão usados no lugar. Se você configurar qualquer outro valor, o zEDC será usado.
  3. Assegure-se de que os buffers de entrada do z/OS para seu aplicativo Java sejam suficientemente grandes.
    Alguns recursos da CPU são necessários para enviar dados para o recurso zEDC para compactação ou descompactação. Para pequenas quantidades de dados, esse custo de recursos pode ser maior que a economia obtida usando o zEDC. Você pode definir valores de limite para os dados que são compactados e descompactados pelo zEDC; se o tamanho dos dados estiver abaixo do limite relevante, será usada a compactação de software zlib:
    Início de mudanças no service refresh 6
    z15 e posterior
    Use as variáveis de ambiente _HZC_DEFLATE_THRESHOLD e _HZC_INFLATE_THRESHOLD para ajustar opcionalmente o limite para o uso do zEDC . Os valores válidos, em bytes, estão no intervalo de 1 a 9999999 Por exemplo, _HZC_DEFLATE_THRESHOLD=1 força todas as solicitações de deflação com um tamanho de entrada inicial de 1 byte ou maior a usar zEDC. Se essas variáveis de ambiente não forem configuradas, o limite padrão de 1024 será usado para esvaziar e inflar.
    Ao contrário dos parâmetros DEFMINREQSIZE e INFMINREQSIZE que são usados em z14 ou sistemas anteriores, as variáveis de ambiente _HZC_DEFLATE_THRESHOLD e _HZC_INFLATE_THRESHOLD são específicas do aplicativo. Inclua as variáveis em seu arquivo /etc/.profile para que elas se apliquem em seu sistema ou configure-as para cada aplicativo no qual você deseja substituir o limite padrão do sistema para compactação de hardware.
    Término das mudanças para o service refresh 6
    z14 e anterior
    Use os parâmetros DEFMINREQSIZE e INFMINREQSIZE do membro parmlib IQPPRMxx para controlar o limite para o uso do zEDC Para obter mais informações, consulte a seção IQPPRMxx na documentação para sua versão do z/OS, por exemplo: IQPPRMxx (parâmetros relacionados ao PCIE)..

    Nota: No z15 ou processadores posteriores, o membro parmlib IQPPRMxx é permitido na configuração, mas os valores DEFMINREQSIZE e INFMINREQSIZE não são aceitos.

    A seguir estão alguns métodos para determinar o tamanho do buffer atual de um aplicativo:
  4. Opcional: z14 e anterior apenas: Configure a quantia de armazenamento que é alocada para buffers de E/S do z/OS .
    As solicitações zEDC geradas pela biblioteca zlib usam buffer pools de E/S do z/OS predefinidos. Os buffer pools contêm várias áreas de armazenamento de 16 MB chamadas segmentos. É possível configurar o tamanho dos buffer pools usando o parâmetro MAXSEGMENTS do membro parmlib IQPPRMxx para especificar o número de segmentos. O valor padrão é 4 (64 MB). Para obter mais informações, consulte a seção IQPPRMxx na documentação para sua versão do z/OS, por exemplo: IQPPRMxx (parâmetros relacionados ao PCIE)..

    Nota: No z15 ou processadores posteriores, esses buffers não são necessários. O membro parmlib IQPPRMxx ainda é permitido na configuração, mas os valores não são aceitos..

  5. Em seu aplicativo Java, use as classes e métodos no pacote java.util.zip para compactar e descompactar dados.
    O exemplo a seguir (que exclui importações e blocos try/catch) usa a classe GZIPOutputStream para ler dados de um arquivo e gravar dados compactados em outro arquivo:
    // 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);
        }
    }

Resultados

Se seu sistema atender aos requisitos e condições descritos, o zEDC será usado. Caso contrário, os serviços de compactação baseados em software serão usados para compactação e descompactação de dados.

O quê fazer em seguida

É possível usar o comando D IQP para visualizar os valores atuais para os parâmetros do zEDC. Os exemplos a seguir mostram a saída de comando:
Início de mudanças no service refresh 6z15 ou posterior:
RESPONSE=S5B                                       
 IQP066I 13.20.46 DISPLAY IQP 826                 
 zEDC Information                                 
  DEFMINREQSIZE:               1K (STATIC)          
  INFMINREQSIZE:               1K (STATIC)         
  Feature Enablement:    Enabled 
Término das mudanças para o service refresh 6
z14 ou anterior:
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