Como ajustar o cache do VLC Player

Ajustar o cache ou o buffer do seu player de áudio e/ou vídeo pode ajudar a resolver problemas que estejam causando lag ou “engasgue” durante a reprodução de se seus arquivos multimídia.
Todos os players de áudio/vídeo possuem ajuste de cache ou buffer.


Conceitualmente, cache e buffer são duas coisas distintas. Em comum, há o fato de que se trata de uma área de armazenamento temporária de informações — com o objetivo de agilizar ou dar mais eficiência ao fluxo de dados.
Os dois recursos divergem na metodologia de sua implementação, entre outras distinções.
Eu poderia discorrer prazeirosamente sobre o assunto, mas…


Aplicativos de linha comando (CLI), normalmente são ajustados na própria linha de comando, antes da sua execução — ou podem ser permanentemente configurados através de um arquivo-texto de configuração.
O VLC, contudo tem uma interface gráfica (Graphic User Interface ou GUI) completa e com inúmeras possibilidades de ajuste.
Para acessar a parte específica sobre caching, siga estes passos:

  1. Tecle Ctrl+P ou clique no menu “Ferramentas” e selecione “Preferências”
  2. Em seguida, localize a seção “Exibir configuração” (canto inferior esquerdo do painel) e selecione “Detalhado”
  3. Agora, localize na lista à esquerda a seção “Entrada/Codificador”
  4. Role a parte à direita do painel, até encontrar a seção “Avançado”

vlc codec preferencias
A seção “Avançado” contém as opções de ajuste do cache do VLC Player.
Seja conservador nos ajustes.

Ao usar o mpg123 player em um netbook, com recursos muito limitados de hardware, ajustar o buffer para 16 kb resolveu definitivamente o problema de engasgos ao executar arquivos de áudio MP3.

Se você usar valores excessivos na configuração do cache, pode aumentar o fast forward lag — ele vai demorar mais a recomeçar a reprodução quando você pedir para avançar o vídeo ou a música.
Se você passar o ponteiro do mouse sobre cada item de ajuste do cache, vai ver uma pequena explicação sobre o que cada um faz:

  • memória para arquivo — tamanho do caching, em milissegundos para arquivos locais. Comumente, se refere a arquivos presentes no disco rígido.
  • cache de disco — valor do cache para as mídias óticas.
  • cache de rede — valor referente a reproduções através da rede.

Como configurar o cache do mplayer

O mplayer é o tocador de vídeos CLI mais usado e mais presente nas principais distribuições Linux.
Se você tem este player instalado e gostaria de obter um melhor desempenho, com o uso do cache, saiba que é possível fazer este (e vários outros) ajuste(s), a partir dos arquivos de configuração do aplicativo.
mplayer configuration cache file
No Debian (testei na versão 9), os arquivos de configuração do mplayer ficam na sua própria pasta, no seu diretório padrão.
Para dar uma olhada no seu conteúdo, use o comando less:

less ~/.mplayer/gui.conf

Antes de prosseguir, sugiro fazer uma cópia de segurança do arquivo:

cp ~/.mplayer/gui.conf ~/

Se algo der errado, você não precisa se lembrar de todas as alterações feitas — pode, simplesmente, voltar à configuração original e começar a brincadeira de ajustes de novo.
Por fim, abra o arquivo, direto, com o seu editor favorito:

nano ~/.mplayer/gui.conf

A configuração do cache pode ser feita nestas 2 linhas do arquivo de configuração:

A primeira linha liga o cache; a segunda, define a quantidade de memória (em bytes) a ser usada pelo recurso.
Simples, não é?

Uma explicação simplificada sobre a gestão de memória no Linux, com foco no swap.

Uma das coisas mais certas, quando se fala em gestão da memória RAM, é que não existe memória sobrando ou ociosa em um sistema Linux.
Cada aplicação usa uma quantidade da memória disponível no sistema.
Do que “sobra”, com exceção dos últimos megabytes, o Linux usa para fazer caching — no que se inclui o cache de página, os caches de inodes etc.
Ocupar toda a memória física disponível, é benéfico — ajuda a melhorar enormemente a eficiência geral do sistema.
Tanto a leitura quanto a escrita em disco podem se beneficiar imensamente com o uso do cache.
Em mundo ideal, você sempre terá memória suficiente para abrigar todas as suas aplicações, suprir as necessidades delas e, de lambuja, ainda terá algumas centenas de megabytes disponíveis para fazer caching.
Neste mundo utópico, desde que suas aplicações não façam demandas crescentes por mais memória e o sistema não exerça pressão crescente no cache, não há necessidade alguma para swap — a não ser permitir a hibernação.

