本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
最佳实践
亚马逊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 称为亲和力。
要避免使用的内核:
-
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