☕ Um Café no Bellacosa Mainframe
Gostou do conteúdo? Ajude a manter o café quente, o COBOL compilando e o mainframe acordado. 😄
☕ Pague um café ao Bellacosa

Translate

Mostrar mensagens com a etiqueta zIIP. Mostrar todas as mensagens
Mostrar mensagens com a etiqueta zIIP. Mostrar todas as mensagens

sexta-feira, 6 de dezembro de 2024

MIPS, MSU e o Mistério da Conta que Cresce Mais Rápido que o Banco

 


☕ Um Café no Bellacosa Mainframe

MIPS, MSU e o Mistério da Conta que Cresce Mais Rápido que o Banco

Ou: como um programador COBOL iniciante descobre que um PERFORM inocente pode terminar numa reunião com o CFO

Se você está começando em COBOL, provavelmente alguém já lhe contou a versão resumida da história.

O mainframe é grande.

O mainframe é caro.

MIPS é alguma coisa relacionada a capacidade.

MSU é alguma coisa relacionada a cobrança.

E se você mexer num programa errado, algum senhor de barba grisalha aparecerá atrás de você com uma planilha impressa e uma expressão que significa:

— Filho… o que exatamente você colocou em produção ontem?

Essa versão não está completamente errada.

Mas está longe de contar a história inteira.

Porque existe um detalhe fascinante no universo IBM Z: uma linha de código pode ser tecnicamente correta, produzir exatamente o resultado esperado, passar nos testes, não gerar ABEND, não provocar S0C7, não derrubar CICS, não assustar RACF e ainda assim ser economicamente horrível.

E é aqui que nosso jovem gafanhoto COBOL entra no dojo.

Imagine o Sr. Miyagi diante de um terminal 3270.

Ele olha para você e diz:

— Bellacosa-san… programa bom não é programa que apenas funciona.

Você pergunta:

— Então o que é?

Ele aponta para o SMF.

— Programa bom trabalha certo, trabalha rápido e não põe fogo na fatura.

A aula começa.



🥋 1. Primeiro golpe: MIPS não é MSU

Antes de continuar, precisamos desmontar uma confusão muito comum.

MIPS e MSU aparecem frequentemente na mesma conversa, mas não são a mesma coisa.

MIPS significa, historicamente:

Millions of Instructions Per Second.

É uma forma tradicional de falar de capacidade computacional.

Só que em mainframe moderno isso precisa ser tratado com cuidado, porque uma “instrução” não é simplesmente uma moedinha universal que vale a mesma coisa em qualquer processador, geração ou workload.

Duas máquinas podem ter características diferentes.

Dois workloads podem exercitar partes diferentes do processador.

Uma aplicação matemática pesada se comporta de uma forma.

Um workload de transações CICS de outra.

Um batch COBOL gigante de outra.

Por isso, MIPS virou muito mais uma linguagem de capacidade e planejamento — e também, em muitos casos, uma unidade comercial usada por fornecedores de software — do que uma medida física absoluta.

MSU significa:

Million Service Units.

E aqui entramos diretamente no mundo de pricing e capacidade do software IBM Z.

A primeira regra do dojo é esta:

MIPS é normalmente uma conversa sobre capacidade. MSU pode ser uma conversa sobre capacidade, licenciamento e custo.

Mas cuidado.

Não saia por aí tentando converter:

1 MSU = 7,3 MIPS

como se estivesse convertendo quilômetros em milhas.

Não funciona assim.

Não existe uma conversão universal simples.

Se algum colega lhe entregar uma tabela mágica dizendo:

MSU × número secreto = MIPS

faça aquilo que todo programador COBOL experiente faz diante de uma planilha duvidosa:

olhe desconfiado.

Depois peça a fonte.



🧠 2. CPU também não é custo

Aqui vem a segunda rasteira.

O iniciante pensa:

“Se meu programa gastou 10% mais CPU, a empresa pagará 10% mais.”

Não necessariamente.

Você pode gastar mais CPU sem aumentar determinada parte do custo.

Pode gastar a mesma CPU e aumentar a conta.

Pode diminuir CPU e ter pouco impacto financeiro.

Pode simplesmente mudar o horário de execução e alterar completamente o efeito econômico.

Você acabou de conhecer uma das verdades mais importantes do mainframe:

Performance e custo são parentes, mas não são gêmeos.

Isso explica um fenômeno aparentemente absurdo.

Um banco pode crescer 8% em volume de negócio.

O consumo pode crescer 15%.

E a conta de software subir 30%.

O CFO olha para aquilo e pergunta:

— Quem roubou os outros 22%?

Nesse momento todos olham para o mainframe.

O mainframe olha para o teto.

O COBOL olha para o Db2.

O Db2 olha para o batch.

E o batch diz:

— Eu só estava seguindo o JCL.



⏰ 3. Conheça o monstro chamado R4HA

Agora o Sr. Miyagi pega quatro pedras e coloca sobre a mesa.

Cada pedra representa uma hora.

Ele diz:

— Quatro horas. Observe.

Em vários modelos tradicionais de subcapacity pricing existe um conceito muito importante:

Rolling Four-Hour Average, ou R4HA.

Em português informal:

média móvel de quatro horas.

A ideia é simples de entender.

Imagine o consumo:

08h — 70 MSU
09h — 80 MSU
10h — 85 MSU
11h — 90 MSU

Existe uma média para essa janela.

Depois:

09h — 80
10h — 85
11h — 90
12h — 95

Nova janela.

Depois:

10h — 85
11h — 90
12h — 95
13h — 110

E assim por diante.

A janela vai deslizando.

Daí o nome rolling.

Agora vem a parte importante.

Em determinados modelos tradicionais de cobrança, o pico relevante dessa média móvel pode influenciar a capacidade faturável.

E então acontece a tragédia clássica.

Durante o dia:

CICS            70
Db2             40
APIs            20
online geral    15

Tudo administrável.

Às 17h alguém dispara:

fechamento
relatório regulatório
batch contábil
extração de dados
reconciliação
backup lógico

Todos juntos.

Porque sempre foi assim.

Desde 1998.

Ninguém sabe exatamente por quê.

Mas existe um comentário no JCL:

//* NAO ALTERAR - PRODUCAO

E isso, no mainframe, às vezes tem o mesmo poder psicológico de uma placa escrita:

TUMBA DO FARAÓ — NÃO ABRIR.

O consumo dispara.

O banco não ficou três vezes maior.

O mundo não começou a fazer três vezes mais PIX.

Apenas vários workloads decidiram executar simultaneamente.

E aquela concentração pode produzir impacto econômico.

Esse é um dos motivos pelos quais scheduling pode ser tão importante quanto programação.



🎯 4. Primeira lição de ouro: deslocar não é otimizar

Imagine um batch que consome:

60 CPU seconds

Você executa às 17h.

Depois desloca para 02h.

Ele continua consumindo:

60 CPU seconds

Tecnicamente você não otimizou o código.

Não reduziu nenhuma instrução.

Não mexeu no COBOL.

Não mudou Db2.

Não alterou VSAM.

Mas pode ter melhorado a economia do ambiente dependendo do modelo de cobrança.

Isso é lindo porque destrói uma ideia muito comum:

otimização = mexer no programa.

Não.

Você pode otimizar:

  • código;

  • SQL;

  • scheduling;

  • arquitetura;

  • classificação de workload;

  • uso de processadores especializados;

  • política de capacidade;

  • configuração;

  • contrato.

Programador COBOL iniciante costuma enxergar apenas o programa.

Engenheiro mainframe experiente começa a enxergar o sistema inteiro.

Essa é a evolução.



🧾 5. Antes de mexer em qualquer coisa, descubra o contrato

Aqui está uma frase que deveria ser impressa em canecas:

Antes de otimizar o mainframe, descubra como o mainframe está sendo cobrado.

Porque não existe “a conta do mainframe”.

Existem várias contas.

Você pode ter:

hardware
software IBM
software ISV
storage
suporte
DR
licenças por capacidade
licenças por consumo
licenças por MIPS
modelos tradicionais
Tailored Fit Pricing
contratos especiais

E cada parte pode reagir de maneira diferente.

Imagine que você passe uma semana reduzindo um batch em 20%.

Excelente.

Mas descubra depois que aquele componente específico não altera o custo relevante do contrato atual.

Você melhorou performance.

Ótimo.

Só não economizou o que esperava.

Agora faça o contrário.

Você move um workload, altera uma janela de execução e reduz um pico economicamente relevante.

Nenhuma linha COBOL mudou.

E o financeiro percebe o efeito.

Bem-vindo ao mainframe.



🐍 6. O segundo monstro está dentro do seu COBOL

Agora finalmente chegamos à parte que interessa diretamente ao jovem programador.

Imagine este código:

PERFORM UNTIL WS-EOF = 'Y'
    READ ARQUIVO-CLIENTES
    ...
END-PERFORM.

Em 2001 o arquivo tinha:

500.000 registros

Em 2026:

40.000.000 registros

O código não piorou.

Ele é exatamente o mesmo.

Mas o mundo ao redor cresceu.

Isso ensina uma coisa importante:

Código velho pode ficar economicamente pior sem mudar uma única linha.

Não porque o código “apodrece”.

Porque os dados crescem.

Agora imagine coisa pior.

Dentro do loop existe outro acesso:

PERFORM PARA-CADA-CLIENTE
    PERFORM PROCURA-MOVIMENTO
END-PERFORM.

E PROCURA-MOVIMENTO faz uma busca ineficiente.

Talvez você tenha construído algo próximo de:

para cada cliente
    procurar em muitos registros

Com base pequena, aceitável.

Com base enorme, desastre.

Essa é a diferença entre:

funciona

e

escala.

Sr. Miyagi diria:

— Programa que vence teste com mil registros ainda não venceu produção com quarenta milhões.



🗄️ 7. Db2: onde uma linha aparentemente inocente pode virar um incêndio

Agora chegamos ao dojo subterrâneo.

SQL.

Um SQL pode continuar retornando exatamente os mesmos dados, mas consumir muito mais recursos.

Imagine:

SELECT NOME,
       SALDO
FROM CLIENTE
WHERE CPF = :WS-CPF

Ontem o Db2 usava um índice maravilhoso.