Além de auxiliar na gestão da memória virtual do sistema, o swap tem outro papel importante: guardar o estado atual do sistema, caso você ative a hibernação do computador.
Esta função do swap não será abordada neste texto, já que não tem relação direta com o gerenciamento de memória do sistema.

Para se aprofundar mais em algum tema, clique nos links incluídos no texto deste artigo e nos que estão relacionados ao final do post.


Voltando ao caching
À medida em que as aplicações precisam de mais memória física, o sistema vai abrindo mão do espaço que estava usando para o cache em prol delas.
Desalocar cache é tão simples e fácil que é feito em tempo real.
Uma vez que todo o conteúdo do cache é sempre uma cópia de algo que já se encontra gravado em disco, portanto seu espaço, ou pode ser disponibilizado imediatamente, ou já está sempre prestes a ser liberado nos próximos segundos.
O fato é que realocar o espaço usado para caching tem zero impacto na performance das aplicações.
Tendo isto em mente, quando nos referimos a memória física “livre”, podemos estar incluindo ou não a que está sendo usada pelo cache.
linux-memória-ram-livre
Esta é a maneira como todos os sistemas operacionais modernos trabalham. Na hora de exibir a quantidade de memória livre, contudo, alguns incluem o que está ocupado pelo cache, outros não.
Concordo com alguns autores que, ao falar de “memória livre”, faz mas sentido incluir a parte ocupada pelo cache — já que é instantaneamente disponibilizada ao ser requisitada pelas aplicações.
No Linux, ao executar o comando free, ele exibe as duas situações:

free -h
              total        used        free      shared  buff/cache   available
Mem:           2,0G        207M        1,2G         55M        521M        1,7G
Swap:          6,7G          0B        6,7G

No Linux, o comando free, inclui valor do cache na coluna “disponível” (available).
Se preferir ver os valor do cache destacado em uma coluna, use as opções ‘-hwt’:

free -hwt
              total        used        free      shared     buffers       cache   available
Mem:           2,0G        491M        262M        127M        2,0M        1,2G        1,3G
Swap:          6,7G        144K        6,7G
Total:         8,7G        491M        7,0G

Como o Linux usa o swap

Este tópico será explicado de maneira básica, aqui.
Sugiro a leitura de Perguntas e respostas sobre o SWAP, caso você queira saber mais sobre o assunto.
Uma vez preenchida toda a memória física disponível na sua máquina, não há mais espaço suficiente para o cache garantir a velocidade do fluxo de dados entre as mídias físicas e a memória.
Neste caso, o Linux irá realocar espaço na memória, usado por aplicações inativas (ou pouco usadas), da memória RAM, para o swap (no disco rígido), com objetivo de ter de volta algum espaço para operar com o cache.
Isto não acontece como fruto de uma decisão simples. Não existe “um percentual” de uso da memória a partir do qual o sistema automaticamente começa a fazer swapping.
Há um algoritmo mais complexo envolvido, a partir do qual o Linux decide que é hora de levar dados da RAM para o disco.
O algoritmo leva vários fatos em conta. Este processo pode melhor ser descrito por “quanta pressão há para alocar novos bytes de memória”.
Se houver muita pressão para alocar novos blocos de memória, também haverá mais chance de que alguns outros blocos sejam “swapeados” para criar mais espaço na memória. Se houver menos pressão, as chances serão menores.
A variável que regula a pressão do cache (ou cache pressure), pode ser definida, junto com o swappiness“.
Se quiser saber como fazer isto, leia Como reduzir o uso do swap para melhorar o desempenho.
A menos que você saiba o que está fazendo, em computadores de uso genérico, não é recomendável alterar estas variáveis.
É comum vilanizarmos o swap. De modo geral, contudo, ele é uma coisa muita boa.
Você pode ser penalizado na performance do seu sistema, por uso ocasional do swap. Mas esta situação traz mais ganhos à responsividade e à estabilidade geral do sistema.
Ao reduzir o valor do swappiness, permite-se que a quantidade de memória cache diminua um pouco mais do que iria normalmente — mesmo que, de alguma forma, ela pudesse ser útil ao sistema.
O uso de valores baixos para a variável swappiness, traz o risco de tornar um computador (de uso genérico) mais lento — por que ele terá menos espaço para fazer caching.
Cabe a você determinar se, no seu caso específico, esta relação pode ser interessante e trazer ganhos de desempenho
Desabilitar completamente o swap, pode trazer riscos a estabilidade do seu sistema, principalmente se ocorrer de toda a memória física vir a ser ocupada.

