本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
最佳实践
亚马逊 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 托管前缀列表。有关 AWS 托管前缀列表的更多信息,请参阅使用 Amazon 托管前缀列表。
单次联络限制
AWS Ground Station 座席支持每次联络有多个数据流,但一次只支持一个联络。为防止出现计划问题,请勿在多个数据流端点组之间共享实例。如果单个代理配置与多个不同的 DFEG 相关联 ARNs,则注册失败。
与 AWS Ground Station 代理一起运行服务和进程
在与代理相同的 EC2 实例上启动服务和进程时,将它们绑定到 AWS Ground Station AWS Ground Station 代理和 Linux 内核CPUs 未使用的 v 很重要,因为这可能会导致瓶颈,甚至在联系期间丢失数据。这种绑定到特定 v 的概念CPUs 被称为亲和力。
要避免使用的内核:
-
agentCpuCores
从代理配置文件 -
来自 调整硬件中断和接收队列-影响 CPU 和网络 的
interrupt_core_list
。-
默认值可从中找到 附录:中断/RPS 调整的推荐参数
-
举个使用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>
打开并修改文件(使用vi
nano
、等),然后将其放在如下[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
如果该进程已在运行,请使用诸如pidof
top
、或之类的命令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