Hoje, por alguma mudança de estatística, cardinalidade, distribuição, acesso, manutenção ou desenho, o access path mudou.

Agora ele faz algo muito mais caro.

Uma consulta que custava pouco passa a custar cinco vezes mais CPU.

Uma execução?

Talvez ninguém perceba.

Agora multiplique por:

3.000.000 execuções por dia

A diferença aparece.

E muitas vezes ninguém associa a mudança imediatamente ao custo.

O programa entrou em produção em março.

A conta assustou em junho.

Finanças pergunta em agosto.

Desenvolvimento diz:

— Mas essa alteração foi meses atrás.

Exatamente.

O mainframe tem excelente memória.

Inclusive para as coisas que você gostaria que ele esquecesse.



📚 8. SMF: o livro-caixa secreto do reino

Se você é iniciante, guarde essa sigla:

SMF — System Management Facilities.

Não precisa decorar todos os record types agora.

Mas entenda o conceito.

O z/OS registra uma quantidade fantástica de informações sobre o que acontece no sistema.

Jobs.

Steps.

CPU.

I/O.

Workloads.

Subsistemas.

Consumo.

Horários.

Recursos.

Imagine o SMF como um gigantesco livro de bordo.

O CFO pergunta:

— Quem gastou?

Você não deveria responder:

— Produção.

Isso é o equivalente tecnológico de dizer:

— Foi alguém.

O objetivo é chegar perto disto:

LPAR PROD1
↓
service class X
↓
JOB ABC123
↓
STEP040
↓
programa COB987
↓
package Db2 XYZ
↓
SQL statement específico
↓
execuções aumentaram 300%

Agora temos investigação.

Não opinião.

O dashboard diz:

CPU aumentou.

O SMF ajuda a perguntar:

quem
quando
quanto
onde
por quê

Um mostra a fumaça.

O outro ajuda a encontrar o fósforo.


📈 9. RMF: enxergando a máquina respirando

Outro amigo importante:

RMF — Resource Measurement Facility.

Enquanto SMF oferece registros fundamentais para análise, RMF ajuda profundamente na observação e análise de recursos e performance do ambiente.

Pense assim:

SMF é o livro contábil.

RMF é o estetoscópio.

Você observa:

CPU
LPAR
workload
storage
I/O
delay
utilização

E começa a compreender se o sistema está saudável, pressionado, desequilibrado ou simplesmente executando o que deveria.




🧙 10. WLM: o mestre de cerimônias

Agora entra outro personagem:

WLM — Workload Manager.

O WLM é uma das ideias mais bonitas do z/OS.

Ele não pensa simplesmente:

“todo processo merece CPU igual.”

Ele trabalha com objetivos, importância e classes de serviço.

Porque no mundo real:

transação de cliente

não tem necessariamente a mesma prioridade que:

relatório interno

Um batch pode esperar.

Uma transação bancária olhando para um cliente na tela talvez não possa.

Então WLM ajuda o sistema a responder:

  • qual workload importa mais?

  • qual objetivo precisa ser atendido?

  • quem está atrasado?

  • como distribuir recursos?

  • existe pressão?

  • existem políticas de capacidade?

O iniciante vê CPU.

O WLM vê serviço.

Isso é uma mudança mental importantíssima.



🚀 11. zIIP: nem todo ciclo custa igual

Outro easter egg fundamental para quem está entrando no mundo IBM Z:

zIIP.

Certos tipos de trabalho podem ser elegíveis para execução em processadores especializados.

Isso muda completamente uma análise econômica.

Imagine:

Mês A
CP   = 70
zIIP = 40

Depois:

Mês B
CP   = 90
zIIP = 42

Você pergunta:

— Por que CP cresceu tanto?

Talvez o volume tenha mudado.

Talvez a arquitetura tenha mudado.

Talvez workload antes elegível esteja se comportando de outra maneira.

Talvez exista spillover.

Talvez haja configuração ou concorrência envolvida.

A pergunta correta deixa de ser:

“Quanto CPU usamos?”

e passa a ser:

“Onde o trabalho está sendo executado e qual é a implicação econômica disso?”

Isso é pensamento mainframe maduro.



📱 12. O aplicativo móvel que transformou uma transação em dez

Agora vem uma armadilha moderna.

O banco diz:

— Crescemos apenas 8% em clientes.

Então alguém conclui:

— CPU deveria crescer 8%.

Errado.

Imagine o aplicativo antigo.

Cliente abre o sistema.

Faz:

login
consulta saldo
logout

Três eventos relevantes.

Agora o aplicativo novo abre e dispara silenciosamente:

saldo
limite
PIX
cartões
investimentos
ofertas
notificações
score
extrato
financiamentos

O usuário fez uma ação.

O backend recebeu dez.

O negócio cresceu 8%.

A atividade computacional talvez tenha crescido 40%.

Isso é o que podemos chamar de:

amplificação digital.

A aplicação moderna fica mais bonita.

A UX fica mais rica.

O cliente vê tudo numa tela.

O mainframe recebe uma pequena chuva de APIs.

E depois alguém pergunta por que aumentou o consumo.



🧮 13. Pare de contar apenas transações

Outra lição.

Nem toda transação vale a mesma coisa.

Imagine:

consulta simples VSAM

e:

PIX com antifraude, auditoria, MQ, Db2 e logging

Ambas podem aparecer em algum relatório como:

1 transação

Mas economicamente são bichos diferentes.

Por isso uma organização madura começa a medir:

CPU por 1.000 transações
CPU por PIX
CPU por consulta
CPU por cliente ativo
Db2 CPU por chamada
batch CPU por conta

Essa ideia é poderosa porque aproxima TI do negócio.

Agora o CFO consegue entender.

Em vez de:

— Gastamos 140 MSU.

Você diz:

— O custo computacional por mil transações caiu 6%.

Isso é música para finanças.


💰 14. Nasce o Mainframe Unit Economics

Aqui está uma forma muito boa de pensar.

Crie indicadores como:

CPU segundos / 1.000 transações
MSU / milhão de operações
custo / cliente ativo
custo / PIX
custo / conta processada

Agora compare ao longo do tempo:

          JAN   FEV   MAR   ABR

Volume    100   103   106   108
CPU       100   104   116   130
CPU/txn   100   101   109   120

Veja março.

Alguma coisa aconteceu.

Pergunta Mr. Miyagi:

— O que mudou entre fevereiro e março?

Essa pergunta talvez encontre:

  • novo release;

  • novo relatório;

  • access path Db2 ruim;

  • logging excessivo;

  • API nova;

  • antifraude;

  • rotina duplicada;

  • batch movido;

  • volume inesperado;

  • reprocessamento.

Agora você tem um método investigativo.




📉 15. Custo médio é bom. Custo marginal é melhor.

Existe uma pergunta ainda mais sofisticada:

Quanto custa processar o próximo crescimento do negócio?

Matematicamente:

Δ custo
───────
Δ volume

Imagine:

negócio +10%
consumo +10%

Normal.

Agora:

negócio +10%
consumo +25%

Alerta.

Por outro lado:

negócio +10%
consumo +4%

Talvez você esteja ganhando escala.

Isso é lindo porque destrói outro mito:

“Conta maior significa sistema pior.”

Não.

Você pode gastar mais dinheiro e ficar mais eficiente.

Exemplo:

transações +20%
custo +5%

A conta aumentou.

Mas o custo por transação caiu brutalmente.

O CFO precisa enxergar isso.



⚖️ 16. Nem todo consumo é desperdício

Essa talvez seja uma das lições mais importantes deste artigo.

Existem pelo menos três categorias de crescimento.

1. Consumo necessário

O negócio cresceu.

Mais clientes.

Mais transações.

Mais contas.

Mais pagamentos.

Naturalmente o mainframe trabalha mais.

2. Consumo deliberado

Você adicionou:

antifraude
criptografia
auditoria
compliance
observabilidade
novas funcionalidades

Tudo isso custa CPU.

Mas gera valor.

3. Consumo evitável

Aqui mora o desperdício:

loop desnecessário
SQL ruim
leitura redundante
job duplicado
reprocessamento
programa órfão
batch mal agendado
consulta desnecessária

A missão não é:

reduzir CPU a qualquer custo.

A missão é:

reduzir consumo que não produz valor.

Porque você também pode destruir performance tentando economizar demais.

O sistema economiza 3%.

O cliente passa a esperar.

O SLA vai embora.

Parabéns.

Você economizou CPU e perdeu negócio.

Mr. Miyagi bate com a régua no terminal.

— Não economizar assim.



🧟 17. O job zumbi

Todo ambiente antigo tem algum.

Ninguém sabe quem criou.

Ninguém sabe quem usa.

Executa todo domingo às 03h17.

Nome:

BCHX8712

Comentário:

//* PROCESSO ESPECIAL

Especial para quem?

Mistério.

Tentaram desligar uma vez em 2007.

Alguém telefonou reclamando.

Desde então ninguém mexe.

Esse é o famoso:

job zumbi.

Ambientes mainframe grandes acumulam processos por décadas.

Migrações.

Fusões.

Mudanças regulatórias.

Aplicações substituídas.

Relatórios que ninguém lê.

Interfaces abandonadas.

Por isso um dos melhores projetos de otimização pode não envolver performance.

Pode envolver coragem.

Pergunta:

Quem consome a saída deste job?

Se ninguém souber, não desligue no impulso.

Investigue.

Rastreie.

Valide dependências.

Teste.

Desative controladamente.

Mainframe não gosta de heroísmo sem evidência.



🔍 18. Passo a passo para o jovem programador

Se você está começando agora, siga esta sequência.

Passo 1 — descubra o que seu programa realmente faz

Não leia apenas COBOL.

Entenda:

entrada
processamento
arquivos
Db2
VSAM
MQ
CICS
chamadas externas
saída

Passo 2 — descubra o volume

Pergunte:

Quantas execuções?
Quantos registros?
Quantas transações?
Qual crescimento mensal?

Passo 3 — observe o custo por unidade

Não pense apenas:

programa gastou 200 CPU seconds

Pergunte:

200 CPU seconds para quantos registros?

Passo 4 — procure regressões

Compare versões.

Antes:

10 ms por transação

Depois:

18 ms

