最佳实践 - AWS Ground Station

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

最佳实践

亚马逊EC2最佳实践

遵循当前EC2的最佳实践,确保足够的数据存储可用性。

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

Linux 调度器

如果相应的进程未固定到特定的内核,Linux 调度器可以重新排序UDP套接字上的数据包。在数据传输期间,任何发送或接收UDP数据的线程都应将自己固定在特定的内核上。

AWS Ground Station 托管前缀列表

在指定允许来自天线的通信的网络规则时,建议使用 com.amazonaws.global.groundstation AWS-managed 前缀列表。有关AWS托管前缀列表的更多信息,请参阅使用AWS托管前缀列表。

单次联络限制

G AWS round Station Agent 支持每个联系人多个直播,但一次只能支持一个接触。为防止出现计划问题,请勿在多个数据流端点组之间共享实例。如果单个代理配置与多个不同的代理配置相关联 DFEGARNs,则注册失败。

与 AWS Ground Station 代理一起运行服务和进程

在与代理相同的EC2实例上启动服务和进程时,务必将其绑定到 AWS Ground Station AWS Ground Station 代理和 Linux 内核 vCPUs 未使用的状态,因为这可能会导致瓶颈,甚至在联系期间丢失数据。这种与特定绑定的概念被 vCPUs 称为亲和力。

要避免使用的内核:

举个使用c5.24xlarge实例的例子

如果你指定了

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

然后跑了

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

然后避免使用以下内核:

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

关联服务 (systemd)

新推出的服务将自动关联到interrupt_core_list前面提到的服务。如果您启动的服务的用例需要额外的内核,或者需要更少拥挤的内核,请按照本节进行操作。

使用以下命令检查您的服务当前配置的关联度:

systemctl show --property CPUAffinity <service name>

如果你看到一个空值CPUAffinity=,比如,这意味着它很可能会使用上面命令中的默认内核 ...bin/set_irq_affinity.sh <using the cores here> ...

要覆盖并设置特定的关联性,请运行以下命令来查找服务文件的位置:

systemctl show -p FragmentPath <service name>

打开并修改文件(使用vinano、等),然后将其放在如下[Service]部分CPUAffinity=<core list>中:

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

保存文件并重新启动服务以应用关联性:

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

欲了解更多信息,请访问:红帽企业 Linux 8-管理、监控和更新内核-第 27 章。使用 systemd 配置CPU关联和NUMA策略

关联进程(脚本)

强烈建议手动关联新启动的脚本和进程,因为默认的 Linux 行为允许它们使用计算机上的任何内核。

为避免任何正在运行的进程(例如 python、bash 脚本等)发生核心冲突,请使用以下命令启动该进程:

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

如果该进程已在运行,请使用诸如pidoftop、或之类的命令ps来查找特定进程的进程 ID (PID)。有了这个,PID你可以看到当前的亲和力:

taskset -p <pid>

并且可以用以下方式对其进行修改:

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

有关任务集的更多信息,请参阅任务集-Linux 手册页