O que acontece no sistema quando ele está atolado e fazendo uso pesado do swap?

Com alguma frequência, acontece de percebermos que nosso computador parece atolado de tarefas, super lento e o led indicador de atividade no disco está “quase queimando”.
Neste caso, aparentemente, o sistema está enviando uma quantidade tremenda de dados da memória RAM para o HD (ou SSD).
Culpar o swap pela situação, é uma maneira inadequada de abordar o problema.
Se o swapping realmente atingiu este extremo, o fato é que a memória física está prestes a se esgotar — e o swapping é justamente quem está evitando o travamento do sistema ou evitando que este saia “matando” processos a esmo, para conseguir se manter em pé.
Sem o swapping, numa situação como esta, processos irão colidir e morrer (crash n’ die).
Neste caso, o que se tem é um sintoma de problemas mais profundos.
Se o seu computador tivesse memória suficiente, para a execução de todas as suas tarefas, o espaço de troca (swap) serviria apenas para garantir que a memória fosse usada de forma eficiente.
Remover o swap ou restringir arbitrariamente seu uso não vai mudar o fato de que você tem um hardware com pouca memória física para executar suas aplicações.

Quase tudo do que se fala do swap e cache, aqui, vale para qualquer sistema operacional atual. Não se restringe ao Linux, portanto.

O Linux é um sistema operacional extremamente amadurecido e testado em condições das mais adversas (nos computadores mais exigidos do mundo, inclusive).
Acredite, o algoritmo que cuida da gestão da memória, escolhendo os dados menos usados para “swapear” pro disco, é muito eficiente — e a grande maioria dos usuários jamais irá precisar alterar suas variáveis e seus parâmetros de trabalho.
Em um sistema desktop, pouco usado, há uma situação bastante conhecida em que o usuário chega, após algum tempo em que a máquina estava sem uso, e tem que esperar alguns segundos (que parecem horas) até que se torne disponível novamente.
Esta demora é resultante do trabalho de mover de volta (do disco para a memória RAM) os processos que estavam ociosos.
Isto é comum quando deixamos a máquina ligada durante a noite, realizando alguma tarefa, como downloads, checagem antivírus, backup etc., enquanto dormimos.
De manhã, o sistema não tem como prever que você vai querer usar o navegador, que ficou inativo durante horas. Portanto, você terá que esperar um pouco.
Este é um dos pontos “chatos” de deixar o swap habilitado e por conta do sistema. Se você desabilitá-lo, esta lentidão, após o backup (por exemplo), não irá mais ocorrer. Em compensação, o sistema irá rodar um pouco mais lento, durante o uso diário — na medida em que haverá menos espaço para cache.
Outro fator a ser considerado, é a perda da proteção no caso de faltar memória física para suas aplicações — neste caso, o sistema vai arriar.

A maneira mais eficiente, em termos de custos, de resolver lentidão associada ao uso do swap pelo sistema, é aumentar sua memória física.
Se isto não for possível, avalie trocar suas aplicações por outras mais leves.
Desabilitar ou restringir o uso do swap é uma das soluções menos eficazes — uma vez que ele é apenas um mecanismo do sistema, usado para lidar com situações em que a memória física se tornou escassa.

Em sistemas com grande quantidade de memória RAM, o swap pode ser desabilitado com segurança?