Alguma coisa mudou.

Passo 5 — veja SQL

Se usa Db2:

qual access path?
qual frequência?
quantas rows examinadas?
quantas retornadas?

Passo 6 — olhe scheduling

Seu job executa quando?

Ele compete com quem?

Existe motivo?

Passo 7 — pergunte sobre WLM

Qual service class?

Qual prioridade?

Qual objetivo?

Passo 8 — correlacione com negócio

Essa aplicação atende:

PIX?
cartões?
clientes?
folha?
fraude?

Passo 9 — documente

Porque seis meses depois alguém perguntará.

E talvez esse alguém seja você.




🕵️ 19. Um exemplo completo

O CFO diz:

— Conta de mainframe subiu 30%.

O time investiga.

Descobre:

crescimento normal do negócio      +8%
novo antifraude                    +5%
nova observabilidade               +3%
SQL regressivo                     +7%
batch concentrado em pico          +4%
processo duplicado                 +2%
outros                             +1%
                                  ----
                                   30%

Agora a conversa mudou.

Dos 30%:

16% = crescimento + capacidade nova
13% = problemas investigáveis/otimizáveis
1%  = ainda desconhecido

Isso é infinitamente melhor do que:

— Mainframe ficou caro.

Agora temos ações.

SQL regressivo?

Corrigir.

Batch?

Reagendar se fizer sentido no modelo econômico.

Processo duplicado?

Eliminar.

Antifraude?

Manter.

Porque aquilo protege o banco.




🧩 20. Easter egg para quem chegou até aqui

Existe uma velha tendência em computação de tentar transformar tudo numa métrica simples.

MIPS.

CPU.

TPS.

latência.

custo.

Mas sistemas complexos odeiam métricas isoladas.

É quase um princípio de Douglas Adams aplicado ao datacenter:

A resposta pode ser 42. O problema é descobrir qual era a pergunta.

Se alguém chegar na reunião dizendo:

— O sistema usa 12.000 MIPS.

A pergunta correta é:

— E daí?

12.000 MIPS pode ser excelente.

Pode ser horrível.

Pode ser barato.

Pode ser caro.

Pode estar processando milhões de transações com eficiência fantástica.

Ou pode estar queimando CPU lendo o mesmo arquivo quinze vezes.

A métrica sem contexto é apenas um número muito bem vestido.



🥋 21. A última lição do dojo

O jovem programador começa querendo aprender:

MOVE
PERFORM
IF
EVALUATE
READ
WRITE
CALL

Depois aprende:

JCL
VSAM
Db2
CICS

Depois entende:

SMF
RMF
WLM
R4HA
zIIP
pricing
capacity

E então acontece uma mudança interessante.

Ele deixa de pensar:

“Meu programa funciona?”

E começa a perguntar:

“Meu programa funciona bem dentro do sistema?”

Depois:

“Meu sistema usa recursos de maneira eficiente?”

E finalmente:

“O custo computacional produzido por esse workload faz sentido para o negócio?”

Nesse ponto você deixou de ser apenas programador COBOL.

Começou a pensar como engenheiro de plataforma.



☕ Epílogo — O CFO, o COBOL e a conta de luz

Voltemos à primeira cena.

Sala de reunião.

CFO na ponta da mesa.

Gráfico na tela.

Ele pergunta:

— Por que o custo do mainframe subiu 30% se o negócio cresceu 8%?

Silêncio.

Antigamente alguém responderia:

— Houve aumento de capacidade.

Hoje uma equipe madura deveria responder:

— Dos 30 pontos, oito correspondem ao crescimento do negócio. Cinco vieram do antifraude novo. Três da observabilidade. Sete são uma regressão Db2 já identificada. Quatro vieram de concentração de workloads numa janela economicamente desfavorável. Dois correspondem a processos redundantes em eliminação. Um ainda estamos investigando.

Agora o CFO entende.

E o mais importante:

confia.

Porque ninguém está defendendo mainframe com religião.

Está defendendo com dados.

Essa é talvez a grande diferença entre o velho discurso:

“Mainframe é caro, mas confiável.”

e o discurso moderno:

“Eu sei exatamente quanto custa, quem consome, por que consome e o que recebemos em troca.”

No fundo, MIPS e MSU não são apenas unidades técnicas.

São pistas.

SMF é a cena do crime.

RMF é o perito.

WLM organiza o trânsito.

Db2 às vezes é o suspeito.

O batch jura inocência.

O COBOL diz que só cumpriu ordens.

O CFO quer saber quem vai pagar.

E em algum canto escuro do datacenter existe um job de 1997 executando toda terça-feira às 02h13 porque alguém escreveu no JCL:

//* NAO REMOVER

Ninguém sabe quem.

Ninguém sabe por quê.

Mas ele continua lá.

Consumindo CPU.

Silenciosamente.

À espera de um jovem gafanhoto suficientemente curioso para perguntar:

— Mestre… isto ainda serve para alguma coisa?

E o Sr. Miyagi do mainframe sorri.

Porque finalmente você fez a pergunta certa.



https://eljefemidnightlunch.blogspot.com/2026/02/o-caso-dos-mips-que-cresceram-tres.html

https://eljefemidnightlunch.blogspot.com/2026/08/o-leilao-reverso-do-conhecimento-quando.html

https://eljefemidnightlunch.blogspot.com/2026/05/o-segredo-sujo-da-performance-no.html

https://eljefemidnightlunch.blogspot.com/2026/05/o-mainframe-nao-esta-lento-seu-sql-e.html

https://eljefemidnightlunch.blogspot.com/2026/03/bellacosa-mainframe-simulator-mainframe.html

terça-feira, 26 de março de 2024

COBOL Multithread no Mainframe: O Lado Quântico da Força no IBM Z

Bellacosa Mainframe e o cobol multithread

COBOL Multithread no Mainframe: O Lado Quântico da Força no IBM Z

Quando o Padawan Descobre que um Programa COBOL Pode Executar Várias Trilhas de Execução Simultaneamente

Por Bellacosa Mainframe

"Seu pai conhecia uma técnica chamada multithreading. Era um poderoso aliado do lado luminoso da CPU, antes que o excesso de serialização o consumisse."

Mestre Sysprog Bellacosa


A Pergunta que Todo Padawan COBOL Faz

Após aprender:

  • CALL

  • Nested Programs

  • Recursividade

  • LE

  • RENT

  • THREADSAFE

surge uma dúvida inevitável.

Mestre...

Um programa COBOL pode criar Threads?

A resposta curta é:

Sim.

Mas...

Não da forma que Java, C++ ou Python fazem.

E aqui começa uma das partes mais interessantes da arquitetura IBM Z.


O mito do COBOL Monothread

Durante décadas, COBOL foi praticamente sinônimo de:

Uma tarefa

↓

Um programa

↓

Um fluxo

↓

Fim

Exemplo:

OPEN

PERFORM

READ

UPDATE

WRITE

CLOSE

STOP RUN

Linear.

Sequencial.

Determinístico.


Era suficiente.

Bancos.

Seguros.

Governo.

Folha pagamento.


Mas IBM Z mudou

Hoje temos:

LPARs

SMT

zIIP

SRB

TCB

OpenMP

POSIX

USS

Java

C++

Metal C

E COBOL começou a participar desse universo.


A resposta correta

Pergunta:

COBOL possui

CREATE THREAD

Não.

Não possui.


Pergunta:

COBOL pode executar multithread?

Sim.

Através do ambiente.


Onde isso é possível?

Basicamente.

USS

Unix System Services


LE

Language Environment


POSIX

pthread


CICS THREADSAFE


Java Integration

JNI


Metal C


Quando surgiu?

LE apareceu.

Década 90.

Posix Threads.

zOS UNIX.

Enterprise COBOL V3.

V4.

V5.

V6.


COBOL 6.5

convive perfeitamente.


O conceito

COBOL não cria.

COBOL participa.


Exemplo.

C cria.

COBOL executa.


Arquitetura

Programa Mestre


↓

pthread_create()


↓

Thread A


↓

COBOL


THREAD-CPF




Thread B


↓

COBOL


THREAD-END




Thread C


↓

COBOL


THREAD-PIX

Como funciona na memória

Cada thread possui:

PCB

TCB

Stack

Registers

PSW

LE Context


Exemplo

Thread 1

Stack

64 KB


Thread 2

64 KB


Thread 3

64 KB


Visualmente

MEMÓRIA



THREAD 1


STACK



THREAD 2


STACK



THREAD 3


STACK




HEAP



SHARED

O ponteiro de execução

Aqui está a magia.

Cada thread possui.

Instruction Pointer

PSW

Program Counter


Exemplo

Thread 1

EXECUTANDO


Linha 500

Thread 2

Linha 200

Thread 3

Linha 950

Todos simultaneamente.


CPU troca.

Dispatch.

Redispatch.


O Scheduler

zOS decide.

Não COBOL.


WLM.

Gerencia.

Prioridade.

Classe.

Importância.


Exemplo real

Sistema anti-fraude.


Thread 1

CPF


Thread 2

PIX


Thread 3

Cartão


Thread 4

IA


Programa pai espera.


Como esperar

Join.


Exemplo conceitual

THREAD CREATE


THREAD CREATE


THREAD CREATE



WAIT

COBOL recebe resultado.


Exemplo com C

Programa C

pthread_create();

Chama COBOL

THREADCPF

COBOL

PROGRAM-ID. THREADCPF.

Executa.


Retorna.


Pode fazer COBOL puro?

Praticamente não.


Enterprise COBOL

não possui.

START THREAD

Não existe.


Alternativa elegante

Múltiplas subtarefas

Batch.


Exemplo.

JOB

STEP1


STEP2


STEP3

Executando em paralelo.


JES2.


Muito usado.


Outra alternativa

CICS

THREADSAFE


Exemplo

Programa

THREADSAFE


Múltiplas tasks.


CICS gerencia.


THREADSAFE

Extremamente importante.


Programa comum

QR TCB


THREADSAFE

L8

T8


Múltiplas CPUs.


Maior throughput.


Cuidados

Working Storage

Perigoso.


Thread 1

WS=100


Thread 2

WS=500


Corrupção.


Melhor

LOCAL STORAGE


Exemplo

