最佳實務 - 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.groundstation AWS 受管字首清單,以允許從天線進行通訊。如需 AWS 受管字首清單的詳細資訊,請參閱使用 AWS 受管字首清單。

單一聯絡限制

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

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

在與 AWS Ground Station 代理程式相同的 EC2 執行個體上啟動服務和程序時,請務必將服務和程序繫結到 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

簡化服務 (系統化)

新啟動的服務會自動親和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>

開啟並修改 檔案 (使用 nanovi等),然後將 放入 [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

如果程序已在執行中,請使用 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)

如需任務集的詳細資訊,請參閱 tasket - Linux man 頁面