Nos dias atuais (veja a data do post), 8 Gb de memória RAM é uma grande quantidade de memória — se estivermos falando de uma distro Linux comum, para uso genérico.
Neste cenário, raramente o usuário irá chegar ao ponto de precisar de swap.
Ainda assim, é desnecessário desativar o swap — lembre que ele tem outras utilidades.
Tampouco há necessidade de ajustar o swappiness — o sistema “sabe” que há bastante espaço na memória RAM para as aplicações e para o cache e nunca irá tomar a decisão de usar o swap.
Se, ainda assim, você quiser desabilitar o swap e reduzir o swappiness, o sistema continuará funcionando bem. Simplesmente não fará diferença.
Nos raros casos em que o sistema precisar lançar mão do swap, vai ser bom tê-lo à disposição.
Deixar os valores padrão, portanto, é a opção pela segurança e pela eficiência — tendo ou não uma grande quantidade de memória.

Como o swap atua para tornar o meu sistema mais rápido?

A transferência de dados entre a memória física e o swap (em HD ou SSD) é uma operação lenta.
Porém, é uma atitude que o kernel só toma quando tem certeza de que os benefícios superam seus custos.
Um exemplo disto é quando a aplicação ativa no seu sistema cresceu no uso da memória a ponto de não deixar mais espaço livre para o cache — ocasionando uma perda sensível na eficiência da transferência de dados.
Neste caso, há benefícios em mover porções inativas ou pouco usadas da memória para o swap, liberando alguma quantidade de memória suficiente para agilizar o fluxo de dados do cache.
Algumas aplicações podem também precisar de uma grande quantidade de dados na hora de iniciar. A pressão por recursos é aliviada logo após seu completo carregamento.
Se o seu sistema já estiver sobrecarregado, de antemão, o swap pode evitar um crash, durante este processo.

Conclusão

Não faça deste caso, um dilema Tostines.
Não é o swap que torna o seu sistema mais lento. É o contrário.
É por estar muito lento, que seu sistema faz uso deste recurso.

As pessoas associam a lentidão do sistema ao uso do swap, por que seu uso acontece quando o sistema está perto da inanição por recursos de memória.
O swap, antes de estar atrapalhando a sua vida, pode estar salvando o seu dia de trabalho.
Se ele está “salvando demais” o seu dia, em vez de fazer dele um vilão suas ações precisam ter como alvo o problema certo — a falta de recursos para rodar as aplicações atuais. Ou muda as aplicações, ou aumenta os recursos.

Referências

Como verificar a memória swap no Linux.
Como criar um arquivo swap no Ubuntu.
Perguntas e respostas sobre o swap.
http://askubuntu.com/questions/184217/why-most-people-recommend-to-reduce-swappiness-to-10-20

Como obter melhor desempenho do swap no seu sistema com o zswap.

O ZSWAP é um sistema de cache leve e comprimido para páginas da memória swap.
Ele pega páginas que estão prestes a ser movidas para o swap e as comprime em um pool de memória dinamicamente alocado na RAM.
O zswap é um recurso que pode ser útil a alguns usuários e ainda não foi testado em um número consistente de configurações — e deve ser considerado como experimental, portanto.
Entre os potenciais benefícios obtidos com o seu uso, citam-se:

  1. Usuários de máquinas com capacidade de memória física (RAM) limitada, podem reduzir o impacto que o uso do swap causa na performance do sistema.
  2. Máquinas virtuais que compartilham os mesmos recursos de E/S podem reduzir drasticamente a pressão da concorrência pelo uso do swap.
  3. Usuários de drives ou partições SSD, dedicadas ao swap, podem estender a vida útil de seus dispositivos, uma vez que este recurso reduz a necessidade constante de escrita.

Em troca de um uso mais intenso de ciclos da CPU, o zswap reduz o fluxo de E/S no swap.
Esta relação pode trazer uma melhora significativa na performance do sistema — isto é, se a leitura do cache comprimido for mais rápida que a leitura de um dispositivo swap.

Como verificar se posso usar o zswap no meu sistema

Este recurso já está presente na maioria das distribuições GNU/Linux e, portanto, só precisa ser ativado.
Os arquivos de configuração podem ser encontrados em /sys/module/zswap.
arquivos de configuração do zswap.
Se este diretório existe, então o recurso também estará presente e poderá ser ativado e usado.
Pode ser habilitado no runtime, com uma única linha de comando — como veremos, a seguir.
A partir daí, ele passa a armazenar as páginas swapeadas pelo sistema.
A qualquer momento você também pode desabilitá-lo. Quando isto acontece, ele simplesmente para de receber as páginas de swap e vai se esvaziando, à medida em que seu conteúdo perca sua validade ou seja transferido de volta à memória.
Se houver a necessidade de esvaziar imediatamente o conteúdo do swap, sempre é possível executar o comando swapoff — conforme ensinamos aqui.