LOCAL-STORAGE SECTION.

Cada thread

sua cópia.


Reentrância

Obrigatório.


Programa

RENT


ou

REENTRANT

Sem isso.

Desastre.


Locks

Às vezes necessários.


Variável compartilhada.


Thread 1

incrementa


Thread 2

incrementa


Resultado errado.


Exemplo

100

esperado


Recebe

98


Race condition.


Segurança

Ataques possíveis.


Deadlock.


Starvation.


Race.


Stack exhaustion.


DoS.


Exemplo

Thread A

espera B


B espera C


C espera A

Fim.


Parado.


Performance

Depende.


CPU bound

Excelente.


I/O bound

Média.


DB2

Depende.


VSAM

Depende.


Locking.


zIIP

Grande vantagem.


LE

Java

XML

podem usar.


Economia MIPS.


Curiosidade

Maioria dos programas COBOL bancários.

Ainda.

Monothread.


Porque.

São rápidos.

Determinísticos.

Confiáveis.


Exemplo Arquitetura Moderna

MASTER


│


├── Thread CPF


├── Thread PIX


├── Thread AML


├── Thread IA


└── Thread LOG

Master acompanha.


Tabela.

THREAD-ID


STATUS


RC

Exemplo

001


RUNNING


002


ENDED


003


WAIT

Master coleta.


Merge.


Retorna.


Pode valer a pena?

Sim.

Análise fraude.

OCR.

JSON.

IA.

APIs.

Criptografia.

Scoring.


Não.

Leitura sequencial.

Sort.

Folha pagamento.

Batch tradicional.


O conselho do Mestre Bellacosa

Multithreading em COBOL no IBM Z é quase como pilotar um caça estelar experimental escondido em um hangar do datacenter. O motor existe, a tecnologia é impressionante, mas ela não foi colocada diretamente no painel de instrumentos do programador COBOL.

O COBOL clássico continua sendo uma linguagem essencialmente sequencial. Entretanto, quando combinado com Language Environment, POSIX Threads, USS, CICS THREADSAFE, Java ou Metal C, ele passa a habitar um universo onde dezenas de trilhas de execução podem coexistir dentro do mesmo endereço de memória, cada uma com seu próprio stack, contexto LE, PSW e ponteiro de instrução.

O verdadeiro Padawan precisa entender uma lição importante:

O programa COBOL não é o Mestre dos Threads.

Ele é um guerreiro altamente especializado convocado para executar missões dentro de um ecossistema que o IBM Z já domina há décadas.

E talvez essa seja a maior beleza do mainframe moderno: ele consegue executar milhões de transações por segundo, milhares de tarefas concorrentes e dezenas de linguagens diferentes, enquanto um antigo programa COBOL escrito há trinta anos continua processando registros tranquilamente, como um velho Mestre Jedi que já viu muitas gerações de processadores nascerem e desaparecerem na galáxia IBM Z.


sexta-feira, 8 de dezembro de 2023

24 Horas no Bellacosa Mainframe: Jack Bauer, COBOL e a API que precisava entrar no CICS antes que o relógio chegasse a zero graças ao Zos Connect

 

Bellacosa Mainframe e o zos connect

☕ Um Café no Bellacosa Mainframe

24 Horas no Bellacosa Mainframe: Jack Bauer, COBOL e a API que precisava entrar no CICS antes que o relógio chegasse a zero

⏱️ z/OS Connect, REST, JSON, OpenAPI, CICS, IMS, Db2, RACF, SAF, zIIP, OpenTelemetry e o estranho caso em que Jack Bauer descobriu que reescrever 35 anos de COBOL levaria um pouco mais de 24 horas

03:17:42

O telefone toca.

Isso nunca é bom.

Especialmente quando você trabalha com mainframe.

Do outro lado da linha alguém pronuncia aquelas palavras capazes de provocar mais medo em um programador COBOL do que S0C7, SOC4, deadlock no Db2 e café descafeinado juntos:

— Precisamos modernizar o legado.

Silêncio.

O relógio aparece na tela.

03:17:43
03:17:44
03:17:45

Você olha para o terminal 3270.

O CICS está funcionando.

O Db2 está funcionando.

O programa COBOL que consulta clientes está funcionando há décadas.

Milhões de transações passaram por ele.

Então surge a pergunta que deveria ser feita antes de qualquer projeto de modernização:

Se funciona, por que exatamente queremos reescrevê-lo?

Do outro lado alguém responde:

— Porque precisamos acessar isso pelo aplicativo mobile.

Jack Bauer entra na sala.

Olha para o COBOL.

Olha para o arquiteto.

Olha para o relógio.

E diz:

— Então vocês não precisam reescrever o COBOL. Precisam de uma API.

TIC. TIC. TIC. TIC.

Bem-vindo ao mundo do IBM z/OS Connect.

Pegue o café.

Temos 24 horas para colocar REST, JSON e OpenAPI diante de um programa COBOL que nasceu quando ninguém imaginava que um telefone serviria para fazer transferências bancárias.


⏱️ 04:00 — O problema nunca foi necessariamente o COBOL

Imagine que nosso banco fictício possui um programa chamado:

CLIENTE

Ele recebe:

01 CLIENTE-REQUEST.
   05 CLIENTE-ID       PIC 9(09).

E devolve:

01 CLIENTE-RESPONSE.
   05 CLIENTE-NOME     PIC X(40).
   05 CLIENTE-LIMITE   PIC 9(09)V99.
   05 CLIENTE-STATUS   PIC X(01).

Nada particularmente revolucionário.

Talvez esse programa execute dentro do CICS e consulte Db2.

Durante décadas alguma aplicação tradicional soube perfeitamente como conversar com ele.

Então chega uma equipe responsável pelo novo aplicativo mobile.

Ela não sabe o que é:

COMMAREA
EBCDIC
PIC X
PIC 9
COMP
COMP-3
EXEC CICS LINK
TSO
ISPF
3270

E existe uma boa notícia:

ela provavelmente não precisa saber.

A aplicação mobile quer algo como:

GET /clientes/123456789

e espera receber:

{
  "id": 123456789,
  "nome": "JOAO DA SILVA",
  "limite": 15000.00,
  "status": "ATIVO"
}

Aqui aparece o problema arquitetural.

Não temos necessariamente um sistema antigo incapaz de executar a regra de negócio.

Temos dois mundos falando idiomas diferentes.

De um lado:

HTTP
REST
JSON
OpenAPI
OAuth
JWT
Cloud
Mobile
Microservices

Do outro:

COBOL
CICS
IMS
Db2
copybooks
SAF
RACF

Jack Bauer olha para os dois lados.

— Precisamos de um tradutor.

É aqui que entra o IBM z/OS Connect.


⏱️ 05:00 — Afinal, o que diabos é z/OS Connect?

Para um COBOLzeiro começando agora, eu gosto desta definição:

IBM z/OS Connect é uma camada de integração que permite disponibilizar recursos e aplicações do z/OS através de APIs REST e também permite que aplicações z/OS consumam APIs externas.

Leia novamente a última parte.

Porque ela é frequentemente esquecida.

Não existe apenas:

MUNDO MODERNO
      │
      ▼
     API
      │
      ▼
 MAINFRAME

Também pode existir:

 MAINFRAME
      │
      ▼
     API
      │
      ▼
MUNDO EXTERNO

Esses dois caminhos nos levam a dois conceitos fundamentais:

API PROVIDER
API REQUESTER

Guarde esses nomes.

Jack Bauer certamente guardaria.

Ele só não teria tempo de anotá-los.


⏱️ 06:00 — API Provider: quando o mundo bate à porta do CICS

O API Provider resolve aproximadamente este cenário:

Mobile
   │
Web
   │
Cloud
   │
   ▼
REST / JSON
   │
   ▼
z/OS Connect
   │
   ▼
CICS / IMS / Db2
   │
   ▼
COBOL

Imagine novamente nosso programa de consulta de clientes.

O aplicativo envia:

GET /clientes/123456789

z/OS Connect recebe essa requisição.

Ele possui informações suficientes para entender que aquela operação está relacionada a determinado serviço no mainframe.

O JSON pode ser transformado para a estrutura esperada pelo programa.

O programa COBOL executa.

Depois acontece o caminho inverso:

COBOL
   │
estrutura tradicional
   │
   ▼
z/OS Connect
   │
JSON
   ▼
aplicação

Perceba a beleza arquitetural.

O COBOL não precisa acordar numa segunda-feira e dizer:

“A partir de hoje sou desenvolvedor REST.”

Ele continua fazendo aquilo para o qual foi criado.


⏱️ 07:00 — Não estamos transformando COBOL em REST

Essa diferença parece pequena, mas é gigantesca.

Uma simplificação perigosa seria dizer:

COBOL → REST

Não.

O programa COBOL continua sendo COBOL.

Estamos criando uma interface moderna para uma capacidade existente.

Pense assim:

             CONTRATO
              OpenAPI
                 │
                 ▼
            REST / JSON
                 │
                 ▼
          z/OS Connect
                 │
        mapping / routing
                 │
                 ▼
        estrutura COBOL
                 │
                 ▼
              CICS
                 │
                 ▼
              COBOL

Isso nos leva a uma das ideias mais importantes deste café:

Modernização não significa necessariamente reescrita.

Às vezes modernizar significa tornar acessível aquilo que já funciona.


⏱️ 08:00 — A reunião em que alguém quer reescrever tudo

Você conhece a cena.

Sala de reunião.

PowerPoint.

Café ruim.

Alguém aponta para um desenho cheio de caixas coloridas e diz:

— Temos que eliminar o legado.

Pergunte:

— Por quê?

Talvez a resposta seja:

— Porque precisamos disponibilizar consulta de saldo no celular.

Mas o programa de consulta de saldo funciona?

— Sim.

Está performando?

— Sim.

É confiável?

— Sim.

Possui décadas de regras de negócio?

— Sim.

Então talvez o problema não seja:

CONSULTAR-SALDO

Talvez o problema seja somente:

COMO ACESSAR CONSULTAR-SALDO

São problemas completamente diferentes.

Reescrever pode ser necessário em alguns casos.

Mas não deveria ser automaticamente sinônimo de modernização.


⏱️ 09:00 — O tesouro escondido dentro daquele COBOL feio

