TLBi优化
概述
本特性通过在HostOS中关闭TLBi指令的全域广播,以及在GuestOS中将TLB的tlb刷新范围限定在该虚机进程执行过的CPU上,优化了TLB的广播范围,从而在众核多虚机场景下,降低TLB刷新低噪,有效提升unixbench的跑分线性度。
约束限制
- 本特性目前仅适用于ARM64。
- 使能本特性,需要增加内核编译参数:
CONFIG_ARM64_TLBI_IPI
和CONFIG_ARM64_KVM_HCR_NOFB
。 - 使能本特性,需要依赖启动参数
kvm-arm.hcr_nofb=1
。
使用方法
编译并更换内核
在内核根目录下执行
make openeuler_defconfig
生成.config文件。通过
make menuconfig
指定内核编译参数,打开CONFIG_ARM64_TLBI_IPI
和CONFIG_ARM64_KVM_HCR_NOFB
参数,打开后通过查看.config文件中对应的配置项,确保设置生效。编译rpm包:
make binrpm-pkg -j
,生成的rpm包位于rpmbuild/RPMS/aarch64目录下。在rpm包所在目录执行
rpm -ivh --force kernel*.rpm
安装编译的新内核。通过命令
grub2-set-default
设置默认启动内核,以24.03 LTS-SP1版本为例:shell# 查询当前设置的默认启动内核 [root@localhost ~]# grub2-editenv list saved_entry=openEuler (6.12.0) 24.03 (LTS-SP1) # 查询当前安装的所有内核版本 [root@localhost ~]# grep "^menuentry" /etc/grub2-efi.cfg menuentry 'openEuler (6.12.0) 24.03 (LTS-SP1)' --class openeuler --class gnu-linux --class gnu --class os --unrestricted $menuentry_id_option 'gnulinux-6.12.0-advanced-887bd997-932e-4cd0-84e3-ec71abbe368b' { menuentry 'openEuler (6.6.0-77.0.0.81.oe2403sp1.aarch64) 24.03 (LTS-SP1)' --class openeuler --class gnu-linux --class gnu --class os --unrestricted $menuentry_id_option 'gnulinux-6.6.0-77.0.0.81.oe2403sp1.aarch64-advanced-887bd997-932e-4cd0-84e3-ec71abbe368b' { # 设置默认启动内核为'openEuler (6.6.0-77.0.0.81.oe2403sp1.aarch64) 24.03 (LTS-SP1)' [root@localhost ~]# grub2-set-default 'openEuler (6.6.0-77.0.0.81.oe2403sp1.aarch64) 24.03 (LTS-SP1)' # 再次查询当前设置的默认启动内核 [root@localhost ~]# grub2-editenv list saved_entry=openEuler (6.6.0-77.0.0.81.oe2403sp1.aarch64) 24.03 (LTS-SP1)
设置内核启动参数
编辑/etc/default/grub文件,在
GRUB_CMDLINE_LINUX
中添加kvm-arm.hcr_nofb=1
。查看修改结果,示例结果如下:
shell[root@localhost ~]# cat /etc/default/grub | grep GRUB_CMDLINE_LINUX GRUB_CMDLINE_LINUX="rd.lvm.lv=openeuler/root rd.lvm.lv=openeuler/swap video=VGA-1:640x480-32@60me cgroup_disable=files apparmor=0 crashkernel=1024M,high smmu.bypassdev=0x1000:0x17 smmu.bypassdev=0x1000:0x15 arm64.nopauth console=tty0 kvm-arm.hcr_nofb=1"
使用命令
grub2-mkconfig -o /boot/efi/EFI/openEuler/grub.cfg
更新grub配置文件。
重启主机,检查参数设置
- 重启主机。
- 执行命令
zcat /proc/config.gz | grep CONFIG_ARM64_TLBI_IPI
,确认回显为CONFIG_ARM64_TLBI_IPI=y
。 - 执行命令
zcat /proc/config.gz | grep CONFIG_ARM64_KVM_HCR_NOFB
,确认回显为CONFIG_ARM64_KVM_HCR_NOFB=y
。 - 执行命令
cat /proc/cmdline
,确保回显包含kvm-arm.hcr_nofb=1
。