Agora que você está usando o
JACK e tem experimentado alguns parâmetros diferentes você se pergunta: "Será que eu consigo evitar cortes no áudio ou minimizar os erros no JACK?"
Sim, podemos fazer muito mais que o padrão do sistema de desktop nos permite, podemos fazer alguns truques legais para melhorar o desempenho do seu sistema para trabalhar com áudio.
O que eu vou descrever aqui deve ser testado um por um, caso alguma configuração cause algum tipo de problema você pode consertar o erro e lembre-se de sempre criar um backup de qualquer arquivo que você modificar, por exemplo o
/etc/fstab antes de modificar não esqueça de copiar com outro nome para a mesma pasta:
sudo cp /etc/fstab /etc/fstab.bk
Primeiro vamos determinar o seguinte: para que serve um
GNU/Linux rodando em tempo real?
O
Real Time Kernel como é chamado serve para aquelas pessoas que querem o mínimo possível de latência em suas gravações, especialmente se você vai trabalhar com MIDI que te proporciona controlar o programa direto no módulo, teclado, sintetizador, etc.
Se você está tocando um teclado por exemplo, no momento que você aperta uma tecla no mesmo instante você quer ouvir a nota musical, se essa nota leva 1 segundo para chegar na caixa vai ser algo terrível de gravar.
Kernel
A primeira coisa que você deve procurar saber é qual o kernel está rodando. Abra o terminal e use esse comando:
uname -a
Por exemplo o computador que eu estou usando agora enquanto escrevo essa página retornou isso:
Debian 3.2.63-2 x86_64 GNU/Linux
Se você tem um kernel genérico, deve digitar no terminal:
grep -e CONFIG_IRQ_FORCED_THREADING=y -e CONFIG_PREEMPT=y /boot/config-`uname -r`
Se retornar "CONFIG_IRQ_FORCED_THREADING=y" e "CONFIG_PREEMPT=y" você não precisa seguir essa instrução. Caso contrário se aparecer apenas o "Forced Threading" então o seu kernel está pronto para baixar a latência só não está configurado para isso.
Abra o
/etc/default/grub e modifique a linha GRUB_CMDLINE_LINUX_DEFAULT assim:
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash threadirqs"
Salve o arquivo e digite no terminal o comando para atualizar o GRUB:
sudo update-grub
Reinicie o computador e faça alguns testes.
Se a latência diminuiu mas não o suficiente, então instale o
lowlatency:
sudo apt-get install linux-lowlatency
Agora edite o GRUB para poder selecionar o kernel lowlatency. Modifique o /etc/default/grub para ter as seguintes linhas:
...
GRUB_DEFAULT=saved
GRUB_SAVEDEFAULT=true
#GRUB_HIDDEN_TIMEOUT=10
GRUB_HIDDEN_TIMEOUT_QUIET=false
GRUB_TIMEOUT=10
...
Atualize o GRUB e reinicie o computador.
Durante a inicialização selecione "Opções Avançadas" e selecione o "lowlatency Kernel", após isso esse será o kernel padrão toda vez que você reiniciar.
Acesso ao disco
Sistemas de aquivos são importantes para o desempenho dos programas de áudio, especialmente de gravação. Sistemas como ReiserFS na versão menor que 3.6 e fuseblk devem ser evitados, os melhores tipos de sistema de arquivos são os que dão mais valor a arquivos grandes ao invés de arquivos pequenos. No ReiserFS 3.5 o tamanho máximo seria 2 GB enquanto no 3.6 o limite é de 8 TB. Se você vai instalar o seu GNU/Linux agora escolha ext3 ou ext4.
Se o seu sistema de aquivo é ext3 ou ext4 você deve adicionar um parâmetro para diminuir o acesso ao disco (hard drive), abra o arquivo /etc/fstab no seu editor preferido:
sudo gedit /etc/fstab
Na linha onde você vê as partições do seu disco tem uma parte de opções. Por exemplo, em um sistema assim:
/dev/sda / ext4 default 0 0
As opções geralmente estão antes dos dois números finais, no caso eu escrevi aqui a opção é default, então eu vou adicionar "noatime" às opções, então meu fstab fica assim:
/dev/sda / ext4 noatime,default 0 0
Faça isso para todas as partições só não modifique a linha da swap.
SSD
Se você tem um SSD pode ter mais performance se além do noatime adicionar "discard", seu fstab deve ficar mais ou menos assim:
/dev/sda / ext4 discard,noatime,default 0 0
Carregar os arquivos temporários na RAM mais que no HD, pode ser atingido com a seguinte linha no fstab:
tmpfs /tmp tmpfs defaults,noatime,mode=1777 0 0
Swappines
Quão frequente a sua distro usa a partição swap? Se ela usa com muita frequência isso pode prejudicar a performance do programa de áudio, já que informação está sendo escrita no disco, quanto mais a distro usa a memória RAM ao invés da swap melhor.
Cheque o valor atual digitando no terminal:
cat /proc/sys/vm/swappiness
Geralmente será um numero aproximando 60, esse valor está muito alto, vamos diminuir para 10:
sudo sysctl vm.swappiness=10
Para fazer o swappines permanente abra o arquivo
/etc/sysctl.conf e adicione na linha final o seguinte comando:
vm.swappines = 10
Assim, ao reiniciar o computador ele já vai estar com o valor 10 como padrão.
Prioridade aos programas
O computador não sabe qual é a diferença entre o seu navegador da internet e o programa de gravação de áudio, assim você pode dizer para ele qual é a principal tarefa que você quer executar, deixando grande parte dos recursos do computador para essa função.
Para fazer o áudio ter prioridade edite o arquivo
/etc/security/limits.conf ou
/etc/security/limits.d/audio.conf dependendo da sua distro. Se você possui os dois aquivos edite o audio.conf, se você só tem o limits.conf não é preciso criar o audio.conf, edite as mesmas linhas no limits.conf.
@audio - rtprio 99
@audio - memlock unlimited
nice -10
Onde:
- "@audio" se refere ao grupo áudio, lembra o que eu falei sobre o seu usuário no grupo áudio? Então se você quer somente o seu usuário com a prioridade do sistema troque o "@audio" pelo seu nome do usuário:
mauricio - rtpio 99
- "rtprio" é a prioridade em tempo real, no caso eu estou dando prioridade total ao grupo áudio, quanto maior o número no final da linha mais prioridade o grupo tem, os números vão de 1 a 99.
- "memlock" está bloqueando os locais acessados na memória pelo grupo para que mais ninguém acesse aqueles blocos de memória.
- "nice" que traduzindo que dizer "legal", define o quão camarada são os seus programas, um valor positivo eles são uns caras legais, que não estão se importando em dividir os recursos do sistemas com outros programas que também tem prioridade. Um valor negativo faz eles serem mal criados e não dividem os recursos com qualquer um.
CPU
A maioria das distros hoje em dia suportam escala de CPU que monitora e define o quanto a CPU está sendo usada, e no caso de um programa precisar mais CPU o responsável por essa escala libera o uso da CPU. Excelente se você usa um laptop e quer salvar a sua bateria... porém se você usa o desktop ou você precisa trabalhar com áudio o problema que você pode ter é quando o programa de áudio precisa de mais CPU e o responsável pela escala da CPU demora uma fração de segundos para liberar esses recursos, o áudio pode "pular" (dropout/xrun).
cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor
Se retornar "ondemand", você deve mudar para "performance":
echo -n performance | sudo tee /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor
Quer fazer essa configuração em cada reinicialização? Adicione esse código no arquivo
/etc/rc.local:
echo -n performance > /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor
NOTA: no Ubuntu depois de seguir o mencionado acima desabilite o ondemand:
sudo update-rc.d ondemand disable
NOTA: no Debian você pode digitar esse comando ao invés de fazer todas as instruções acima:
sudo cpufreq-set -r -g performance
Na instalação do pacote o script
/etc/init.d/cpufrequtils e a configuração
/etc/default/cpufrequtils, deve ter linhas assim, senão adicione para ficar como abaixo:
ENABLE="true"
GOVERNOR="performance"
MAX_SPEED="0"
MIN_SPEED="0"
Para finalizar, desabilite serviços que você não vai usar, desabilite módulos que não servem para você... vou escrever os comandos que eu uso porque eu tenho esses módulos e hardware, talvez para você alguns vão ser iguais, outros podem ser diferentes, vou comentar o que o comando faz. Você pode criar um script e usar quando necessário, o Google vai ter ajudar a descobrir os comandos corretos para o seu hardware.
# modprobe -r ppdev # Creio que você não usa portas paralelas, para que carregar esse módulo?
# modprobe -r lp # Você não vai usar a impressora enquanto usa música
# modprobe -r uvcvídeo # Você não vai usar a webcam enquanto trabalha com música
# modprobe -r vídeodev # Vídeo e música? Só se você está traduzindo um vídeo.
# modprobe -r ath9k # Wireless driver?
# modprobe -r r8169 # NIC driver?
# modprobe -r btusb # Bluetooth USB?
# /etc/init.d/bluetooth stop & # Vamos parar o Bluetooth?
# /etc/init.d/cups stop & # Para o CUPS/Impressora
# /etc/init.d/networking stop & # Vamos parar a rede? Usa a internet enquanto trabalha com música?
# /etc/init.d/network-manager stop & # Mesma coisa acima
# killall modem-manager # Sério, você usa modem?
# killall wpa_supplicant # Rede sem fio
# modprobe snd-hrtimer # Carregar modules ALSA timer em alta resolução para os seus MIDIs
# echo -n performance > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor # Já expliquei esse comando lembra? Se você está usando um laptop salve sua bateria enquanto não trabalha com áudio e quando trabalhar manda bala no processador.
Teste de latência