Aqui mora uma coisa que os novatos precisam aprender cedo.

Você abre um programa de 15 mil linhas.

Encontra:

IF WS-CODIGO = 37
   AND WS-TIPO = 'X'
   AND WS-DATA < 19981231
      MOVE 'S' TO WS-EXCECAO
END-IF

Sua primeira reação pode ser:

— Que porcaria é essa?

Calma.

Talvez esse IF exista porque:

  • uma lei mudou;

  • houve uma fusão bancária;

  • determinado produto foi descontinuado;

  • aconteceu um incidente em produção;

  • alguma regra fiscal antiga precisa continuar sendo respeitada;

  • existem contratos históricos;

  • alguém descobriu uma exceção em 1999.

Código legado não contém apenas instruções.

Ele contém arqueologia empresarial.

Às vezes aquelas linhas horrorosas são conhecimento institucional fossilizado.

O perigo da reescrita é acreditar que compreendemos tudo simplesmente porque entendemos a sintaxe.


⏱️ 10:00 — OpenAPI entra na CTU

O próximo personagem da história é o OpenAPI.

Podemos pensar nele como um contrato descrevendo nossa API.

Por exemplo:

paths:
  /clientes/{id}:
    get:
      summary: Consulta cliente
      parameters:
        - name: id
          in: path
          required: true

Ele documenta coisas como:

endpoint
método HTTP
parâmetros
estrutura de entrada
estrutura de saída
códigos de resposta

Isso permite que diferentes equipes compartilhem um contrato comum.

O desenvolvedor mobile não precisa perguntar:

— Qual é o offset do campo CLIENTE-ID na COMMAREA?

Ele pergunta:

— Qual é o contrato da API?

Essa mudança cultural é enorme.


⏱️ 11:00 — O copybook encontra JSON

Agora chegamos a uma das partes mais interessantes.

No mainframe podemos encontrar:

01 CUSTOMER-DATA.
   05 CUSTOMER-ID      PIC 9(09).
   05 CUSTOMER-NAME    PIC X(40).
   05 CUSTOMER-BALANCE PIC S9(9)V99 COMP-3.

No universo web:

{
  "customerId": 12345,
  "customerName": "MARIA",
  "customerBalance": 3450.25
}

Veja o abismo cultural.

O frontend não quer saber que COMP-3 existe.

Aliás, se você explicar packed decimal durante a daily do React, talvez seja expulso da reunião.

O z/OS Connect pode participar justamente da transformação entre esses formatos.

Conceitualmente:

JSON
 ↓
mapping
 ↓
estrutura nativa
 ↓
COBOL
 ↓
estrutura nativa
 ↓
mapping
 ↓
JSON

E isso é maravilhoso porque preserva uma regra fundamental:

não obrigue todas as aplicações da empresa a conhecer os detalhes internos umas das outras.


⏱️ 12:00 — API Requester: plot twist!

Metade da temporada passou.

Hora da reviravolta.

Até agora o mundo estava chamando o mainframe.

Mas e se o COBOL precisar chamar o mundo?

Imagine um programa bancário precisando consultar uma cotação externa.

A API moderna oferece:

GET /exchange/USD/BRL

Resposta:

{
  "currency": "USD",
  "rate": 5.42
}

Agora temos:

COBOL
  │
  ▼
z/OS Connect
  │
  ▼
REST / JSON
  │
  ▼
API EXTERNA

É o API Requester.

Isso muda muito a percepção do mainframe.

Ele deixa de ser apenas:

“a máquina que os outros sistemas chamam”.

Também pode tornar-se consumidor de serviços modernos.


⏱️ 13:00 — Provider e Requester juntos

Agora nosso desenho fica muito mais interessante:

                    API PROVIDER

Mobile / Cloud ─── REST ───► z/OS Connect
                                  │
                                  ▼
                           CICS / IMS / Db2
                                  │
                                  ▼
                                COBOL
                                  │
                                  │
                           API REQUESTER
                                  │
                                  ▼
                              REST API
                                  │
                                  ▼
                         Serviço externo

Isso é integração bidirecional.

O mainframe deixa de parecer uma ilha.

Ele passa a participar da arquitetura distribuída da empresa.


⏱️ 14:00 — Mas espere: INTERNET → COBOL?

Jack Bauer para no corredor.

Olha para você.

— Você colocou a internet na frente da minha transação bancária?

Boa pergunta.

Porque API sem segurança é apenas uma maneira moderna de criar um incidente.

Aqui entram mecanismos como:

TLS
JWT
SAF
RACF
autenticação
autorização
controle por operação

A ideia não deveria ser:

INTERNET
   │
   ▼
COBOL

Mas algo conceitualmente muito mais parecido com:

REQUEST
   │
   ▼
TLS
   │
   ▼
AUTENTICAÇÃO
   │
   ▼
AUTORIZAÇÃO
   │
   ▼
z/OS Connect
   │
   ▼
SAF / RACF
   │
   ▼
RECURSO

O velho castelo ganhou uma porta moderna.

Não removemos os guardas.


⏱️ 15:00 — Autorização granular

Existe uma diferença importante entre:

VAGNER PODE ACESSAR A API

e:

VAGNER PODE EXECUTAR ESTA OPERAÇÃO?

Considere:

GET /contas/123

versus:

POST /transferencias

Consultar saldo e transferir dinheiro são operações completamente diferentes.

Em segurança empresarial queremos aproximar-nos do princípio:

least privilege

Ou seja:

conceder apenas aquilo que determinado usuário ou identidade realmente necessita.

Isso também mostra por que API modernization não é simplesmente instalar um servidor HTTP na LPAR e comemorar.

Existe arquitetura por trás.


⏱️ 16:00 — O telefone toca novamente

— Jack, a API está lenta.

Pronto.

Começou a produção.

Agora precisamos responder:

onde estão os 800 milissegundos?

Pode ser:

Mobile
  ↓
rede
  ↓
API Gateway
  ↓
z/OS Connect
  ↓
CICS
  ↓
COBOL
  ↓
Db2

Sem observabilidade, todos apontam para o vizinho.

O pessoal web:

— Mainframe está lento.

O mainframe:

— Aqui está normal.

A rede:

— Não é comigo.

O DBA:

— A query levou 2 ms.

E assim nasce uma war room de oito horas.


⏱️ 17:00 — OpenTelemetry encontra SMF

O universo moderno fala muito em:

metrics
logs
traces
OpenTelemetry
Prometheus
Grafana

O mainframe possui sua própria tradição de observabilidade:

SMF
RMF
CICS statistics
CICS monitoring
logs

z/OS Connect vive justamente numa região onde esses universos podem se encontrar.

E existe algo poeticamente maravilhoso nisso.

A turma cloud-native descobre distributed tracing.

O velho sysprog toma um gole de café e responde:

— Interessante. Nós também gostamos de saber para onde foi nosso CPU desde antes de você nascer.

Easter egg número 1: nunca diga a um sysprog veterano que observabilidade foi inventada junto com Kubernetes.

Você poderá assistir a uma palestra improvisada de quatro horas sobre SMF.


⏱️ 18:00 — E aquele papo de 99% no zIIP?

Aqui precisamos impedir um pequeno atentado conceitual.

Você poderá ler que mais de 99% do processamento relacionado ao z/OS Connect pode ser elegível para zIIP em determinadas condições de execução nativa.

Então alguém inevitavelmente concluirá:

“Excelente! 99% do meu COBOL vai para zIIP!”

NÃO.

Jack Bauer bate na mesa.

O relógio para durante dois segundos dramáticos.

A afirmação refere-se ao processamento do z/OS Connect, não magicamente a toda carga que existe atrás dele.

Pense:

HTTP processing
JSON transformation
z/OS Connect runtime
        │
        └────► alta elegibilidade zIIP

Depois:

CICS
COBOL
Db2
outros componentes

possuem suas próprias características e regras.

Esse detalhe é fundamental quando alguém começa a transformar arquitetura técnica em planilha financeira.


⏱️ 19:00 — Containers chegam ao mainframe

Outra surpresa para quem pensa que mainframe significa somente:

JCL + STARTED TASK + 3270

O ecossistema moderno do z/OS Connect também contempla deployment containerizado em cenários suportados.

Entram conceitos como:

OCI containers
OpenShift
z/OS Container Extensions
IBM Z

Ou seja, podemos encontrar arquiteturas muito diferentes.

Mas cuidado.

Não conclua:

“Então qualquer componente pode ser colocado em qualquer lugar.”

Características, features e restrições podem variar conforme o modelo de implantação e versão.

Regra do velho Bellacosa:

Antes de transformar um slide de arquitetura em implementação, leia a documentação da versão que realmente será instalada.

Essa frase evita mais incidentes que muita ferramenta cara.


⏱️ 20:00 — E IBM MQ?

Aqui mora outra armadilha interessante.

Em material introdutório é comum vermos juntos:

CICS
IMS
Db2
IBM MQ

Mas suporte depende da feature e geração utilizada.

O ecossistema histórico do z/OS Connect possui diferenças entre gerações e recursos.

Portanto:

“z/OS Connect suporta X” não é uma informação completa sem perguntar versão, feature e cenário.

Isso vale para MQ e praticamente qualquer produto empresarial com anos de evolução.

Easter egg número 2: em mainframe, a resposta para “isso é suportado?” frequentemente começa com:

“Depende do release.”

Se alguém responder imediatamente “sim” sem perguntar versão, comece a ficar desconfiado.


⏱️ 21:00 — API Management não é z/OS Connect

Outra confusão clássica.

Podemos ter:

CONSUMIDORES
     │
     ▼
API MANAGEMENT
     │
     ▼
z/OS Connect
     │
     ▼
CICS / IMS / Db2

API Management pode cuidar de coisas como:

catálogo
lifecycle
analytics
policies
plans
governança
consumidores

z/OS Connect possui foco específico na integração entre APIs e recursos z/OS.

São papéis complementares.

Pense num aeroporto.

API Management administra boa parte da relação com passageiros, rotas, regras e portas.

z/OS Connect é o intérprete altamente especializado que sabe conversar com aquela aeronave de 300 toneladas chamada CICS.


⏱️ 22:00 — Passo a passo mental para criar nossa API

