# Calculadora de runtime de iRules

> Transforme estatísticas de timing de iRules em tempo real de execução, custo de CPU por requisição e máximo de requisições por segundo.

- Tool: https://ronutz.com/pt-BR/tools/f5-irules-runtime-calculator
- Family: Redes

---

## O que faz

Cole as estatísticas de tempo de `tmsh show ltm rule <nome> field-fmt`, informe a velocidade de clock e a contagem de núcleos da sua plataforma, e esta ferramenta reproduz as quatro tabelas da antiga planilha iRules Runtime Calculator do DevCentral, inteiramente no navegador. Para cada evento, e para a regra como um todo, ela mostra um melhor, típico e pior caso (os ciclos mínimo, médio e máximo) em quatro visões: ciclos de CPU brutos, tempo de execução em microssegundos, a porcentagem de CPU que uma única requisição custa e o máximo de requisições por segundo que a regra pode sustentar. Nada é enviado para lugar nenhum.

## A medição que ela lê

O comando `timing` registra, por evento, o total de execuções e os ciclos consumidos como um mínimo, médio e máximo. Com `field-fmt`, isso aparece como blocos contendo `avg-cycles`, `min-cycles`, `max-cycles` e `total-executions` (muitas vezes abreviados, como `43.0K`, que a ferramenta expande). A forma clássica de uma linha, `HTTP_REQUEST 729 total 0 fail 0 abort | Cycles (min, avg, max) = (3693, 3959, 53936)`, também é aceita. Desde a versão 11.5.0 o timing fica ligado por padrão. **A média é a coluna confiável.** O máximo é inflado porque a primeira execução de uma regra recém-editada inclui otimização de compilação única, e o escalonamento do sistema operacional adiciona sobrecarga pelo menos uma vez por tick; o timing em si carrega uma margem de erro de cerca de 70 a 100 ciclos. Empurre uma carga grande e representativa (dez mil requisições ou mais) e limpe as estatísticas uma vez após o primeiro acesso.

## Como os números são derivados

Tudo flui de uma figura que a planilha chama de Cycles por segundo, que ela calcula como núcleos vezes clock em MHz vezes um milhão, direto de `/proc/cpuinfo`; esse é o padrão aqui, e um override opcional aceita um número específico da plataforma. A partir dele: o tempo de execução em microssegundos é ciclos vezes um milhão dividido por Cycles por segundo; a porcentagem de CPU por requisição é ciclos dividido por Cycles por segundo; e o máximo de requisições por segundo é Cycles por segundo dividido por ciclos. A linha Total soma os ciclos por evento e deriva seus microssegundos, porcentagem e requisições dessa soma. Uma ressalva que a ferramenta reitera: essas figuras assumem que o trabalho se espalha por todos os núcleos sob CMP, então se uma regra modifica uma variável global e é demovida para um único núcleo, recalcule com uma contagem de núcleos de um.

## Standards and references

- [DevCentral — Generate the iRules Runtime Calculator Excel Spreadsheet with the Python SDK](https://community.f5.com/kb/technicalarticles/generate-the-irules-runtime-calculator-excel-spreadsheet-with-the-python-sdk/285509) - the calculator and its downloadable spreadsheet: Cycles/Sec as cores x MHz x 1,000,000, the field-fmt event statistics (avg/min/max-cycles, total-executions), and the table formulas reproduced here (cycles summed; microseconds = cycles x 1e6 / CyclesPerSec; % CPU = cycles / CyclesPerSec; max requests/sec = CyclesPerSec / cycles), each with min/avg/max, verified against the workbook's shipped example
- [DevCentral — Intermediate iRules: Evaluating Performance](https://community.f5.com/kb/technicalarticles/intermediate-irules-evaluating-performance/290352) - the timing command's Cycles (min, avg, max) output, average being the reliable metric, and discarding the compile-inflated maximum
- [F5 clouddocs — iRules timing command](https://clouddocs.f5.com/api/irules/timing.html) - timing syntax and scope and on-by-default since 11.5.0

## Related reading

- [Desempenho de iRules: ciclos, timing e a calculadora de runtime](https://ronutz.com/pt-BR/learn/irules-performance-and-timing.md): Como os iRules realmente executam dentro do TMM (um interpretador Tcl que compila para bytecode), o que o comando timing mede, por que a média de ciclos é o número confiável e o máximo é descartado, e como transformar ciclos em tempo real de execução, custo de CPU por requisição e máximo de requisições por segundo.
- [iRules: escolhendo entre if, switch, class match e arrays static](https://ronutz.com/pt-BR/learn/irules-branching-and-lookups.md): Quando um iRule precisa comparar um valor com muitos e agir, há quatro ferramentas comuns: if encadeado, switch, um data group com class match, e um array static:: indexado diretamente. A F5 de fato ordenou essas opções por velocidade. Aqui está essa ordem, e as duas perguntas que decidem qual usar.
- [Laços e listas em iRules, e por que eles bloqueiam](https://ronutz.com/pt-BR/learn/irules-loops-and-lists.md): iRules suportam foreach, for e while, e a maioria dos comandos de lista do Tcl. Mas laços rodam em linha em um TMM de thread única, então um laço grande por requisição trava aquela conexão. Aqui está qual laço usar, quais comandos de lista você realmente tem, e por que o foreach é o primeiro a buscar.
