Não consigo encontrar nenhuma boa informação sobre os kernels rt
e Linux.lowlatency
Estou me perguntando por que alguém não gostaria de 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.
As diferentes configurações, “genéricas”, “baixa latência” (conforme configuradas no Ubuntu) e RT (“tempo real”), são todas para equilibrar a taxa de transferência versus latência. Os kernels genéricos favorecem a taxa de transferência sobre a latência, os outros favorecem a latência sobre a taxa de transferência. Assim, os usuários que precisam de throughput mais do que precisam de baixa latência não escolheriam um kernel de baixa latência.
Comparado com a configuração genérica, o kernel de baixa latência altera as seguintes configurações:
CONFIG_PREEMPT
em vez deCONFIG_PREEMPT_VOLUNTARY
);Os kernels RT adicionam vários patches ao 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 (principalmente, melhorando os mecanismos de log e usando-os menos) . O objetivo de tudo isso é permitir que o kernel cumpra os prazos , ou seja , garantir que, quando for necessário manipular algo, ele não esteja ocupado fazendo outra coisa; isso não é o mesmo que alta taxa de transferência ou baixa latência, mas corrigir problemas de latência ajuda.
Os kernels genéricos, conforme 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 frequência razoável, mas sem comprometer a taxa de transferência — porque quanto mais tempo o kernel gasta considerando se deve alternar tarefas (dentro ou fora do kernel), ou lidar com 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 esses, os kernels de baixa latência fornecem latências mais baixas às custas de alguma taxa de transferência. E para requisitos em tempo real, os kernels em tempo real removem o maior número possível de bloqueadores de baixa latência, às custas de mais taxa de transferência.
As distribuições de fluxo principal 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 de percentil e se preocupar com o desempenho de percentil superior, poderá discordar), então os kernels padrão são bastante conservador. Os usuários de desktop provavelmente devem usar os 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 destinam-se, em algum momento, ao kernel principal).
Esta apresentação sobre o tema fornece bastante pano de fundo.
Desde a versão 5.12 do kernel Linux, a “preempção dinâmica” pode ser habilitada; isso permite que o modelo de preempção padrão seja substituído na linha de comando do kernel, usando o
preempt=
parâmetro. Atualmente, isso oferece suportenone
a (servidor),voluntary
(área de trabalho) efull
(área de trabalho de baixa latência).Stephen Kitt explicou as configurações e balanceamento e tudo bem 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 não na mira = errar - você precisa desesperadamente de baixa latência - você recupera, recarrega o rifle, encontra outra presa - sem necessidade de velocidade extra, sem necessidade de regularidade. A latência é tudo.
Você está convertendo um vídeo desse safári. É 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 - melhor rendimento significa menos horas, nada mais importa
Você está recebendo telégrafo - apenas shorts, longs e espaços - Morse é fácil de decifrar e você não precisa exatamente quando cada pulso começou ou terminou, mas você precisa de uma garantia de que não perderá nenhum deles - você precisa de tempo real ( pode ser lento, o telégrafo não é tão rápido, mas deve ser regular
Nestes três exemplos, você claramente seleciona apenas um de latência , taxa de transferência ou regularidade , 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.
Em termos leigos:
Basicamente, o kernel genérico faz a maior parte do trabalho no menor tempo, enquanto o kernel de baixa latência torna o PC o mais responsivo; assumindo que nenhum bug seja 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 colocar se 90% do tempo de carga da CPU em todos os núcleos for < 60%, o kernel de baixa latência é para você. Se, por outro lado, a carga da CPU em todos os núcleos for maior que 80%, 90% ou mais do tempo, o kernel genérico é para você.
Quiz: Qual kernel pontuaria melhor em um benchmark? Enquanto a latência for ignorada como parâmetro de referência, o genérico sempre ganha a corrida, mas a baixa latência é como ter um polvo ao seu lado pronto para delegar.
Porque há uma troca. Alternar processos ou entrar/sair de interrupções leva tempo. Por exemplo, executar o agendador em 1000Hz em vez de 250Hz significa que você terá uma interrupção do temporizador e potencialmente alternará processos com quatro vezes mais frequência. Isso pode permitir que um processo reaja mais rápido porque é permitido executar com mais regularidade. No entanto, como humano, você provavelmente não notará nenhuma diferença (250Hz significa cada 4ms, 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 dela.