Vamos montar uma operação conceitual.

Temos:

Programa: CLIENTE
Ambiente: CICS
Entrada: CLIENTE-ID
Saída:
   CLIENTE-NOME
   CLIENTE-LIMITE
   CLIENTE-STATUS

Passo 1 — Descubra a capacidade de negócio

Não comece pelo REST.

Pergunte:

O que esse programa realmente faz?

Resposta:

CONSULTAR CLIENTE

Passo 2 — Entenda entrada e saída

Localize copybooks e estruturas.

05 CLIENTE-ID PIC 9(09).

Saída:

05 CLIENTE-NOME   PIC X(40).
05 CLIENTE-LIMITE PIC 9(09)V99.
05 CLIENTE-STATUS PIC X.

Passo 3 — Pense na API como contrato

Por exemplo:

GET /clientes/{id}

Passo 4 — Defina representação externa

{
   "id": 123,
   "nome": "MARIA",
   "limite": 8000.00,
   "status": "ATIVO"
}

Passo 5 — Configure o mapping

Conceitualmente:

id
   ↕
CLIENTE-ID

nome
   ↕
CLIENTE-NOME

limite
   ↕
CLIENTE-LIMITE

Passo 6 — Configure segurança

Pergunte:

Quem chama?
Como autentica?
Qual identidade chega ao z/OS?
Qual operação pode executar?
Qual recurso SAF protege?

Passo 7 — Teste

Não teste somente:

HTTP 200

Teste também:

dados inválidos
cliente inexistente
timeout
indisponibilidade CICS
falha Db2
credencial inválida
usuário sem autorização
campos limites
concorrência
volume

Passo 8 — Observe

Descubra antes da produção:

latência
throughput
CPU
zIIP
erros
timeouts
dependências

Passo 9 — Documente

OpenAPI não deveria ser decoração.

É parte do contrato entre equipes.

Passo 10 — Só então coloque Jack Bauer de plantão

Preferencialmente não coloque.

Se precisarmos dele, alguma coisa já deu muito errado.


⏱️ 23:00 — O verdadeiro significado de modernização

Agora chegamos à parte que considero mais importante.

Existe uma narrativa confortável:

VELHO = RUIM
NOVO = BOM

Computação real não funciona assim.

Um programa COBOL criado em 1992 pode estar executando uma regra crítica perfeitamente.

Uma aplicação criada há seis meses em Kubernetes pode ser uma catástrofe arquitetural.

Idade não é qualidade.

Tecnologia nova não é automaticamente modernização.

A pergunta deveria ser:

Que problema de negócio estamos tentando resolver?

Se o problema for:

“Precisamos disponibilizar capacidades do mainframe para novos canais.”

Talvez a resposta seja integração.

Não reescrita.


⏱️ 23:42 — O castelo Bellacosa

Imagine o mainframe como um castelo gigantesco.

Dentro dele vivem:

COBOL
CICS
IMS
Db2
RACF
JES2

Durante décadas quem quisesse entrar precisava conhecer os costumes locais:

3270
TSO
ISPF
JCL
copybook
COMMAREA
EBCDIC

Então construímos uma recepção moderna.

Na porta está escrito:

HTTPS
REST
JSON
OpenAPI

O visitante chega.

— Quero consultar a conta 123.

Ele envia:

GET /accounts/123

A recepção entende.

Traduz.

Entra no castelo.

O velho COBOL recebe sua estrutura.

Executa.

Consulta Db2.

Devolve os dados.

A recepção traduz novamente.

O visitante recebe:

{
   "account": 123,
   "balance": 8542.71
}

E vai embora.

Ele nunca soube que CICS existia.

E o CICS nunca precisou aprender React.

Isso é desacoplamento.


⏱️ 23:50 — A curiosidade que muda tudo

Perceba uma consequência filosófica interessante.

Uma aplicação pode ter:

30 anos de idade

e possuir uma interface criada ontem.

Portanto:

A idade da implementação não determina a idade da interface.

Essa frase merece ficar colada perto do monitor.

Podemos ter:

React
   │
REST
   │
API Gateway
   │
z/OS Connect
   │
CICS
   │
COBOL
   │
Db2

Qual é a idade desse sistema?

2026?

2015?

2002?

1989?

A resposta correta talvez seja:

todas elas.

Sistemas empresariais são cidades.

Não são casas.

Uma cidade possui prédios de 1890, metrô de 1970, fibra óptica de 2025 e alguém pagando café pelo celular dentro de um edifício construído quando telefone ainda tinha fio.

Ninguém diz:

“Precisamos demolir Lisboa porque algumas construções são antigas.”

Integramos.

Restauramos.

Substituímos onde necessário.

Preservamos onde faz sentido.


⏱️ 23:55 — Cinco dicas do velho COBOLzeiro

Se você está começando em COBOL e z/OS Connect, guarde estas ideias.

1. Aprenda HTTP e REST.

Você não precisa virar desenvolvedor frontend, mas precisa entender:

GET
POST
PUT
DELETE
headers
status codes
JSON
TLS

2. Aprenda OpenAPI.

O contrato é parte central desse novo mundo.

3. Continue estudando COBOL profundamente.

API nenhuma elimina a necessidade de entender aquilo que existe atrás dela.

4. Aprenda segurança.

Especialmente:

SAF
RACF
TLS
JWT
identidade
autenticação
autorização
least privilege

5. Aprenda observabilidade.

Porque depois do primeiro:

HTTP 200 OK

virá inevitavelmente:

“Por que demorou 1,7 segundo?”

E alguém precisará descobrir.


⏱️ 23:58 — O último plot twist

Jack Bauer finalmente encontra o responsável pelo incidente.

Não era o COBOL.

Não era o CICS.

Não era o Db2.

Não era RACF.

Era uma aplicação distribuída fazendo 47 chamadas redundantes para a mesma API para montar uma única tela.

O sysprog olha para Jack.

Jack olha para o sysprog.

O sysprog pergunta:

— Quer café?

— Quanto tempo temos?

00:01:42

— Dá.


⏱️ 23:59 — O relógio chega ao fim

Agora podemos resumir toda nossa arquitetura:

                     IBM z/OS CONNECT
                            │
             ┌──────────────┴──────────────┐
             │                             │
             ▼                             ▼

        API PROVIDER                  API REQUESTER

      mundo → z/OS                   z/OS → mundo

       REST/JSON                         COBOL
           │                               │
           ▼                               ▼
     z/OS Connect                    z/OS Connect
           │                               │
           ▼                               ▼
   CICS / IMS / Db2                  REST APIs
           │                               │
           ▼                               ▼
         COBOL                       Cloud / SaaS

Ao redor disso existem:

OpenAPI
mapping
security
SAF
RACF
TLS
JWT
OpenTelemetry
SMF
zIIP
containers
OpenShift
API Management
DevOps

Mas existe uma ideia ainda maior envolvendo tudo isso:

MODERNIZAÇÃO
      │
      ▼
não significa obrigatoriamente
      │
      ▼
REESCRITA

Modernização pode significar:

PRESERVAR
    │
    ▼
CAPACIDADES DE NEGÓCIO
    │
    ▼
DESACOPLAR
    │
    ▼
EXPOR POR CONTRATOS MODERNOS
    │
    ▼
INTEGRAR
    │
    ▼
EVOLUIR

☕ Epílogo — 00:00:00

O relógio finalmente chega a zero.

A API está funcionando.

O aplicativo mobile consulta o cliente.

O request entra como REST.

z/OS Connect recebe JSON.

A estrutura chega ao CICS.

O programa COBOL executa.

Db2 responde.

A informação volta.

O usuário vê seu saldo no smartphone.

Ele toca na tela e reclama:

— Nossa, tecnologia moderna é incrível.

No datacenter, silenciosamente, um programa COBOL escrito quando Windows 3.1 era novidade acabou de fazer o trabalho pesado.

Ele não recebeu aplausos.

Não apareceu no aplicativo.

Ninguém colocou seu nome na keynote.

Ele simplesmente executou outra transação.

Como fez milhões de vezes.

Jack Bauer fecha o notebook.

O operador olha para a console.

CICS STATUS: ACTIVE

Tudo normal.

Então o velho COBOLzeiro toma o último gole de café e deixa uma anotação para o turno seguinte:

Não confundam modernização com demolição. Às vezes o sistema não precisa de um coração novo. Precisa apenas de uma porta nova.

Na porta está escrito:

REST
JSON
OpenAPI

Atrás dela continua existindo:

PROCEDURE DIVISION.

    PERFORM PROCESSAR-NEGOCIO.

    GOBACK.

00:00:01

O telefone toca novamente.

— Temos outro problema.

— Qual?

— Agora querem colocar IA acessando a API.

O COBOLzeiro olha para Jack Bauer.

Jack Bauer olha para o relógio.

O relógio começa novamente:

24:00:00
23:59:59
23:59:58...

E em algum lugar muito distante do CPD alguém abre um PowerPoint chamado:

AI MAINFRAME MODERNIZATION
FINAL_v7_REAL_FINAL_AGORA_VAI.pptx

O operador suspira.

— Passa o café.

Easter egg final: se você trabalha em TI há tempo suficiente, sabe que o arquivo FINAL_v7_REAL_FINAL_AGORA_VAI jamais é a versão final.

E talvez essa seja a única constante mais confiável que o próprio mainframe.

sábado, 18 de fevereiro de 2023

☕ CSI: New York Entra no Data Center — O Caso do Pico de CPU que Não Estava na CPU

 

Bellacosa Mainframe e o IBM Capacity e suas diversas ferrmaentas

☕ Um Café no Bellacosa Mainframe

☕ CSI: New York Entra no Data Center — O Caso do Pico de CPU que Não Estava na CPU

Ou: como um programador COBOL iniciante descobre que capacity no mainframe não é comprar processador, que SMF guarda impressões digitais, que OMEGAMON vê o crime acontecendo e que um REXX lendo logs pode virar tanto um laboratório forense quanto um belo desastre em produção

Imagine a abertura de CSI: New York: sirenes refletindo nos prédios de Manhattan, uma equipe isolando a cena do crime, Mac Taylor olhando para uma evidência minúscula e dizendo algo como: “Não procurem apenas o que aconteceu. Procurem o que deixou rastros.”

