Pages

Friday, November 24, 2006

SuperKaramba: Informações da Memória

Depois de uma longa pausa, eu espero conseguir terminar o conjunto de artigos sobre o superkaramba.
Um dos sensores mais utilizados em temas é o que obtém a memória utilizada do sistema. Considere o tema abaixo.
karamba x=160 y=350 w=200 h=50 interval=1000
image x=0 y=0 path="icons/memory_mount.png"

# Escrevendo texto
text x=50 y=10 value="RAM:"
text x=50 y=20 value="Swap:"

# Obtendo informações da memória RAM
text x=90 y=10 sensor=memory format="%um MiB"
text x=140 y=10 sensor=memory format="[%tm MiB]" align=right"

# Obtendo informações da memória swapp
text x=90 y=20 sensor=memory format="%us MiB"
text x=140 y=20 sensor=memory format="[%ts MiB]" align=right"
A essa altura eu espero que o tema acima não esteja muito difícil de entender. Concentrando-se na parte realmente diferentes, temos o sensor memory utilizado com duas opções, a m e s, m para memória RAM e s para a memória swap. De cada tipo de memória está sendo obtido duas informações, a primeira que usa o sufixo u é a memória em uso e a segunda opção, com o sufixo t, trata a memória total.

Eu poderia colocar, para que fique mais claro, que o caracter % indica o que é uma opção do sensor, o resto é texto simple, ou seja, se tiver a memória RAM toda de 1 GiB, ao utilizar format="[%tm MiB]" parecerá no lugar format="[1024 MiB]".

De forma bem simples, o tema acima escreve a memória em primeiro e a memória total em seguida. Diversas opções poderiam ser utilizadas para fornecer a mesma informação com um formato diferente, mas aqui ficaremos apenas com essas.

[Eliminando - O texto abaixo é instrutivo, mas inútil]
Um problema comum de quem usa o superkaramba é a definição de memória RAM em uso. É comum essa informação ser igual a memória total, e o usuário é levado a acreditar que, de fato, a memória total está sendo consumida. Isso não é verdade. Ocorre que a especificação de memória em uso segue as regras do comando free. Se digitar free -m verá informações sobre memória em usada, memória livre e lá no fim, o que eu traduziria como memória cache. É nela que está a chave da questão, a memória realmente em uso no sistema (por programas que estão aberto) é igual a memória total subtraída da memória livre e da memória cache. Antes que alguém crucifique essa história, me permita afirmar que as considerações do comando free -m tem lógica e que não devem ser consideradas um erro. Eu não pretendo explicar isso aqui, mas do ponto de vista de um servidor essa lógica é excepcional, do ponto de vista de um desktop é que (do meu ponto de vista pessoal) não faz muito sentido se apegar as essas definições.

Para contornar isso eu uso um script, esse script calcula a exata quantidade de memória que está realmente em uso.

Assim, a linha:
text x=90 y=10 sensor=memory format="%um MiB"
é substituída por:
text x=90 y=10 sensor=program program="echo $(~/bin/memoria) MiB"
onde o conteúdo do arquivo ~/bin/memoria é:
#!/bin/sh
echo "`free | grep Mem | awk '{printf (\"%.0f\", ( $3 -($6 + $7) )/1000)}'`"
Antes que me pergunte, a resposta é sim, é possível colocar a linha em questão diretamente no tema. Eu é que não faço isso.
[/Eliminando]

[update]
Acabei de descobrir sobre o %umb, o "b" adicionado faz com o que o sensor não considere a memória cache (e o buffer). O que está acima continua sendo verdade porque eu me referia ao %um usado no texto, mas é desnecessário, apesar de possível, usar o script atualmente. Foi uma mosca bem grande :-(.
[/update]

Os textos posteriores terão como foco a criação de gráficos dinâmicos. Começando pelo gráfico em barras para determinar o uso do HD.

Technorati Tags:

No comments:

Post a Comment