调整您的EC2实例以提高性能 - AWS Ground Station

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

调整您的EC2实例以提高性能

注意

如果您使用 CloudFormation 模板配置AWS资源,则会自动应用这些调整。如果您使用AMI或手动创建了您的EC2实例,则必须应用这些性能调整才能实现最可靠的性能。

请记住,应用任何优化后重启您的实例。

主题

调整硬件中断和接收队列——影响CPU和网络

本节配置 systemd、SMPIRQs、接收数据包导向 (RPS) 和接收流指导 () 的CPU核心用法。RFS有关基于您正在使用的实例类型的一组推荐设置,请参阅 附录:中断/调RPS谐的推荐参数

  1. 将 systemd 进程固定在远离代理CPU内核的地方。

  2. 将硬件中断请求路由到远离代理CPU内核。

  3. 配置RPS以防止单个网络接口卡的硬件队列成为网络流量的瓶颈。

  4. 配置RFS为提高CPU缓存命中率,从而减少网络延迟。

提供的set_irq_affinity.sh脚本为您RPM配置了以上所有内容。添加到 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替换为为内核和操作系统保留的内核,通常是第一和第二个,以及超线程内核对。这不应与上面选择的内核重叠。(例如:“0,1,48,49” 表示超线程,96 个实例)。CPU

  • 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实例分配的默认网络接口。

调整 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.32xlarge 实例,则需要修改命令以将环形缓冲区设置为 8192,而不是 16384

调整 CPU C-State-影响 CPU

设置 CPU C 状态以防止空转,这可能会导致在联系开始时丢失数据包。要求实例重启。

echo "GRUB_CMDLINE_LINUX_DEFAULT=\"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\"" >/etc/default/grub echo "GRUB_TIMEOUT=0" >>/etc/default/grub grub2-mkconfig -o /boot/grub2/grub.cfg

保留入口端口-影响网络

预留您的 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

Reboot

成功应用所有优化后,重启实例才能使优化生效。

sudo reboot

本节确定了在 “调整硬件中断” 和 “接收队列-影响CPU和网络” 部分中使用的推荐参数值。

系列 实例类型 ${interrupt_core_list} ${rps_core_mask}

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