Agora troque Manhattan por uma sala com um IBM Z. Troque o cadáver por um fechamento mensal lento. Troque a mancha de sangue por um pico no R4HA. E coloque, no centro da cena, um programa COBOL que alguém jurou ser “só uma alteração simples”.

Bem-vindo ao estranho e caro universo de capacity management.

Para quem começa em COBOL, capacidade parece uma conversa distante, reservada ao povo que fala em MSU, LPAR, SCRT, capping, zIIP e fatura de software como quem comenta a previsão do tempo. Mas não é distante. Um PERFORM mal desenhado, um READ repetido, um SELECT Db2 sem índice, um sort desnecessário ou um batch agendado na hora errada podem se transformar em CPU, espera, atraso de SLA e dinheiro.

E, no mainframe, dinheiro costuma deixar rastro.



A cena do crime: o que é capacity, afinal?

Capacity é a capacidade de o ambiente entregar o serviço que o negócio espera, no momento em que ele precisa, sem desperdiçar recursos nem comprar potência como quem joga dinheiro pela janela.

Não é apenas “CPU disponível”.

Se uma LPAR fica em 95% de CPU por dez minutos de madrugada, mas nenhum batch perde janela e nenhum usuário sofre, talvez seja perfeitamente aceitável. Se ela fica em 55% de CPU às 10h30, mas o CICS demora, o Db2 acumula espera, os caixas travam e o aplicativo móvel dá timeout, há um problema sério — embora o gráfico de CPU média tente inocentar o ambiente.

Essa é a primeira lição do CSI Mainframe:

CPU alta não é automaticamente culpada. CPU baixa não é automaticamente inocente.

O capacity planner, o sysprog, o DBA, a operação e o desenvolvedor precisam olhar a história inteira:

  • O serviço foi entregue dentro do SLA?

  • Qual workload sofreu?

  • Houve espera por CPU, disco, memória, lock Db2, rede ou fila?

  • O WLM priorizou corretamente o que era importante?

  • O pico foi eventual, recorrente ou previsível?

  • Houve impacto no consumo de MSU e no custo de software?

  • É preciso ajustar código, SQL, WLM, agenda batch, hardware ou contrato?

Em outras palavras: capacity é performance, disponibilidade, previsão e custo sentados na mesma mesa — quase sempre discutindo quem derrubou a produção.



O cadáver chamado “média mensal de CPU”

Um erro clássico é alguém abrir um relatório e declarar:

“A CPU média do mês foi 43%. Não precisamos nos preocupar.”

Mac Taylor levantaria uma sobrancelha.

Média é uma estatística útil, mas também é ótima para esconder picos. Imagine que um restaurante receba quatro clientes por hora durante vinte e três horas e, à noite, receba duas mil pessoas de uma vez. A média diária pode dizer que o movimento foi tranquilo; a cozinha, porém, terá uma opinião bastante diferente.

No IBM Z, o problema costuma aparecer em intervalos críticos: fechamento contábil, pagamento de folha, processamento de PIX, abertura de mercado, campanha de varejo, virada de dia, cargas de integração ou aquela execução “temporária” que alguém deixou rodando desde 2019.

É por isso que capacity olha para séries históricas, picos por intervalo, comportamento por LPAR e principalmente para a relação entre recursos e serviço entregue.

Em ambientes com cobrança baseada em capacidade, surge um personagem digno de CSI: o R4HA, ou Rolling Four-Hour Average. De maneira simplificada, ele acompanha uma média móvel de quatro horas de uso de capacidade. Não é uma conta de padaria, nem deve ser interpretado sem considerar o contrato da empresa, mas ele explica por que um pico prolongado pode deixar uma marca financeira muito maior do que uma explosão curta de CPU.

A pergunta deixa de ser “a CPU ficou alta?” e passa a ser:

“Durante quanto tempo, em qual LPAR, com qual workload, por qual causa e a que custo?”


 

O laboratório: SMF, RMF e os rastros digitais

Em CSI, um fio de cabelo pode ligar suspeito, lugar e horário. No z/OS, os rastros aparecem principalmente em SMF e RMF.

O SMF — System Management Facilities — é o grande livro de ocorrências do z/OS. Ele registra eventos e medições de muitos componentes. Há registros ligados a jobs, segurança, CICS, Db2, uso de recursos e muito mais.

O RMF — Resource Measurement Facility — é a ferramenta de medição de recursos do z/OS. Ele observa CPU, memória, I/O, WLM e outros sinais vitais. Em vez de perguntar ao sistema “você está bem?”, RMF faz exames periódicos e devolve números.

Para o iniciante, pense assim:

ElementoAnalogia CSI: NYNo z/OS
SMFLivro de evidênciasRegistros de eventos e contabilidade
RMFMonitor cardíaco e tomografiaMedição de recursos e performance
WLMCentral que decide prioridadeDefine objetivos e prioridade dos workloads
SCRTPerito financeiroGera dados associados à cobrança de software
SMF 30Ficha de atividade de jobDados de execução e accounting de batch
SMF 70–79Sensores do prédioDados RMF de CPU, memória, I/O e afins
SMF 100/101/102Laudo do Db2Informações úteis de Db2 e accounting
SMF 110Relatório da cena CICSDados de transações e performance CICS
SMF 80Registro de acessoAuditoria de segurança RACF

Não é preciso decorar todos os tipos de SMF numa tarde. Mas é essencial compreender que eles não são “logs de texto” bonitinhos. Muitos registros são binários, possuem seções variáveis, versões e campos que evoluem com o produto. Abrir um SMF bruto e tentar interpretar tudo com um EXECIO de REXX, sem conhecer o layout, é como pegar uma amostra de DNA e analisá-la com uma régua escolar.

Pode funcionar para algo muito específico? Pode. É a primeira escolha para uma plataforma corporativa? Normalmente, não.

Os suspeitos do questionário: quem faz o quê?

A pesquisa mostrava nomes como zPCA, Zetaly, IntelliMagic, MICS, TMON, BMC AMI Capacity and Cost e solução caseira. Eles convivem no mesmo bairro, mas não exercem a mesma função.

IBM Z Performance and Capacity Analytics: o arquivo central do caso

O IBM Z Performance and Capacity Analytics, frequentemente chamado de ZPCA ou, informalmente, izPCA, trabalha com histórico, relatórios, tendências e planejamento. É uma ferramenta adequada para juntar dados, analisar uso passado, comparar previsão com realizado e discutir cenários futuros.

Ela responde perguntas como:

  • Nosso crescimento de transações pede mais capacidade no próximo ano?

  • Esta LPAR está crescendo de forma normal ou mudou depois de um release?

  • O que ocorre se movermos uma carga de trabalho?

  • Quais recursos estão chegando ao limite?

  • O que foi previsto no trimestre e o que realmente aconteceu?

É a sala onde se olha o filme inteiro, não apenas o frame da queda.

Sua vantagem é estar próxima do ecossistema IBM Z e trabalhar com disciplina de capacity. A desvantagem é exigir instalação, modelagem, coleta adequada e gente que saiba interpretar resultados. Ferramenta de capacity sem processo vira uma biblioteca cheia de relatórios que ninguém abre.

IntelliMagic Vision: a parede de telas, mas com cérebro

O IBM Z IntelliMagic Vision se destaca pela análise visual, tendências, dashboards e identificação de riscos. É útil quando o time precisa transformar uma montanha de dados em perguntas navegáveis.

Em vez de entregar ao analista iniciante 900 páginas de relatórios RMF e dizer “descubra por que o online ficou lento”, a solução ajuda a explorar:

  • onde ocorreu desvio do padrão;

  • qual LPAR mudou;

  • quando um recurso começou a degradar;

  • que subsistema acompanhou a alteração;

  • quais tendências indicam risco futuro.

Seu ponto forte é acelerar a investigação. Sua limitação é a mesma de toda ferramenta inteligente: ela mostra sinais e correlações; não substitui o raciocínio de quem conhece o negócio e a arquitetura.

Se o consumo cresce toda Black Friday, isso não é necessariamente anomalia. Se cresce em uma terça-feira comum após um novo SELECT, aí já há uma impressão digital interessante.

MICS: o arquivo histórico que conhece a cidade inteira

O MICS, tradicionalmente associado ao universo CA/Broadcom, é uma solução histórica e profunda para coleta, organização e análise de dados de performance e capacidade.

Ele tem a reputação do investigador veterano: talvez não chegue usando um painel moderno cheio de animações, mas conhece o histórico da cidade, os padrões de anos e a origem de quase todo relatório.

É forte em ambientes grandes, consolidação de informações, tendência, accounting e análises corporativas. Porém exige conhecimento. Não é uma ferramenta que se domina com dois cliques e entusiasmo de estagiário.

Uma empresa que mantém MICS bem administrado possui um patrimônio técnico. O desafio não é descartá-lo porque parece antigo; é garantir que seus dados possam ser entendidos, consultados e apresentados à nova geração.

TMON: o policial na rua

O TMON se aproxima mais do monitoramento operacional e da análise de performance no momento do evento. Ele ajuda a responder: “o que está acontecendo agora?”

Isso é valioso. Quando a produção reclama, não há tempo para esperar o planejamento trimestral. É preciso olhar transações, recursos, filas, uso de CPU, esperas e sintomas.

Mas monitoramento não é igual a planejamento de capacidade.

TMON pode ajudar a capturar o incidente e entender o comportamento imediato. Para planejar hardware, custo e crescimento para os próximos meses, você precisa armazenar, consolidar, comparar e prever — normalmente com uma camada adicional de dados e processo.

BMC AMI Capacity and Cost: quando o laudo encontra a fatura

A família BMC AMI Capacity Management trabalha com reporting, previsão, consumo e custo. Ela ganha força sobretudo em lojas que já usam BMC AMI Ops ou CMF, pois há integração entre a observação operacional e a análise de capacidade.

Ela é importante quando a conversa deixa de ser apenas técnica:

“Este pico foi necessário para o negócio ou foi desperdício de software mal desenhado?”

Essa pergunta é ouro. Às vezes o consumo é inevitável: crescimento real, novo produto, aquisição de outra empresa, volume maior de transações. Outras vezes, há desperdício: SQL regressivo, trabalho batch mal distribuído, falta de offload, código repetindo I/O, WLM mal configurado ou workload colocado na LPAR errada.

