Exemplificando o funcionamento do Kernel

7 de dezembro de 2010

Texto de Bruno Gonçalves Araújo

Existem diversos textos na internet sobre otimização do Kernel, porém em geral são de difícil compreensão, então, aqui vou listar de forma bastante simples as principais otimizações utilizadas.

 
1 – Schedule (O que considero mais importante)

Sempre o computador está executando diversos programas ao mesmo tempo, mas não existe 1 núcleo para cada programa, portanto é preciso que o processador trabalhe um pouco em um programa e vá para o próximo. Um grande desafio é definir quanto tempo cada programa irá utilizar o processador até que seja liberado para o próximo programa.

Caso o tempo for muito baixo, aplicações que necessitam de muito processamento perdem desempenho. Digamos que você esteja utilizando um player de áudio com uma configuração de tempo muito baixa, mesmo que tenha programas consumindo muito processamento dificilmente a música irá “engasgar”. Ou seja, será mais demorado para aplicar um efeito em uma imagem ou converter um vídeo, porém ao executar mais programas o sistema continua respondendo bem.

Texto de Bruno Gonçalves Araújo

Existem diversos textos na internet sobre otimização do Kernel, porém em geral são de difícil compreensão, então, aqui vou listar de forma bastante simples as principais otimizações utilizadas.

1 – Schedule (O que considero mais importante)

Sempre o computador está executando diversos programas ao mesmo tempo, mas não existe 1 núcleo para cada programa, portanto é preciso que o processador trabalhe um pouco em um programa e vá para o próximo. Um grande desafio é definir quanto tempo cada programa irá utilizar o processador até que seja liberado para o próximo programa.

Caso o tempo for muito baixo, aplicações que necessitam de muito processamento perdem desempenho. Digamos que você esteja utilizando um player de áudio com uma configuração de tempo muito baixa, mesmo que tenha programas consumindo muito processamento dificilmente a música irá “engasgar”. Ou seja, será mais demorado para aplicar um efeito em uma imagem ou converter um vídeo, porém ao executar mais programas o sistema continua respondendo bem.

Se a configuração estabelecer tempos muito altos, ocorre o oposto. Operações que necessitam de muito processamento ocorrem de forma mais eficaz, porém enquanto estiverem executando tarefas mais pesadas o computador não irá responder bem, músicas irão engasgar e até o ponteiro do mouse poderá se mover aos “pulos”.

Atualmente temos o Schedule, oficial chamado de CFS, que tenta se adaptar tanto em servidores quanto em desktops e o BFS que é focado apenas em desktops. Em geral servidores executam poucos aplicativos ao mesmo tempo e utilizam uma configuração em que cada programa possui tempos altos na fila de processamento, o oposto do desktop.

 
2 – Os HZ
Trabalha junto com o Schedule e define o tempo de ciclos de processamento, em geral pode variar em 100 HZ, 200 HZ, 300HZ e 1000HZ. Até a pouco tempo 1000HZ era considerada a melhor configuração para desktops por possuir o menor tempo para cada aplicativo, porém atualmente muitos já acreditam que 300 HZ é mais eficaz. Enquanto servidores trabalham melhor com 100 ou 200 HZ.

 
3 – Gerenciamento de memória
Outro ponto difícil de atingir um valor que funcione bem para todos. Configurações que utilizam menor quantidade de memória deixam a abertura de programas mais lenta, porém permite utilizar uma quantidade maior de programas simultâneos sem perda significativa de desempenho.

Uma forma de analisar o uso de memória é com o comando free -m. Na primeira linha, quanto maior a quantidade de memória utilizada, melhor. Na segunda ocorre o oposto. Na terceira linha o ideal é que sempre esteja sem uso.

Exemplo da saída do comando ‘free -m’

tales@neit:~$ free -m
             total       used       free     shared    buffers     cached
Mem:          3801       1766       2035          0         69        616
-/+ buffers/cache:       1080       2721
Swap:          251          0        251

