View a markdown version of this page

調校 EC2 執行個體的效能 - AWS Ground Station

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

調校 EC2 執行個體的效能

注意

如果您使用 CloudFormation 範本佈建 AWS 資源,這些調校會自動套用。如果您使用 AMI 或手動建立 EC2 執行個體,則必須套用這些效能調校,才能實現最可靠的效能。

請記得在套用任何調校 (調整) 之後重新啟動執行個體。

主題

調校硬體中斷和接收佇列 - 影響 CPU 和網路

本節設定系統化、SMP IRQs、接收封包轉向 (RPS) 和接收流程轉向 (RFS) 的 CPU 核心用量。如需根據您使用之執行個體類型的一組建議設定,附錄:中斷/RPS 調校的建議參數請參閱 。

重要

僅限 Amazon Linux 2023:在繼續之前安裝並啟用 cron 協助程式。

sudo dnf install -y cronie sudo systemctl enable --now crond

本節及其後面的兩個 會新增 @reboot crontab 項目,這需要執行中的 cron 協助程式才能在每次開機時生效。在 Amazon Linux 2023 上,預設不會安裝 cron 協助程式,因此如果沒有上述命令,則會寫入這些項目,但永遠不會執行。在 Amazon Linux 2 上,cron 協助程式已安裝並啟用;不需要任何動作。

  1. 將系統化程序釘選為遠離代理程式 CPU 核心。

  2. 路由硬體中斷來自代理程式 CPU 核心的請求。

  3. 設定 RPS 以防止單一網路介面卡的硬體佇列成為網路流量的瓶頸。

  4. 設定 RFS 以提高 CPU 快取命中率,進而降低網路延遲。

RPM 提供的set_irq_affinity.sh指令碼會為您設定上述所有項目。新增至 crontab,因此會套用至每個開機:

echo "@reboot sudo /opt/aws/groundstation/bin/set_irq_affinity.sh '${interrupt_core_list}' '${rps_core_mask}' >> /var/log/user-data.log 2>&1" >>/var/spool/cron/root
  • interrupt_core_list 將 取代為核心和作業系統預留的核心 - 通常為第一和第二個,以及超執行緒核心對。這不應與上述選取的核心重疊。(例如,超執行緒 96-CPU 執行個體為「0,1,48,49」)。

  • rps_core_mask 是十六進位位元遮罩,指定哪些 CPUs 應處理傳入封包,每個數字代表 4 個 CPUs。它也必須從右側開始每 8 個字元以逗號分隔。建議允許所有 CPUs,並讓快取處理平衡。

  • 96-CPU 執行個體的範例:

    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

Tune Rx 中斷合作 - 影響網路

中斷合併有助於防止主機系統溢出太多中斷,並有助於提高網路輸送量。透過此組態,會收集封包,並每 128 微秒產生一次中斷。新增至 crontab,因此會套用至每個開機:

echo "@reboot sudo ethtool -C ${interface} rx-usecs 128 tx-usecs 128 >>/var/log/user-data.log 2>&1" >>/var/spool/cron/root
  • interface 將 取代為設定為接收資料的網路界面 (乙太網路轉接器)。一般而言,eth0這是為 EC2 執行個體指派的預設網路介面。

Tune Rx 環形緩衝區 - 影響網路

增加 Rx 環形緩衝區的環形項目數量,以防止封包在高載連線期間下降或超支。將 新增至 crontab,以便在每次開機時正確設定:

echo "@reboot sudo ethtool -G ${interface} rx 16384 >>/var/log/user-data.log 2>&1" >>/var/spool/cron/root
  • interface 將 取代為設定為接收資料的網路界面 (乙太網路轉接器)。一般而言,eth0這是為 EC2 執行個體指派的預設網路介面。

  • 如果設定c6i系列執行個體,則需要修改命令,將環形緩衝區設定為 8192,而不是 16384

設定核心開機參數 (CPU C-State 和介面命名) - 影響 CPU 和網路

