Práticas recomendadas - AWS Ground Station

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Práticas recomendadas

EC2Melhores práticas da Amazon

Siga as EC2 melhores práticas atuais e garanta disponibilidade suficiente de armazenamento de dados.

https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-best-practices.html

Agendador Linux

O programador Linux pode reordenar pacotes em UDP soquetes se os processos correspondentes não estiverem fixados em um núcleo específico. Qualquer thread que envie ou receba UDP dados deve se fixar em um núcleo específico durante a transmissão de dados.

AWS Ground Station lista de prefixos gerenciada

É recomendável utilizar a lista de prefixos com.amazonaws.global.groundstation AWS -managed ao especificar as regras de rede para permitir a comunicação da antena. Consulte Trabalhando com listas de prefixos AWS gerenciadas para obter mais informações sobre listas de prefixos AWS gerenciadas.

Limitação de contato único

O AWS Ground Station Agent suporta vários fluxos por contato, mas suporta apenas um único contato por vez. Para evitar problemas de agendamento, não compartilhe uma instância em vários grupos de endpoints de fluxo de dados. Se uma única configuração de agente estiver associada a várias configurações diferentes DFEGARNs, ela falhará no registro.

Executando serviços e processos junto com o AWS Ground Station agente

Ao iniciar serviços e processos na mesma EC2 instância do AWS Ground Station agente, é importante vinculá-los a vCPUs não serem usados pelo AWS Ground Station agente e pelo kernel Linux, pois isso pode causar gargalos e até perda de dados durante os contatos. Esse conceito de vinculação ao específico vCPUs é conhecido como afinidade.

Núcleos a serem evitados:

Como exemplo, usando uma c5.24xlarge instância

Se você especificou

"agentCpuCores": [24,25,26,27,72,73,74,75]"

e correu

echo "@reboot sudo /opt/aws/groundstation/bin/set_irq_affinity.sh '0,1,48,49' 'ffffffff,ffffffff,ffffffff' >> /var/log/user-data.log 2>&1" >>/var/spool/cron/root

em seguida, evite os seguintes núcleos:

0,1,24,25,26,27,48,49,72,73,74,75

Serviços de afinização (systemd)

Os serviços recém-lançados serão automaticamente afinizados com os interrupt_core_list mencionados anteriormente. Se o caso de uso dos serviços lançados exigir núcleos adicionais ou precisar de núcleos menos congestionados, siga esta seção.

Verifique para qual afinidade seu serviço está configurado atualmente com o comando:

systemctl show --property CPUAffinity <service name>

Se você ver um valor vazio comoCPUAffinity=, isso significa que ele provavelmente usará os núcleos padrão do comando acima ...bin/set_irq_affinity.sh <using the cores here> ...

Para substituir e definir uma afinidade específica, encontre a localização do arquivo de serviço executando:

systemctl show -p FragmentPath <service name>

Abra e modifique o arquivo (usando vinano,, etc.) e coloque o CPUAffinity=<core list> na [Service] seção como:

[Unit] ... [Service] ... CPUAffinity=2,3 [Install] ...

Salve o arquivo e reinicie o serviço para aplicar a afinidade com:

systemctl daemon-reload systemctl restart <service name> # Additionally confirm by re-running systemctl show --property CPUAffinity <service name>

Para obter mais informações, visite: Red Hat Enterprise Linux 8 - Gerenciando, monitorando e atualizando o kernel - Capítulo 27. Configurando CPU afinidade e NUMA políticas usando systemd.

Processos de afinização (scripts)

É altamente recomendável que scripts e processos recém-lançados sejam afinizados manualmente, pois o comportamento padrão do Linux permitirá que eles usem qualquer núcleo na máquina.

Para evitar conflitos fundamentais em qualquer processo em execução (como python, scripts bash etc.), inicie o processo com:

taskset -c <core list> <command> # Example: taskset -c 8 ./bashScript.sh

Se o processo já estiver em execução, use comandos como pidoftop, ou ps para encontrar a ID do processo (PID) do processo específico. Com o, PID você pode ver a afinidade atual com:

taskset -p <pid>

e pode modificá-lo com:

taskset -p <core mask> <pid> # Example: taskset -p c 32392 (which sets it to cores 0xc -> 0b1100 -> cores 2,3)

Para obter mais informações sobre o conjunto de tarefas, consulte conjunto de tarefas - página do manual Linux