最佳實務 - AWS Ground Station

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

最佳實務

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.groundstationAWS受管字首清單,以允許來自天線的通訊。如需受AWS管字首清單的詳細資訊,請參閱使用AWS受管字首清單。

單一聯絡限制

AWS Ground Station Agent 支援每個聯絡人的多個串流,但一次僅支援單一聯絡人。為了防止排程問題,請勿在多個資料流程端點群組之間共用執行個體。如果單一代理程式組態與多個不同的 DFEG 相關聯ARNs,將無法註冊。

與 AWS Ground Station 客服人員一起執行服務和程序

在與 AWS Ground Station 代理程式相同的EC2執行個體上啟動服務和程序時,請務必將其繫結為 vCPUs 不在 AWS Ground Station 代理程式和 Linux 核心使用中,因為這可能會導致瓶頸,甚至在聯絡期間遺失資料。這種結合至特定 的概念 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

提升服務效率 (系統化)

新啟動的服務會自動關聯到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 章。使用系統化 設定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 man 頁面