這些核心開機參數會設定 來防止 CPU 閒置intel_idle.max_cstate=1 processor.max_cstate=1 max_cstate=1。CPU 閒置可能會在聯絡開始時造成封包遺失。這些參數也包含 net.ifnames=0 biosdevname=0,將接收者的網路界面重新命名為 eth0。如同本章中的其他調校步驟,這些參數會在 所述的重新啟動時生效重新啟動。您可以相對於其他區段,以任何順序套用它們。

使用 grubby設定核心引數。這適用於 Amazon Linux 2023 (UEFI) 和 Amazon Linux 2,因為 會直接在兩者上grubby管理開機載入器組態。

sudo grubby --update-kernel=ALL --args="console=tty0 console=ttyS0,115200n8 net.ifnames=0 biosdevname=0 nvme_core.io_timeout=4294967295 intel_idle.max_cstate=1 processor.max_cstate=1 max_cstate=1"
注意

net.ifnames=0 引數eth0會在下一次開機時將網路界面重新命名為 。其他調校區段和代理程式組態目標 eth0,因此套用這些參數並重新啟動是建議的路徑。如果您選擇不套用這些參數,介面會保留其預設名稱 (例如,在 Amazon Linux 2023 ens5上)。在這種情況下,請在本指南使用 的任何地方替換實際的界面名稱 ip link show — 透過執行找到eth0

預留輸入連接埠 - 影響網路

保留 AwsGroundStationAgentEndpoint輸入地址連接埠範圍中的所有連接埠,以防止與核心使用發生衝突。連接埠使用衝突會導致聯絡和資料交付失敗。

echo "net.ipv4.ip_local_reserved_ports=${port_range_min}-${port_range_max}" >> /etc/sysctl.conf
  • 範例:echo "net.ipv4.ip_local_reserved_ports=42000-43500" >> /etc/sysctl.conf

重新啟動

成功套用所有調校後,重新啟動執行個體,讓調校生效。

sudo reboot

本節決定用於調校區段調整硬體中斷和接收佇列的建議參數值 - 影響 CPU 和網路。

系列 執行個體類型 ${interrupt_core_list} ${rps_core_mask}

c7i

  • c7i.24xlarge

  • c7i.12xlarge

  • 0、1、48、49

  • 0、1、24、25

  • ffffffff、ffffffff、ffffffff

  • ffff、ffffffff

c6i

  • c6i.32xlarge

  • 0、1、64、65

  • ffffffff、ffffffff、ffffffff、ffffffff

c5

  • c5.24xlarge

  • c5.18xlarge

  • c5.12xlarge

  • 0、1、48、49

  • 0、1、36、37

  • 0、1、24、25

  • ffffffff、ffffffff、ffffffff

  • ff、ffffffff、ffffffff

  • ffff、ffffffff

c5n

  • c5n.metal

  • c5n.18xlarge

  • 0、1、36、37

  • 0、1、36、37

  • ff、ffffffff、ffffffff

  • ff、ffffffff、ffffffff

m5

  • m5.24xlarge

  • m5.12xlarge

  • 0、1、48、49

  • 0、1、24、25

  • ffffffff、ffffffff、ffffffff

  • ffff、ffffffff

r5

  • r5.metal

  • r5.24xlarge

  • 0、1、48、49

  • 0、1、48、49

  • ffffffff、ffffffff、ffffffff

  • ffffffff、ffffffff、ffffffff

r5n

  • r5n.metal

  • r5n.24xlarge

  • 0、1、48、49

  • 0、1、48、49

  • ffffffff、ffffffff、ffffffff

  • ffffffff、ffffffff、ffffffff

g4dn

  • g4dn.metal

  • g4dn.16xlarge

  • g4dn.12xlarge

  • 0、1、48、49

  • 0、1、32、33

  • 0、1、24、25

  • ffffffff、ffffffff、ffffffff

  • ffffffff、ffffffff

  • ffff、ffffffff

p4d

  • p4d.24xlarge

  • 0、1、48、49

  • ffffffff、ffffffff、ffffffff

p3dn

  • p3dn.24xlarge

  • 0、1、48、49

  • ffffffff、ffffffff、ffffffff