源码
中文

服务器

版本:25.03

TLBi优化

1.1 概述

1.2 约束限制

1.3 使用方法

概述

本特性通过在HostOS中关闭TLBi指令的全域广播,以及在GuestOS中将TLB的tlb刷新范围限定在该虚机进程执行过的CPU上,优化了TLB的广播范围,从而在众核多虚机场景下,降低TLB刷新低噪,有效提升unixbench的跑分线性度。

约束限制

  1. 本特性目前仅适用于ARM64。
  2. 使能本特性,需要增加内核编译参数:CONFIG_ARM64_TLBI_IPICONFIG_ARM64_KVM_HCR_NOFB
  3. 使能本特性,需要依赖启动参数kvm-arm.hcr_nofb=1

使用方法

编译并更换内核

  1. 在内核根目录下执行make openeuler_defconfig生成.config文件。

  2. 通过make menuconfig指定内核编译参数,打开CONFIG_ARM64_TLBI_IPICONFIG_ARM64_KVM_HCR_NOFB参数,打开后通过查看.config文件中对应的配置项,确保设置生效。

  3. 编译rpm包:make binrpm-pkg -j,生成的rpm包位于rpmbuild/RPMS/aarch64目录下。

  4. 在rpm包所在目录执行rpm -ivh --force kernel*.rpm安装编译的新内核。

  5. 通过命令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)

设置内核启动参数

  1. 编辑/etc/default/grub文件,在GRUB_CMDLINE_LINUX中添加kvm-arm.hcr_nofb=1

  2. 查看修改结果,示例结果如下:

    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"
  3. 使用命令grub2-mkconfig -o /boot/efi/EFI/openEuler/grub.cfg更新grub配置文件。

重启主机,检查参数设置

  1. 重启主机。
  2. 执行命令zcat /proc/config.gz | grep CONFIG_ARM64_TLBI_IPI,确认回显为CONFIG_ARM64_TLBI_IPI=y
  3. 执行命令zcat /proc/config.gz | grep CONFIG_ARM64_KVM_HCR_NOFB,确认回显为CONFIG_ARM64_KVM_HCR_NOFB=y
  4. 执行命令cat /proc/cmdline,确保回显包含kvm-arm.hcr_nofb=1