本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
最佳實務
Amazon 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 受管字首清單的詳細資訊,請參閱使用 AWS 受管字首清單。
單一聯絡限制
AWS Ground Station 代理程式支援每個聯絡人的多個串流,但一次僅支援單一聯絡人。為了防止排程問題,請勿在多個資料流程端點群組之間共用執行個體。如果單一代理程式組態與多個不同的 DFEG ARNs相關聯,則無法註冊。
與 AWS Ground Station 客服人員一起執行服務和程序
在與 AWS Ground Station 代理程式相同的 EC2 執行個體上啟動服務和程序時,請務必將服務和程序繫結到 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
簡化服務 (系統化)
新啟動的服務會自動親和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>
開啟並修改 檔案 (使用 nano
、 vi
等),然後將 放入 [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>
如需詳細資訊,請造訪:Red Hat Enterprise 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)
如需任務集的詳細資訊,請參閱 tasket - Linux man 頁面