Confira !!
Em 2020, os engenheiros da Intel trabalhando no kernel do Linux adicionaram detecção de bloqueio dividido para fornecer um aviso quando uma operação atômica abrange várias linhas de cache e requer um bloqueio de barramento global para atomicidade. Um aviso agora não é considerado útil o suficiente, então a intenção de avançar é "tornar a vida miserável" para esses aplicativos de espaço do usuário com comportamento inadequado, diminuindo o desempenho com a esperança de que os desenvolvedores de aplicativos manipulem melhor seu código.
Embora o comportamento padrão seja fornecer um aviso para aplicativos de espaço do usuário que abusam de bloqueios divididos, os patches anteriores permitem eliminar os aplicativos. Bloqueios divididos podem levar pelo menos 1.000 ciclos a mais do que uma operação atômica em uma única linha de cache. Bloqueios divididos resultam no bloqueio de outras CPUs e outros agentes de barramento para controle também - afetando o desempenho geral do sistema.
Essa detecção de bloqueio dividido do Linux contou com recursos modernos da CPU x86_64 para poder gerar uma exceção de verificação de alinhamento ao atingir um bloqueio dividido. O comportamento do kernel existente pode ser ajustado usando o parâmetro do kernel "split_lock_detect=".
O engenheiro da Intel Tony Luck propôs tornar as coisas mais agressivas e "tornar a vida miserável para armários divididos" com patchespostado no início deste ano. Os patches agora enfileirados para o Kernel Linux 5.19 estão tentando desacelerar tanto o aplicativo ofensivo que espera-se que o(s) desenvolvedor(es) resolvam o problema. O novo modo "sequencial" está forçando o acesso sequencial para bloqueios de divisão de espaço do usuário. Por sua vez, este modo também garante que o desempenho geral do sistema seja melhor nessas condições.
Daí uma nova opção para "desacelerá-lo de uma maneira que o torna irritante".
A principal razão para essa mudança é fornecer melhor qualidade de serviço para o restante dos aplicativos em execução no sistema. Testes internos mostram que mesmo com muitos processos dividindo bloqueios, o desempenho do resto do sistema é muito mais responsivo.
1) Bloqueia (interruptamente) até conseguir pegar o semáforo
Se for interrompido, é só retornar. Suponha que o sinal matará a tarefa ou direcionará a execução para longe da instrução que está tentando obter o bloqueio do barramento.
2) Desativa a detecção de bloqueio dividido para o núcleo atual
3) Agenda uma fila de trabalho para reativar a detecção de bloqueio dividido em 2 instantes
4) Retorna
Essa mudança "tornar a vida miserável" foi enviada como as atualizações de bloqueio de divisão x86 para o Kernel Linux 5.19.
Nenhum comentário:
Postar um comentário