Como verificar as suas configurações atuais de zswap

As configurações atuais (runtime) podem ser vistas no diretório /sys/module/zswap/parameters/, dentro de seus respectivos arquivos.
Captura de tela da configuração do zswap
Use os comandos abaixo para verificar de que forma o zswap se encontra configurado no seu sistema:

ls -lah /sys/module/zswap/parameters/; cat /sys/module/zswap/parameters/*
total 0
drwxr-xr-x 2 root root    0 Mar 16 10:42 .
drwxr-xr-x 3 root root    0 Mar 16 10:42 ..
-rw-r--r-- 1 root root 4,0K Mar 16 10:42 compressor
-rw-r--r-- 1 root root 4,0K Mar 16 10:42 enabled
-rw-r--r-- 1 root root 4,0K Mar 16 10:42 max_pool_percent
-rw-r--r-- 1 root root 4,0K Mar 16 10:42 zpool

lzo
N
20
zbud

A primeira parte da listagem exibe os arquivos contidos no diretório /sys/module/zswap/parameters/ e a segunda parte exibe o conteúdo de cada arquivo, respectivametne:

  • compressor — abriga o método de compressão usado. Pode ser LZO ou LZ4.
    O ajuste padrão é LZO, que usa uma taxa de compressão menor e, portanto, oferece mais velocidade ao processo.
  • enabled — indica quando o zswap esta habilitado (enabled) ou desabilitado (disabled).
    Os valores podem ser:

    • 0 ou N: para desabilitado (padrão)
    • 1 ou Y: para habilitado
  • max_pool_percent — delimita a quantidade máxima de memória que pode ser utilizada pelo pool de compressão.
  • zpool — determina o tipo de zpool a ser usado. O padrão é zbud — que aloca exatamente 1 página para armazenar 2 páginas comprimidas, o que implica em uma taxa de compressão de 2:1 ou “pior” (uma vez que o zbud pode não preencher completamente cada página).

O que é o zbud e o zpool

O zbud é um dispositivo do sistema, com o propósito especial de armazenar páginas comprimidas (“zpages“) na memória.
Projetado para armazenar até 2 páginas comprimidas por página em memória física.
Embora esta abordagem traga limitações à densidade de armazenamento, é mais eficiente no final das contas.
O zpool é um alocador de memória especial para zpages.
Os pools de memória permitem que softwares possam reservar, acessar e liberar blocos de memória representados por handles em runtime.
Este recurso é usado por vários algoritmos de compressão.

Como ativar o zswap

O zswap faz uso uso do zpool para gerenciar o pool de memória comprimida.
O pool se expande de acordo com a demanda do sistema. Ele também se contrai à medida em que páginas comprimidas são liberadas.
Se você alterar os parâmetros, no runtime, o zswap não apaga o que foi feito. Ele apenas passa a trabalhar de acordo com os novos parâmetros.
Para ativar o zswap, no kernel runtime, basta mudar o arquivo ‘enabled’:

echo '1' > /sys/module/zswap/parameters/enabled 

Para desativar, edite o comando acima, mudando o valor 1 para 0:

echo '0' > /sys/module/zswap/parameters/enabled 

Da mesma forma, é possível alterar os outros parâmetros, através dos arquivos correspondentes.
As alterações terão efeito apenas para a sessão atual. Ao desligar e ligar a máquina, seus valores voltam ao padrão.

Outras formas de habilitar o zswap no Linux

Para escrever este artigo, usei uma máquina Debian 8.3 “Jessie”. Não testei o recurso em outras distribuições — mas é razoável acreditar que irá funcionar do mesmo jeito no Ubuntu e em outras distro baseadas no Debian.
Você pode também ativar o zswap no menu do GRUB, na inicialização do sistema:

  1. Pressione a tecla Shift, durante o boot, para entrar no menu do GRUB.
  2. Edite a linha de comando, incluindo zswap.enabled=1 ao final dela.
  3. Pressione a tecla F10 para retomar a inicialização do Linux.

Se você tem intimidade com a configuração do GRUB, pode editá-lo e incluir o parâmetro zswap.enabled=1 ao final da entrada GRUB_CMDLINE_LINUX_DEFAULT.

Referências

https://www.kernel.org/doc/Documentation/vm/zswap.txt.
http://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=4e2e2770b1529edc5849c86b29a6febe27e2f083.
http://dcjtech.info/topic/the-linux-kernels-compressed-memory-pages/.
https://www.ibm.com/developerworks/community/blogs/fe313521-2e95-46f2-817d-44a4f27eba32/entry/new_linux_zswap_compression_functionality7?lang=en.
https://bbs.archlinux.org/viewtopic.php?id=169585.

Ferramentas de caching para WordPress

Se você tem um blog ou site rodando sobre a plataforma do WordPress, pode usufruir de algumas ferramentas e plugins de caching, que podem melhorar sensivelmente sua velocidade.
As dicas que seguem podem também ser úteis, caso você esteja experimentando alguma lentidão no acesso ao seu site.
Se você não está tendo problemas com spam, então é possível que o servidor esteja acionando o seu banco de dados MySQL mais do que deveria.
wordpress logo
Uma vez que o WordPress depende (e muito) do banco de dados, ele faz algumas consultas ao MySQL, para obter o conteúdo necessário para mostrar nas páginas do site.
Se você tem grandes sites linkando ou direcionando tráfego para você (que ótimo!) isto pode acabar criando um gargalo — lentidão no acesso ao seu conteúdo.

Ferramentas de caching e plugins

O caching é um dispositivo de memória intermediário, cuja função é acelerar o processo de entrega de dados.
Como ferramenta, ele é especialmente eficiente quando os mesmos dados são requisitados muitas vezes repetidas — pense nos seus posts mais lidos.
O WordPress tem, em seu repositório, uma boa quantidade de plugins disponíveis que prometem diminuir o tempo de carregamento das suas páginas e reduzir a carga de trabalho dos servidores no seu provedor.
Você precisa usar, pelo menos, um deles.

O caching consiste no armazenamento temporário e intermediário de informações requisitadas repetidas vezes no seu site.
Com este recurso, o usuário não chega a acionar o banco de dados para obter o conteúdo do seu site ou blog — e, portanto, pode demorar um pouco para ver as últimas atualizações feitas

Segue uma lista de plugins comuns, que podem ser usados para aumentar a eficiência com que suas páginas carregam para seus leitores.
Você pode encontrá-los na área administrativa do seu blog WordPress, no painel Plugins — use a caixa de busca para encontrá-los pelos seus nomes.
Catptura de de tela do painel administrativo WordPress

WP Super Cache

Cria um arquivo estático de seu site e o carrega, em vez de usar o PHP para gerar a informação.
Como continuação do projeto WP-Cache, este plugin inclui novos recursos.
Alguns provedores o fornecem junto com o serviço One-Click Install.
Para quem usa um serviço de shared hosting ou provedor compartilhado, esta é a melhor opção.

Hyper Cache

Este é provavelmente um dos plugins de caching mais fáceis de usar.
Se você achar o WP Super Cache muito complicado, o Hyper Cache costuma atender às necessidades da maioria dos usuários.

W3 Total Cache

Este plugin é também excelente e tem atraído elogios e atenção da comunidade.
Parte do hype que envolve esta ferramenta é que ela inclui recursos de CDN

CDN é uma sigla para “Content Delivery Networks” ou “redes de entrega de conteúdo”.
Trata-se de uma rede de servidores dispersos geograficamente.
Estes servidores armazenam conteúdos de sites em cache e o entregam a usuários baseados em sua localização geográfica.

Se a maior parte do seu público está localizado em uma área mais restrita (seu município ou estado), você provavelmente não precisa deste recurso.

WP Widget Cache

Este plugin trabalha em conjunto com os anteriores (acima), para melhorar o desempenho do seu site.
Seu foco é nos widgets e pode ser útil se você tiver muitos deles em uso


WordPress Oficial logo
Lembre-se que plugins também “pesam” no seu site e você não deve usá-los em excesso.
Há muitos outros plugins de cache disponíveis para WordPress, que você pode testar e ver se se adequam às suas necessidades e às de seu público.
Se quiser, comente sobre as soluções que você encontrou, nos comentários.