A primeira linha informa quanto da memória está sendo utilizada, incluindo a cache. A cache é uma parte da memória que possui informações que já foram utilizadas, mas não estão mais em uso, porém se necessitar ser utilizada novamente não precisa ler a informação do HD, ela já está na memória e irá tornar o acesso muito mais rápido. Dessa forma quanto maior acache, mais rápido o sistema funciona e o Kernel sabe que a cache possui baixa prioridade, dessa forma ele libera esse espaço para outras funções mais importantes sempre que necessário. A segunda linha informa quanto de memória está realmente em uso. A terceira linha informa quanto de SWAP está em uso. Quando o tamanho da memória não é suficiente o sistema armazena arquivos que deveriam estar na memória, nessa partição do HD. Porém a velocidade de transferência de uma memória DDR2 de 400 mhz que hoje já é bastante defasada é de 3200 MB/s enquanto um HD de modelo rápido e atual possui dificuldade em manter 100 MB/s de velocidade. Se for um notebook isso ainda piora, normalmente esses HDs são mais lentos e dificilmente superam 50 MB/S.

Para fazer esse equilíbrio existe o sistema de prioridade, onde permite que um programa “fure a fila” e consiga, por exemplo, 2 ciclos de processamento no mesmo período que outros programas estarão tendo apenas 1 ciclo.

Se a configuração estabelecer tempos muito altos, ocorre o oposto. Operações que necessitam de muito processamento ocorrem de forma mais eficaz, porém enquanto estiverem executando tarefas mais pesadas o computador não irá responder bem, músicas irão engasgar e até o ponteiro do mouse poderá se mover aos “pulos”.

Atualmente temos o Schedule, oficial chamado de CFS, que tenta se adaptar tanto em servidores quanto em desktops e o BFS que é focado apenas em desktops. Em geral servidores executam poucos aplicativos ao mesmo tempo e utilizam uma configuração em que cada programa possui tempos altos na fila de processamento, o oposto do desktop.

2 – Os HZ
Trabalha junto com o Schedule e define o tempo de ciclos de processamento, em geral pode variar em 100 HZ, 200 HZ, 300HZ e 1000HZ. Até a pouco tempo 1000HZ era considerada a melhor configuração para desktops por possuir o menor tempo para cada aplicativo, porém atualmente muitos já acreditam que 300 HZ é mais eficaz. Enquanto servidores trabalham melhor com 100 ou 200 HZ.

3 – Gerenciamento de memória
Outro ponto difícil de atingir um valor que funcione bem para todos. Configurações que utilizam menor quantidade de memória deixam a abertura de programas mais lenta, porém permite utilizar uma quantidade maior de programas simultâneos sem perda significativa de desempenho.

Uma forma de analisar o uso de memória é com o comando free -m. Na primeira linha, quanto maior a quantidade de memória utilizada, melhor. Na segunda ocorre o oposto. Na terceira linha o ideal é que sempre esteja sem uso.

Exemplo da saída do comando ‘free -m’

tales@neit:~$ free -m
             total       used       free     shared    buffers     cached
Mem:          3801       1766       2035          0         69        616
-/+ buffers/cache:       1080       2721
Swap:          251          0        251

A primeira linha informa quanto da memória está sendo utilizada, incluindo a cache. A cache é uma parte da memória que possui informações que já foram utilizadas, mas não estão mais em uso, porém se necessitar ser utilizada novamente não precisa ler a informação do HD, ela já está na memória e irá tornar o acesso muito mais rápido. Dessa forma quanto maior acache, mais rápido o sistema funciona e o Kernel sabe que a cache possui baixa prioridade, dessa forma ele libera esse espaço para outras funções mais importantes sempre que necessário. A segunda linha informa quanto de memória está realmente em uso. A terceira linha informa quanto de SWAP está em uso. Quando o tamanho da memória não é suficiente o sistema armazena arquivos que deveriam estar na memória, nessa partição do HD. Porém a velocidade de transferência de uma memória DDR2 de 400 mhz que hoje já é bastante defasada é de 3200 MB/s enquanto um HD de modelo rápido e atual possui dificuldade em manter 100 MB/s de velocidade. Se for um notebook isso ainda piora, normalmente esses HDs são mais lentos e dificilmente superam 50 MB/S.

Para fazer esse equilíbrio existe o sistema de prioridade, onde permite que um programa “fure a fila” e consiga, por exemplo, 2 ciclos de processamento no mesmo período que outros programas estarão tendo apenas 1 ciclo.