
Não consigo encontrar nenhuma boa informação sobre os kernels rt
do lowlatency
Linux.
Eu estou me perguntando por que alguém farianãodeseja usar um kernel de baixa latência.
Além disso, se alguém puder dizer quais são as diferenças específicas, isso também seria ótimo.
Responder1
As diferentes configurações, “genérica”, “baixa latência” (conforme configurada no Ubuntu) e RT (“tempo real”), tratam de equilibrar taxa de transferência versus latência. Os kernels genéricos favorecem o rendimento em vez da latência, os outros favorecem a latência em vez do rendimento. Assim, os usuários que precisam mais de rendimento do que de baixa latência não escolheriam um kernel de baixa latência.
Comparado à configuração genérica, o kernel de baixa latência altera as seguintes configurações:
- IRQs são encadeados por padrão, o que significa que mais IRQs (ainda nãotodosIRQs) podem ser antecipados e também podem ser priorizados e ter sua afinidade de CPU controlada;
- a preempção está habilitada em todo o kernel (
CONFIG_PREEMPT
em vez deCONFIG_PREEMPT_VOLUNTARY
); - odepuração de latênciaas ferramentas estão habilitadas, para que o usuário possa determinar quais operações do kernel estão bloqueando o progresso;
- a frequência do temporizador está definida para1000Hzem vez de250Hz.
Kernels RT adicionadosuma série de patchesao kernel principal e mais alguns ajustes de configuração. O objetivo da maioria desses patches é permitir mais oportunidades de preempção, removendo ou dividindo bloqueios, e reduzir a quantidade de tempo que o kernel gasta lidando com tarefas ininterruptas (notavelmente, melhorando os mecanismos de registro e usando-os menos). . O objetivo de tudo isso é permitir que o kernelcumprir prazos,ou sejagarantir que, quando for necessário lidar com alguma coisa, não esteja ocupado fazendo outra coisa; isso não é o mesmo que alto rendimento ou baixa latência, mas corrigir problemas de latência ajuda.
Os kernels genéricos, configurados por padrão na maioria das distribuições, são projetados para serem um compromisso “sensato”: eles tentam garantir que nenhuma tarefa possa monopolizar o sistema por muito tempo e que as tarefas possam alternar com razoável frequência, mas sem comprometer o rendimento. — porque quanto mais tempo o kernel gasta considerando se deve trocar tarefas (dentro ou fora do kernel), ou manipulando interrupções, menos tempo o sistema como um todo pode gastar “trabalhando”. Esse compromisso não é bom o suficiente para cargas de trabalho sensíveis à latência, como processamento de áudio ou vídeo em tempo real: para essas cargas, os kernels de baixa latência fornecem latências mais baixas às custas de alguma taxa de transferência. E para requisitos de tempo real, os kernels de tempo real removem tantos bloqueadores de baixa latência quanto possível, às custas de mais rendimento.
As distribuições principais do Linux são instaladas principalmente em servidores, onde tradicionalmente a latência não é considerada tão importante (embora se você fizer uma análise de desempenho percentil e se preocupar com o desempenho percentil superior, você pode discordar), então os kernels padrão são bastante conservador. Os usuários de desktop provavelmente deveriam usar kernels de baixa latência, conforme sugerido pela própria documentação do kernel. Na verdade, quanto mais kernels de baixa latência forem usados, mais feedback haverá sobre sua relevância, o que ajuda a obter melhorias geralmente aplicáveis nas configurações padrão do kernel; o mesmo vale para os kernels RT (muitos dos patches RT são destinados, em algum momento, ao kernel principal).
Esta apresentação sobre o temafornece muitos antecedentes.
Desde a versão 5.12 do kernel Linux,“preempção dinâmica”pode ser habilitado; isso permite que o modelo de preempção padrão seja substituído na linha de comando do kernel, usando opreempt=
parâmetro. Atualmente, isso oferece suporte none
a (servidor), voluntary
(desktop) e full
(desktop de baixa latência).
Responder2
Stephen Kitt explicou as configurações e o equilíbrio e tudo de bom nos parâmetros técnicos. Gostaria de oferecer apenas uma pequena distinção intuitiva:
Você está em um safári, andando pelo terreno em um jipe. Sua presa está correndo. Quando a presa está na mira, você puxa o gatilho e o rifle atira - o cálculo é simples - presa na mira = acertar, presa fora da mira = errar - você precisa desesperadamentebaixa latência- você então se recupera, recarrega o rifle, encontra outra presa - não há necessidade de velocidade extra, nem de regularidade.Latênciaé tudo.
Você está convertendo um vídeo desse safari. É longo, leva horas. Você não se importa quando um determinado quadro é processado e se alguns quadros levam mais tempo para serem processados do que outros. Você precisa terminar o processo o mais rápido possível - melhorTaxa de transferênciasignifica menos horas, nada mais importa
Você está recebendo telégrafo - apenas shorts, longos e espaços - Morse é fácil de decifrar e você não precisa saber exatamente quando cada pulso começou ou terminou, mas você precisa de umgarantia, que você faznão percaqualquer um deles - você precisatempo real(pode ser lento, o telégrafo não é tão rápido, masdeve ser regular
Nestes três exemplos você seleciona claramente apenas um doslatência,Taxa de transferênciaouregularidade, sacrificando outros dois - por razões óbvias. E apenas em um você realmente deseja baixa latência, se não puder ter os três ao mesmo tempo.
Responder3
Em termos leigos:
- Se você não dá trabalho regularmente ao seu PC, o kernel de baixa latência é para você.
- Se você está constantemente dando ao seu PC tarefas intensivas de CPU, então o kernel genérico é para você.
- Se você usa seu PC apenas casualmente para navegar, reproduzir vídeos, música... então a baixa latência é para você.
- Se você estiver jogando, a diferença teórica entre baixa latência e genérica seria que a baixa latência venceria em todos os cenários, exceto um; carregamento de nível, mas isso depende mais de você ter um SSD ou não e da qualidade do SSD, porque seu SSD básico funciona com velocidade de 1X, enquanto seu SSD PCI-Express mais alto tem velocidade de 6X. Um disco rígido tradicional tem velocidade de 0,1X. Então, sim, um SSD pode ser 60 vezes mais rápido que um disco rígido tradicional.
Basicamente, o kernel genérico realiza a maior parte do trabalho no menor tempo, enquanto o kernel de baixa latência torna o PC mais responsivo; assumindo que nenhum bug foi encontrado no kernel ou no sistema.
Para a maioria das pessoas, o kernel de baixa latência faz mais sentido. Mas se você está sempre dando muito trabalho ao seu PC, então o kernel genérico é para você.
Outra maneira de dizer se 90% do tempo a carga da CPU em todos os núcleos é <60%, então o kernel de baixa latência é para você. Se, por outro lado, a carga da CPU em todos os núcleos for superior a 80%, 90% ou mais do tempo, então o kernel genérico é para você.
Questionário: Qual kernel teria melhor pontuação em um benchmark? Enquanto a latência for ignorada como parâmetro de benchmark, o genérico sempre vence a corrida, mas a latência baixa é como ter um polvo ao seu lado pronto para delegar.
Responder4
Porque há uma compensação. Trocar processos ou entrar/sair de interrupções leva tempo. Por exemplo, executar o agendador em 1000 Hz em vez de 250 Hz significa que você terá uma interrupção do temporizador e potencialmente alternará os processos quatro vezes mais. Isso pode permitir que um processo reaja mais rapidamente porque sua execução é permitida com mais regularidade. No entanto, como ser humano, você provavelmente não notará nenhuma diferença (250 Hz significa a cada 4 ms, o que já é muito mais rápido do que qualquer tempo de reação humano).
A quantidade total de poder de processamento ou taxa de transferência de E/S é limitada e chamar o agendador com mais frequência significa apenas que você desperdiçará uma parte dele.