O Alibaba Cloud Linux 2 com kernel versão 4.19.91-24.al7 ou posterior e o Alibaba Cloud Linux 3 com kernel versão 5.10.46-7.al8 ou posterior oferecem suporte ao recurso group identity. Use esse recurso para configurar diferentes identidades em grupos de controle (cgroups) de CPU e definir as prioridades dos processos (tarefas) nesses cgroups.
Informações básicas
Ao implantar tarefas sensíveis a latência e tarefas de computação na mesma instância, o escalonador do kernel Linux deve oferecer mais oportunidades de escalonamento às tarefas de alta prioridade. Isso minimiza a latência de escalonamento e reduz o impacto das tarefas de baixa prioridade no kernel. Para esse cenário, o Alibaba Cloud Linux disponibiliza o recurso group identity e adiciona interfaces para configurar prioridades de escalonamento em cgroups de CPU. As tarefas com diferentes prioridades apresentam as seguintes características:
Tarefas de alta prioridade têm latência mínima de ativação.
-
Tarefas de baixa prioridade não afetam o desempenho das tarefas de alta prioridade.
A ativação de tarefas de baixa prioridade não prejudica o desempenho das tarefas de alta prioridade.
Tarefas de baixa prioridade não compartilham unidades de hardware nem causam impactos negativos no desempenho das tarefas de alta prioridade.
Pré-requisitos
No Alibaba Cloud Linux 2 com kernel versão
4.19.91-26,4.19.91-26.1,4.19.91-26.2ou4.19.91-26.3, o recurso group identity vem desativado no kernel. Execute o comandouname -rpara consultar a versão do kernel do Alibaba Cloud Linux 2.No Alibaba Cloud Linux 3 com kernel versão
5.10.112-11.al8,5.10.112-11.1.al8,5.10.112-11.2.al8,5.10.134-12.al8,5.10.134-12.1.al8ou5.10.134-12.2.al8, o recurso group identity vem desativado no kernel.
O uso do recurso group identity no Alibaba Cloud Linux 2 com kernel entre as versões
4.19.91-25.1.al7e4.19.91-25.5.al7causa tempo de inatividade. Nesse caso, atualize o kernel para a versão4.19.91-25.6.al7ou posterior. Para mais informações, consulte a seção Atualizar o kernel do tópico "Alterar a versão do kernel".-
Se o Alibaba Cloud Linux 3 com kernel versão
5.10.134-12.2.al8utilizar a arquitetura x86_64, execute os comandos a seguir para ativar o recurso group identity:yum makecache sudo yum install scheduler-group-identity.x86_64 -y No Alibaba Cloud Linux 2 com kernel versão
4.19.91-26.4ou posterior e no Alibaba Cloud Linux 3 com kernel versão5.10.134-13.al8ou posterior, a interface/proc/sys/kernel/sched_group_identity_enabledfoi adicionada para permitir a ativação do recurso group identity. Antes de usar o recurso, execute o comandosudo sh -c 'echo 1 > /proc/sys/kernel/sched_group_identity_enabled'para ativá-lo.
Funcionamento do recurso group identity
O recurso group identity permite configurar identidades em cgroups de CPU para definir as prioridades das tarefas nesses cgroups. Esse recurso baseia-se em uma arquitetura de árvore rubro-negra dupla. Uma árvore rubro-negra de baixa prioridade, baseada na árvore rubro-negra da fila de escalonamento do Completely Fair Scheduler (CFS), armazena tarefas de baixa prioridade.
Ao escalonar tarefas com identidades configuradas, o kernel as processa de acordo com suas prioridades. A tabela a seguir descreve as identidades em ordem decrescente de prioridade.
Identidade | Descrição |
| Identifica uma tarefa de alta prioridade. Tarefas de alta prioridade têm mais oportunidades de preemptar recursos do que tarefas de prioridade normal ou baixa. Quando o CFS escalona tarefas de alta prioridade, podem ocorrer os seguintes cenários:
|
| Identifica uma tarefa de prioridade normal. Tarefas de prioridade normal têm mais oportunidades de preemptar recursos do que tarefas de baixa prioridade. Quando o CFS escalona tarefas de prioridade normal, podem ocorrer os seguintes cenários:
|
| Identifica uma tarefa de baixa prioridade. Quando o CFS escalona tarefas de baixa prioridade, podem ocorrer os seguintes cenários: Se uma tarefa |
As identidades acima são aplicadas com base nas políticas de gerenciamento de recursos dos cgroups de CPU.
Para tarefas em cgroups de CPU do mesmo nível, as prioridades de identidade entram em vigor.
Para tarefas em cgroups de CPU de níveis diferentes, as prioridades de identidade não se aplicam às tarefas nos cgroups pai, mas entram em vigor para as tarefas nos cgroups filho.
Para tarefas com a mesma prioridade de identidade, a disputa por recursos segue as políticas do CFS. Observe que o tempo de execução de tarefas identificadas como
ID_UNDERCLASSouID_NORMALpode não atingir o valor mínimo.
Outras identidades
|
Identidade |
Descrição |
|
|
Identifica uma tarefa SMT expeller. Quando uma tarefa SMT expeller é executada em uma CPU SMT, ela expulsa as tarefas identificadas como |
|
|
Especifica que, ao ser ativada, a tarefa tenta encontrar CPUs ociosas dentro dos limites das políticas do escalonador. |
|
|
Utilizada em conjunto com o parâmetro de kernel |
Interfaces
-
Interfaces para configuração de identidades
O recurso group identity fornece as seguintes interfaces para configurar identidades de tarefas:
/sys/fs/cgroup/cpu/$cg/cpu.identitye/sys/fs/cgroup/cpu/$cg/cpu.bvt_warp_ns. A variável $cg especifica o nó de diretório do cgroup filho onde a tarefa é executada. Antes de usar essas interfaces, observe os seguintes pontos:A interface
cpu.bvt_warp_nsé uma interface de configuração rápida. O valor gravado nessa interface é convertido em valores de identidade.Use as interfaces
cpu.identityecpu.bvt_warp_nspara alterar as identidades dos cgroups.O valor de identidade gravado pela interface
cpu.identitysubstitui o valor gravado anteriormente pela interfacecpu.bvt_warp_ns, mas o valor da interfacecpu.bvt_warp_nspermanece inalterado.O valor de identidade gravado pela interface
cpu.bvt_warp_nssubstitui o valor gravado anteriormente pela interfacecpu.identity, mas o valor da interfacecpu.identitypermanece inalterado.Utilize apenas uma das interfaces para configurar as identidades das tarefas. Não use ambas simultaneamente.
Caso não tenha familiaridade com operações relacionadas ao kernel do sistema operacional, evite usar a interface
cpu.identity.
A tabela a seguir descreve as interfaces.
Interface
Descrição
cpu.identityO valor padrão é 0, que especifica a identidade
ID_NORMAL.Esta interface é um campo de 5 bits. Valores válidos para cada bit: 0 e 1. O valor 0 indica que a identidade não está assumida. O valor 1 indica que a identidade está assumida. Descrição de cada bit:
Se a interface estiver vazia, a identidade
ID_NORMALserá usada.Bit 0: especifica a identidade
ID_UNDERCLASS.Bit 1: especifica a identidade
ID_HIGHCLASS.Bit 2: especifica a identidade
ID_SMT_EXPELLER.Bit 3: especifica a identidade
ID_IDLE_SAVER.Bit 4: especifica a identidade
ID_IDLE_SEEKER.
Por exemplo, para definir a identidade de um cgroup como
ID_HIGHCLASSeID_IDLE_SEEKER, defina o bit 1 e o bit 4 como 1 e os demais bits como 0, obtendo o valor binário 10010, que corresponde ao valor decimal 18. Em seguida, execute o comandoecho 18 > /sys/fs/cgroup/cpu/$cg/cpu.identitypara gravar 18 na interface cpu.identity.cpu.bvt_warp_nsO valor padrão é 0, que especifica a identidade
ID_NORMAL. Valores válidos:2: especifica as identidades
ID_SMT_EXPELLER,ID_IDLE_SEEKEReID_HIGHCLASS. O valor correspondente na interface cpu.identity é 22.1: especifica as identidades
ID_HIGHCLASSeID_IDLE_SEEKER. O valor correspondente na interface cpu.identity é 18.0: especifica a identidade
ID_NORMAL. O valor correspondente na interface cpu.identity é 0.-1: especifica as identidades
ID_UNDERCLASSeID_IDLE_SAVER. O valor correspondente na interface cpu.identity é 9.-2: especifica as identidades
ID_UNDERCLASSeID_IDLE_SAVER. O valor correspondente na interface cpu.identity é 9.
NotaPor padrão, o Alibaba Cloud Linux oferece suporte às interfaces cgroup v1. O Alibaba Cloud Linux 3 com kernel versão
5.10.134-13ou posterior na série de kernel 5.10 também oferece suporte às seguintes interfaces cgroup v2 para o recurso group identity:/sys/fs/cgroup/$cg/cpu.identitye/sys/fs/cgroup/$cg/cpu.bvt_warp_ns. A variável $cg especifica o nó de diretório do cgroup filho onde a tarefa é executada. -
Interfaces para ativar ou desativar recursos de escalonamento do kernel
Execute o comando a seguir para visualizar as configurações padrão dos recursos de escalonamento do kernel por meio da interface
sched_features:sudo cat /sys/kernel/debug/sched_featuresA tabela a seguir descreve os recursos de escalonamento do kernel.
Recurso de escalonamento do kernel
Descrição
Valor padrão
ID_IDLE_AVGUse este recurso em conjunto com a identidade
ID_IDLE_SAVERpara contabilizar o tempo de execução das tarefasID_UNDERCLASScomo tempo de ociosidade. Isso garante que nenhuma CPU permaneça ociosa quando apenas tarefasID_UNDERCLASSestiverem em execução, evitando desperdício de recursos.ID_IDLE_AVG: indica que o recurso está ativado.ID_RESCUE_EXPELLEERecurso utilizado em cenários de balanceamento de carga. Se as tarefas não encontrarem recursos de CPU disponíveis, CPUs que estiverem expulsando tarefas
ID_UNDERCLASSserão usadas para balancear a carga. Este recurso ajuda a remover as tarefasID_UNDERCLASSdo estado de expulsão o mais rápido possível.ID_RESCUE_EXPELLEE: indica que o recurso está ativado.ID_EXPELLEE_NEVER_HOTQuando este recurso está ativado, se houver uma solicitação para migrar uma tarefa que está sendo expulsa para outra CPU, o cache quente não causará a negação da solicitação de migração. Isso ajuda a remover as tarefas
ID_UNDERCLASSdo estado de expulsão o mais rápido possível.NO_ID_EXPELLEE_NEVER_HOT: indica que o recurso está desativado.ID_LOOSE_EXPELQuando este recurso está ativado, as CPUs não atualizam o status de expulsão toda vez que selecionam tarefas, mas atualizam automaticamente o status com base no tempo especificado pelo parâmetro de kernel
sched_expel_update_interval. A configuração deste recurso afeta apenas as atualizações de status durante a seleção de tarefas pelas CPUs. As atualizações para interrupções interprocessador (IPIs) não são afetadas.NO_ID_LOOSE_EXPEL: indica que o recurso está desativado.ID_LAST_HIGHCLASS_STAYQuando este recurso está ativado, a última tarefa
ID_HIGHCLASSem execução em uma CPU não pode ser migrada para outra CPU.ID_LAST_HIGHCLASS_STAY: indica que o recurso está ativado.ID_EXPELLER_SHARE_CORESe este recurso estiver ativado, as tarefas
ID_SMT_EXPELLERpodem ser executadas preferencialmente em núcleos físicos onde já existem tarefasID_SMT_EXPELLERem execução.Se este recurso estiver desativado, as tarefas
ID_SMT_EXPELLERsão distribuídas entre os núcleos físicos. Dessa forma, as tarefasID_SMT_EXPELLERnão interferem umas nas outras.
ID_EXPELLER_SHARE_CORE: indica que o recurso está ativado.ID_ABSOLUTE_EXPELNo Alibaba Cloud Linux 3, este recurso foi introduzido na versão de kernel
5.10.134-16.3e pode ser usado na versão5.10.134-16.3ou posterior na série de kernel 5.10. Quando ativado, as tarefasID_UNDERCLASSsão suprimidas absolutamente e não podem ser escalonadas se existirem tarefasID_NORMALouID_HIGHCLASSnas filas de execução. Nos piores cenários, as tarefasID_UNDERCLASSpodem sofrer inanição (starvation). Em cenários de implantação híbrida, avalie as cargas das tarefas com diferentes identidades antes de ativar o recurso.NO_ID_ABSOLUTE_EXPEL: indica que o recurso está desativado.ID_LOAD_BALANCENo Alibaba Cloud Linux 3, este recurso foi introduzido na versão de kernel
5.10.134-16.3e pode ser usado na versão5.10.134-16.3ou posterior na série de kernel 5.10. Quando ativado, o escalonador considera as CPUs que executam apenas tarefasID_UNDERCLASScomo ociosas e tenta migrar tarefasID_HIGHCLASSpara essas CPUs ociosas durante o balanceamento de carga. Durante a migração, o escalonador tenta distribuir as tarefasID_HIGHCLASSentre as CPUs. Isso evita contenção de recursos de CPU e interferência de Hyper-Threading (HT) entre as tarefasID_HIGHCLASS, garantindo que cada tarefa obtenha recursos de CPU suficientes.NO_ID_LOAD_BALANCE: indica que o recurso está desativado. -
Interfaces do
sysctlpara configuração de parâmetros do kernelCapacidades específicas do recurso group identity dependem dos valores dos parâmetros do kernel. A tabela a seguir descreve esses parâmetros.
Parâmetro do kernel
Descrição
Unidade
Valor padrão
/proc/sys/kernel/sched_expel_update_intervalIntervalo no qual o status de expulsão é atualizado automaticamente quando uma CPU seleciona tarefas. Este parâmetro só entra em vigor se o recurso
ID_LOOSE_EXPELestiver ativado.ms
10
/proc/sys/kernel/sched_expel_idle_balance_delayIntervalo mínimo de
idle balancequando uma CPU está expulsando tarefas. Um valor de -1 especifica que oidle balancenão é permitido.Se existirem apenas tarefas
ID_UNDERCLASSem uma CPU e elas estiverem sendo expulsas, a CPU é considerada ociosa. OIdle balanceé executado na CPU para melhorar os efeitos de balanceamento de carga. No entanto, isso pode prejudicar as tarefasID_UNDERCLASS. Defina o parâmetrosched_expel_idle_balance_delaypara mitigar esse problema.ms
-1
/proc/sys/kernel/sched_idle_saver_wmarkLimite (watermark) para o tempo de ociosidade da CPU. Quando uma tarefa
ID_IDLE_SAVERé ativada, ela tenta encontrar uma CPU ociosa cujo tempo de ociosidade exceda o limite especificado.ns
0
/proc/sys/kernel/sched_group_identity_enabledA partir da versão de kernel
4.19.91-26.4, a interface/proc/sys/kernel/sched_group_identity_enabledfoi adicionada para permitir a ativação do recurso group identity. Antes de usar o recurso, execute o comandoecho 1 > /proc/sys/kernel/sched_group_identity_enabledpara ativá-lo.Após a ativação do recurso group identity, não é possível gravar dados na interface
/proc/sys/kernel/sched_group_identity_enabledse o valor da interfacecpu.bvt_warp_nsoucpu.identitydo cgroup for diferente de zero.NotaSe a sua versão de kernel for
4.19.91-26.4.al7,4.19.91-26.5.al7ou4.19.91-26.6.al7, a interfacesched_group_identity_enabledestiver definida como 1 e o valor da interface cpu.bvt_warp_ns do cgroup for diferente de zero, ocorrerão erros ao ler as configurações de/proc/sys/kernel/sched_group_identity_enabled. Trata-se de um bug de leitura que não afeta o uso normal da interface. Esse bug foi corrigido na versão de kernel4.19.91-27.al7e posteriores.N/A
0
Saída de informações
Ao utilizar o recurso group identity, execute o comando a seguir para visualizar diversos parâmetros:
cat /proc/sched_debug
A tabela a seguir descreve os parâmetros de saída.
|
Parâmetro |
Descrição |
|
|
Quantidade de tarefas |
|
|
Quantidade de tarefas |
|
|
Quantidade de tarefas não |
|
|
Indica se há tarefas |
|
|
Indica se há tarefas |
|
|
Tempo acumulado de execução das tarefas |
|
|
Tempo acumulado de execução das tarefas |
|
|
Quantidade de tarefas não |
|
|
Diferença entre os vruntimes mínimos das duas árvores rubro-negras no momento em que a CPU começa a expulsar tarefas. |
|
|
Diferença acumulada entre os vruntimes mínimos das duas árvores rubro-negras causada pelo status de expulsão da CPU. |
|
|
Vruntime mínimo da árvore rubro-negra de baixa prioridade. |