Atenção: cortar custo com capping agressivo pode parecer vitória até o primeiro SLA perdido. Economia técnica que derruba pagamento, folha ou atendimento não é otimização; é um ABEND financeiro.

Zetaly: o consultor que pergunta “quanto vai custar?”

A Zetaly tem uma abordagem bastante voltada à relação entre capacidade, previsão, cenário e FinOps de mainframe. É interessante quando a organização precisa simular crescimento, mudança de hardware, redistribuição de workloads ou orçamento de MLC.

Ela é útil para perguntas de diretoria:

  • Se crescer 20%, quanto isso exige de capacidade?

  • Se consolidarmos LPARs, qual efeito técnico e financeiro?

  • Se adquirirmos uma empresa, qual será o consumo?

  • Qual cenário atende SLA com menor custo?

Mas nenhuma simulação salva hipótese ruim. Se o Business Analyst sabe que haverá uma campanha capaz de dobrar o volume e o modelo recebe “crescimento de 5%”, o resultado pode sair impecável, cheio de gráficos, aprovado em reunião — e completamente errado.

OMEGAMON, APA e Xpediter: não são capacity planners, mas são ótimos peritos

Aqui mora uma distinção importante.

O IBM OMEGAMON é um monitor operacional e de performance. Ele observa o ambiente em tempo real ou quase real: z/OS, CICS, Db2, IMS, MQ, redes, storage e outros componentes, conforme os módulos licenciados.

Pergunta que ele ajuda a responder:

“O que está ruim agora, onde e com qual sintoma?”

O IBM Application Performance Analyzer (APA) investiga uma aplicação em profundidade. Ele pode ajudar a identificar onde um programa COBOL, PL/I, Java ou Assembler está consumindo tempo de CPU, realizando I/O, chamando rotinas repetidamente ou ficando em espera.

Pergunta típica:

“Qual trecho deste programa está queimando CPU?”

Já o Xpediter/Expeditor — hoje associado ao universo BMC, dependendo do produto e nomenclatura adotados pela empresa — é mais ligado a depuração e diagnóstico de programas, especialmente COBOL, CICS, Db2 e batch.

Pergunta típica:

“Por que este programa falhou, produziu dado errado ou se comportou de modo inesperado?”

Eles não substituem ZPCA, MICS, BMC AMI Capacity ou Zetaly. São complementares.

Veja um caso:

  1. Às 10h15, usuários reclamam que o aplicativo móvel está lento.

  2. O OMEGAMON revela pressão em CICS/Db2 e filas crescendo.

  3. O APA mostra que uma rotina COBOL recém-alterada elevou fortemente o CPU por transação.

  4. O DBA encontra um acesso Db2 menos eficiente.

  5. O time corrige a lógica ou o índice.

  6. A ferramenta de capacity analisa se o evento alterou R4HA, tendência e custo mensal.

  7. A empresa evita comprar capacidade para compensar uma falha de aplicação.

OMEGAMON vê o carro batendo. APA abre o motor. Xpediter ajuda quando o carro explodiu. Capacity planning decide se a cidade precisa de uma avenida maior — ou se basta consertar o semáforo.

A solução caseira: REXX lendo SMF?

Sim. E ela pode ser muito boa — se for tratada como produto, não como gambiarra heroica.

Uma solução caseira típica poderia ser:

SMF / RMF / SCRT
        ↓
IFASMFDP seleciona registros
        ↓
JCL agenda extração e tratamento
        ↓
COBOL, SAS ou utilitário interpreta dados complexos
        ↓
REXX orquestra, valida e dispara relatórios
        ↓
Db2 guarda histórico
        ↓
Power BI, Excel, Grafana ou portal interno mostra tendências

O REXX é excelente como maestro: recebe parâmetros, monta JCL, verifica retornos, chama utilitários, organiza datasets, valida datas, produz alertas e automatiza rotinas.

Mas REXX não precisa carregar sozinho o piano de cauda.

Ler SMF binário diretamente em REXX pode ser pesado, frágil e difícil de manter. Para grandes volumes, é comum usar:

  • IFASMFDP para filtrar os registros necessários;

  • RMF Postprocessor para gerar relatórios e extratos;

  • DFSORT/ICETOOL para seleção e transformação;

  • COBOL, PL/I ou Assembler para parsing estruturado;

  • SAS, se a empresa já tiver esse ecossistema;

  • Db2 para histórico, consultas e integração;

  • REXX para controlar o fluxo;

  • ferramentas modernas de visualização para a camada final.

O erro seria tentar construir, sozinho e escondido, um “MICS de garagem” sem documentação, sem controle de versão, sem validação e sem sucessor.

Uma solução caseira madura deve ter:

  • coleta automática;

  • documentação dos campos e cálculos;

  • retenção definida;

  • validação contra RMF, SCRT e eventos conhecidos;

  • segurança RACF para dados sensíveis;

  • controle de mudanças;

  • cálculo reproduzível;

  • pelo menos duas pessoas capazes de mantê-la;

  • comparação entre previsão e realizado.

Se apenas uma pessoa sabe ajustar a planilha ou o REXX, aquilo não é uma plataforma. É um single point of failure com café.

Passo a passo para começar sem cometer um S0C7 metodológico

Para um programador COBOL iniciante, o caminho não é tentar modelar toda a capacidade do banco no primeiro dia. Comece por uma investigação pequena e útil.

Passo 1: escolha uma pergunta concreta

Não comece com “vamos analisar todos os SMFs da empresa”.

Comece com:

  • Qual job batch mais consome CPU?

  • Qual é a janela de pico de uma LPAR?

  • O uso de zIIP está adequado?

  • Qual classe WLM perde objetivo?

  • O fechamento mensal mudou após uma alteração?

  • Qual programa COBOL aumentou o tempo de execução?

Pergunta ruim gera relatório grande. Pergunta boa gera decisão.

Passo 2: descubra os dados disponíveis

Converse com performance, sysprog, operação e DBA. Pergunte quais SMF/RMF existem, qual retenção há, se há SCRT, se existem relatórios RMF e quais ferramentas já estão instaladas.

Antes de criar mais um dashboard, descubra se alguém já resolveu 80% do problema em MICS, OMEGAMON, BMC, IntelliMagic ou ZPCA.

Passo 3: encontre um evento conhecido

Escolha uma data em que houve lentidão, atraso batch ou aumento de consumo. Eventos conhecidos são perfeitos para validar sua análise. Se o relatório disser que tudo estava ótimo quando a produção claramente estava sofrendo, o relatório está olhando para a métrica errada, intervalo errado ou fonte errada.

Passo 4: relacione recurso e serviço

Não basta dizer “CPU estava alta”. Procure relacionar:

  • CPU e response time;

  • zIIP e spillback;

  • I/O e tempo de job;

  • Db2 e transações CICS;

  • WLM e objetivos de serviço;

  • batch e janela de execução;

  • pico de uso e R4HA.

É nessa ligação que o analista deixa de ser leitor de gráfico e passa a ser investigador.

Passo 5: proponha uma ação verificável

Uma análise madura termina com ação e verificação:

  • ajustar SQL ou índice;

  • reduzir I/O repetitivo em COBOL;

  • alterar prioridade WLM;

  • mover ou escalonar batch;

  • revisar utilização de zIIP;

  • ajustar capacidade;

  • rever capping;

  • atualizar forecast.

Depois, meça novamente. Em CSI, teoria sem prova não fecha o caso. Em produção, mudança sem medição vira folclore.

Easter egg: o COBOL pode estar no laudo, não no banco dos réus

Há uma brincadeira injusta segundo a qual “COBOL consome muito”. COBOL não consome capacidade por existir; ele executa a lógica que alguém pediu.

Um programa COBOL pode ser extremamente eficiente e previsível. Outro pode fazer um READ em loop inadequado, repetir acesso Db2, classificar arquivos demais, chamar módulos desnecessariamente ou manter uma tabela em memória de modo desastroso.

O culpado não é a linguagem. É o desenho.

E isso vale para Java, Python, C#, SQL, scripts shell, qualquer coisa. Um programa ruim em linguagem moderna continua ruim; apenas apresenta o desperdício em JSON.

Conclusão: não compre CPU antes de ler a cena

Capacity management em IBM Z é a disciplina de observar recursos, entender workloads, cumprir SLA, prever crescimento e controlar custo. Ele precisa de ferramentas, mas sobretudo de método.

OMEGAMON ajuda a enxergar o incidente. APA ajuda a descobrir qual programa está gastando demais. Xpediter ajuda a depurar e entender falhas. SMF e RMF guardam os rastros. ZPCA, MICS, IntelliMagic, BMC AMI e Zetaly organizam partes diferentes da investigação e do planejamento. Uma solução caseira com REXX pode ser excelente, desde que seja automatizada, documentada, validada e sobrevivente à ausência do seu criador.

O programador COBOL que aprende essa visão deixa de enxergar seu PROGRAM-ID como uma ilha. Ele entende que cada READ, cada SQL, cada sort, cada chamada CICS e cada decisão de algoritmo entra em uma cadeia maior: serviço, consumo, custo e reputação da produção.

Mac Taylor talvez resumisse assim, diante de um gráfico de CPU aparentemente inocente:

“Não foi a máquina que ficou cara. Foi alguém que deixou um rastro — e o SMF estava olhando.”

Vagner Renato Bellacosa, IBM Champion e especialista em IBM Mainframe
IBM Z17 SYSTEM ONLINE
Sobre o autor

Vagner Renato Bellacosa

IBM Champion 2026 • Especialista em IBM Mainframe

Vagner Renato Bellacosa trabalha com IBM Mainframe desde 1988 , é IBM Champion e especialista em COBOL, CICS, Db2, z/OS e IBM Z. Compartilha experiências profissionais, conhecimento técnico, história da computação e práticas do universo mainframe para aproximar novas gerações das tecnologias que sustentam empresas, bancos e governos ao redor do mundo.

IBM Champion IBM Z COBOL CICS Db2 z/OS Mainframe desde 1988
GitHub LinkedIn
Inicializando conteúdo...