Capa
Prioridade multimídia
Conheça as ferramentas do Linux para
aumentar a prioridade de aplicativos
multimídia, obtendo o desempenho
que esses programas precisam.
por Oliver Frommel
Aumente a prioridade de programas exigentes
Tempo real
M
esmo com os múltiplos GigaHertz e GigaBytes de velocidade e memória dos novos
computadores, tarefas que envolvem
multimídia pesada, como ver e gravar
programas de TV, podem não rodar de
maneira satisfatória. Em alguns casos,
o desempenho insatisfatório pode ser
conseqüência da prioridade insuficiente
desse programa.
Uma das grandes vantagens do Linux
como sistema operacional acaba causando esse tipo de problema. Como o
Linux foi projetado como um sistema
multiusuário e multitarefa, a ênfase é
manter muitos programas rodando ao
mesmo tempo. Assim, por padrão, não
há como um programa ganhar todo o
poder do sistema.
No entanto, como muitos dos computadores Linux atuais pertencem e
são usados por um único usuário, essa
pessoa pode se beneficiar da técnica de
aumentar a prioridade de aplicações multimídia que necessitam de mais recursos
de processamento.
Variações modernas do kernel Linux
permitem que usuários definam prioridades mais altas para aplicativos
individuais, dando a eles tratamento
preferencial no que se refere a ciclos de
processamento. Há muitas soluções diferentes para alterar essas prioridades
de aplicações. Quem usa a última versão
de sua distribuição preferida, pode perceber que muitas dessas técnicas estão
ativadas no kernel padrão. Uma delas é o
recurso Rlimits (abordado mais adiante
neste artigo), ativado a partir da versão
2.6.14 do kernel.
Durante as experiências para redefinir os níveis de prioridade do sistema,
provavelmente você vai querer habilitar
o modo preemptivo do kernel ao compilá-lo. Para saber
se sua distribuição
adiciona esse recurso por padrão,
confira o arquivo
de configuração
do kernel, tipicaFigura 1: Se você está procurando por um sistema de resposta rápida,
mente no diretório
vai querer habilitar a opção CONFIG_PREEMPT ao compilar o kernel.
/boot/grub.
36
maio 2006
edição 19
www.linuxmagazine.com.br
No Ubuntu, por exemplo, esse arquivo
se chama config-2.6.12-9-k7. Use o
grep para buscar por PREEMPT. Se você
descobrir que a opção CONFIG_PREEMPT
não está ativa ou que existe a opção
PREEMPT_NONE, é possível recompilar o
kernel com configurações modificadas
(figura 1). Contudo, o parâmetro CONFIG_PREEMPT_VOLUNTARY=y já seria aceitável. Mas PREEMPT seria melhor ainda.
Se você realmente quer aumentar a
prioridade de um programa multimídia, a prioridade de tempo real (realtime priority) é o grande objetivo. Ela
dá à aplicação acesso quase completo
aos recursos do sistema. Como efeito
colateral, outros programas podem se
tornar bem lentos.
Se seu kernel é compatível com prioridade em tempo real, ainda será preciso
descobrir como ativar esse recurso. Normalmente, apenas o usuário root pode
rodar um programa com prioridade de
tempo real, já que deixar qualquer usuário sugar todos os recursos do sistema
para rodar seu aplicativo particular não
é uma boa idéia. Contudo, iniciar aplicativos multimídia como root é outra má
idéia. Para um usuário único (e responsável), a melhor solução é configurar o
Linux para que a prioridade em tempo
Prioridade multimídia
Capa
real possa funcionar sem a necessidade
Por exemplo, any=1 espede privilégios de root. O objetivo deste cifica que qualquer prograartigo é analisar algumas técnicas para ma que solicitar prioridade
rodar seus aplicativos com prioridade de de tempo real possa tê-la.
tempo real, sem acesso root.
Para mais controle, o parâUsuários avançados de programas de metro gid permite que você
áudio desenvolveram há tempos uma especifique o ID de grupo
técnica para satisfazer os requerimentos de programas autorizados.
de tempo real do servidor de som Jack Por exemplo, se seus pro[2]: o módulo do kernel realtime-lsm [3]. gramas de áudio pertenDesenvolvedores não adicionaram esse cem ao grupo audio, com
módulo ao kernel padrão devido a diver- um GID de 33, é possível
sos mal entendidos, mas ele já provou carregar o módulo assim:
seu valor em aplicações práticas.
modprobe realtime-lsm
O objetivo desse módulo é dar priori- gid=33. Isso permite rodar
dade de tempo real para programas que o jackd em modo realtime
não estejam rodando como root. Isso é com a opção -R, sem priviimportante para o Jack, já que ele precisa légios de root.
Figura 2: O recurso Capabilities precisa estar na forma de
rodar sob o mesmo ID de usuário dos
módulo para se usar o realtime-lsm.
programas que o acessarem (não é uma
boa idéia rodar todo programa que use No lugar das técnicas que
Cada entrada começa com o grupo,
o Jack como root).
descrevemos acima, a maioria dos
No Ubuntu, por exemplo, o módulo re- desenvolvedores do kernel preferem seguido pelo recurso e, então, o valor.
altime-lsm está nos repositórios oficiais. usar o mecanismo Rlimits para asso- A segunda coluna tipicamente especifiUsuários de outras distribuições podem ciar prioridades de tempo real para ca se o usuário pode modificar o valor
baixar o código fonte. Para usar o realti- programas específicos. Por isso, ele se presente (“soft” se sim, “hard” se não).
me-lsm, é necessário ter o recurso Capa- tornou parte do kernel padrão, na ver- Recursos incluem a prioridade realtime
bilities do kernel funcionando como um são 2.6.14. Mas o “R” de “Rlimits” não (“rt_priority”), o nível nice (“nice”) e
módulo, e não embutido no kernel. Esse significa “realtime” (tempo real), e sim a quantidade de memória para trancar
é o caso com o Suse 9.3, mas não com o “resource” (recurso). Ele permite que se (“memlock”). Por exemplo:
Fedora Core 4, em que seus usuários pre- especifique o uso de vários recursos do
audio hard rt_priority 80
cisam recompilar o kernel e configurar sistema, como memória e, o que mais
audio hard nice -10
o Capabilities como um módulo (figura nos interessa aqui: prioridades.
2). Usuários de outras distribuições vão
O modo de usar o controle Rlimits,
precisar do código fonte do kernel, ou que a maioria dos desenvolvedores
pelo menos os cabeçalhos (headers), de- prefere, envolve o subsistema PAM Se preferir não atualizar todo o subsispendendo de sua distribuição.
(Pluggable Authentication Module), tema PAM de sua distribuição, é possíApós satisfazer todos os requerimen- que gerencia senhas em muitas dis- vel usar uma ferramenta especial que
tos, compile e instale o realtime-lsm tribuições (como Fedora, Suse...). In- gerencia apenas a prioridade realtime:
com o comando make e, em seguida, felizmente, apenas as últimas versões o set_rtlimits [4]. Para evitar a situação
make install. Se você adicionalmen- (0.79 ou mais novas) do PAM são com- em que qualquer usuário pode definir
te rodar depmod -a, é possível, depois, patíveis com o Rlimits. Se, por acaso, prioridades à vontade, o administrador
digitar modprobe realtime-lsm para você tem uma nova versão do PAM, pode usar o arquivo de configuração
carregar o módulo. O realtime-lsm en- é possível especificar os usuários ou /etc/set_rtlimits.conf para espetende alguns poucos parâmetros que grupos que podem ganhar prioridade cificar quais usuários e grupos podem
você pode configurar para influenciar de tempo real no arquivo /etc/secu- fazer isso. Adicionalmente, o arquivo
lista os programas com permissão para
o comportamento do módulo.
rity/limits.conf.
Rlimits
set_rtlimits
maio 2006
www.linuxmagazine.com.br
edição 19
37
Capa
assumir prioridade realtime. A seguinte
linha permite que um usuário chamado
“joao” dê ao comando /usr/sbin/jackd
prioridade realtime:
joao /usr/bin/jackd -1 80
O primeiro número dessa linha determina o valor máximo do nice (consulte
o manual do nice com man nice). O segundo valor define a prioridade máxima
realtime. Um número negativo significa
que não é permitido o usuário mudar o
valor determinado. O programa detecta
grupos de usuários autorizados baseados em um caractere “@” antes do nome
do grupo. Por exemplo, “@audio”. Você
pode então rodar o programa requerido
passando seu caminho completo:
set_rlimits -r=80 /usr/bin/mythfrontend
Como o Rlimits é agora parte do kernel
padrão, as próximas versões da maior
parte das distribuições vão ser compatíveis com esse recurso. Vamos esperar
que isso leve a ferramentas menos complexas para que usuários gerenciem as
prioridades dos programas de maneira
mais simples.
Patches de Con Kolivas
maio 2006
Entre outras coisas, o patch inclui vá- do sistema. Mas, como as mudanças
rias novas classes para tempo real. Por ainda não são parte do kernel padrão,
exemplo, SCHED_ISO e SCHED_BATCH. A usuários ainda precisam compilar o
prioridade de batch é útil para processos kernel otimizado. Há pacotes binários
que tomam um longo tempo para serem para usuários do Fedora [7], mas eles
completados em servidores. Essa classe não são muito atuais.
permite que programas de servidores
rodem um pouco mais, antes do agendador interrompê-los. Isso significa menos Claro que há limites para as técnicas
tempo perdido em alternância de tarefas descritas neste artigo, e os resultados
(task switching). Por outro lado, o servi- desse tipo de “tuning” vão variar condor não vai responder tão rapidamente à forme a sobrecarga no sistema. A prioentrada do usuário – algo aceitável em ridade de tempo real é na verdade o
um servidor.
“melhor esforço” dentro dessa área, mas
ela não vai eliminar todos os problemas. Mesmo assim, em circunstâncias
A classe de prioridade SCHED_ISO é como normais, as técnicas descritas trazem
uma versão leve da prioridade realtime. resultados bem tangíveis na forma de
Ela não requer privilégios de root, mas mais velocidade e estabilidade para
também não define a mais alta priorida- muitos programas multimídia.
■
de. Se um usuário sem privilégios de root
Informações
tentar definir a prioridade de tempo real
para um aplicativo, o agendador Kolivas
[1] Patches de Con Kolivas:
members.optusnet.com.au/
automaticamente coloca o programa em
ckolivas/kernel/
uma classe SCHED_ISO.
[2]
Servidor
de audio Jack:
Em nossos testes, o comando schedtojackit.sourceforge.nets
ol se mostrou útil para a configuração de
[3] Realtime-LSM:
prioridades. Para usá-lo, apenas execute o
sourceforge.net/projects/realtime-lsm
programa com a requerida prioridade:
[4] set_rtlimits:
www.physics.adelaide.edu.au/
schedtool -R -p 50 -e mplayer teste.avi
~jwoithe
Conclusão
Realtime leve
[5] schedtool: freequaos.host.sk/schedtool
A opção -R define a prioridade de
tempo real, -p 50 é o valor. Se o -e
estiver faltando, o Schedtool espera o ID
do processo ativo. O pacote schedutils
de Robert Love [6] realiza uma tarefa
similar ao Schedtool, mas ele não é
compatível com todo o conjunto das
prioridades do agendador.
Em nossos testes, o conjunto de
patches de Con Kolivas provou ser a
técnica mais efetiva. Com ele, o programa MythTV tocou e decodificou
uma transmissão de TV digital sem
defeitos de vídeo ou som em uma máquina sobrecarregada com processos
edição 19
www.linuxmagazine.com.br
[6] schedutils: rlove.org/schedutilss
[7] Kernel desktop para Fedora:
apt.bea.ki.se/kernel-desktop
Sobre o autor
Não muito tempo atrás, um médico
chamado Con Kolivas agitou bastante
a lista de emails do kernel. Ele aprendeu
programação C rapidamente e passou a
“hackear” o kernel. Finalmente, otimizou o agendador (scheduler) do kernel.
Esse é o componente que associa tempo
de CPU aos programas ativos. Quanto
menos o agendador precisar fazer isso,
mais rápido o programa roda, chegando perto do tempo real. O agendador
de Con Kolivas é agora parte do kernel
padrão. Mas há alguns outros patches
voltados para desempenho em sua página na internet [1].
38
Prioridade multimídia
Oliver Frommel foi
programador e administrador de sistemas
da Ars Electronica Center, em Linz (Áustria),
por muitos anos. Após
concluir seus estudos
de Filosofia, Linguística
e Ciência da Computação, se tornou editor da Bavarian Broadcasting Corporation.
Hoje é editor do Centro de Competência
de Software da Linux New Media AG.
Download

Tempo real - Linux Magazine