Das Galaxy Kirin-Serversystem öffnet, schließt und stellt eine transparente riesige Seite ein (transparent_hugepage)


​ Vorwort: Großer Seitenspeicher (HugePages), manchmal auch „große Speicherseite“, „Speicher-Riesenseite“, „Standard-Riesenseite“ genannt. Das Betriebssystem verwaltet den Speicher in Einheiten von Speicherseiten, und die Größe der Speicherseite hat Auswirkungen auf die Systemleistung. Wenn die Speicherseite zu klein eingestellt ist, gibt es viele Speicherseiten und das Array zum Verwalten der Speicherseiten ist relativ groß, was Speicher verbraucht. Gleichzeitig wird TLB (Translation Lookaside) verwendet Puffer , die Größe des Seitentabellenregisterpuffers, der als Seitentabellenpuffer verstanden werden kann, ist festgelegt, was zu einer Erhöhung des TLB-MISS führt. In verschiedenen Anwendungsszenarien ist der optimale Wert der Speicherseitengröße unterschiedlich. Daher unterstützen allgemeine Systeme mehrere Speicherseitenwerte.

1. Grundlegende Umweltinformationen

1.1 Systemversion
nkvers
############## Kylin Linux Version #################
Release:
Kylin Linux Advanced Server release V10 (Sword)

Kernel:
4.19.90-24.4.v2101.ky10.x86_64

Build:
Kylin Linux Advanced Server
release V10 (SP2) /(Sword)-x86_64-Build09/20210524
#################################################
1.2 Erklärung der Always-, Madvise- und Never-Parameter
always: 表示透明大页启用(一直处于启用状态并动态分配内存)
madvise:表示透明大页启用(需要时动态分配内存)
never:  表示透明大页禁用

always和madvise参数的区别:
	madvise表示在MADV_HUGEPAGE标志的VMA中使用THP。当应用程序需要大页时,它可以设置MADV_HUGEPAGE标志,然后内核将根据这个标志动态地分配和管理内存。这种分配方式可以提高应用程序的性能,并且可以避免一些内存管理问题。
	always表示透明大页一直处于启用状态,也就是说,内核将一直使用透明大页进行内存分配。这种方式与标准的内存分配方式不同,标准大页管理是预分配的方式,而透明大页管理则是动态分配的方式。
		
	madvise和always的主要区别在于内存分配方式上。madvise是当需要时动态分配内存,而always则是一直处于启用状态并动态分配内存。
1.3 Parametererklärung transparenter Seiten in Meminfo
AnonHugePages: AnonHugePages的统计值并不包含所有的匿名页,只包含已经分配的透明大页。其他的匿名页统计在AnonPages中。
ShmemHugePages:用于共享内存或tmpfs的透明大页。
ShmemPmdMapped:用户态共享内存映射的透明大页。
FileHugePages: 与AnonHugePages对应,用户态透明大页中的文件页。
FilePmdMapped: 用户态文件页映射的透明大页。

HugePages_Total:系统中总的页数量。
HugePages_Free:当前可用的页数量。
HugePages_Rsvd:当前被保留(但未被使用)的页数量。
HugePages_Surp:系统中超出实际内存需求配置的页数量,通过nr_overcommit_hugepages设置。
Hugepagesize:单个页的大小(以字节为单位)。
1.4 Zusätzliche Anweisungen

(1) Nach der Konfiguration transparenter riesiger Seiten vm.nr_hugepages wird dieser Teil des Speichers direkt aus dem System entfernt. Berechnungsmethode: Der Wert von Hugepagesize wird mit dem Wert von HugePages_Total multipliziert.
(2) In einer Multi-NUMA-Umgebung legt vm.nr_hugepages die maximale Anzahl transparenter Seiten fest, die jeder NUMA-Knoten verwenden kann. Daher wird jedem NUMA-Knoten diese Anzahl an Speicherseiten zugewiesen. Diese Speicherseiten werden kontinuierlich im Speicher des Prozessors gespeichert und bilden einen großen Speicherseitenrahmen.
(3) Die Standardseitengröße verschiedener Architekturen im Galaxy Kirin V10-SP2-System ist unterschiedlich. Bei der Konfiguration sollten Sie Folgendes beachten: Die Standardseitengröße der X86-Architektur beträgt 2 MB und die Standardseitengröße von ARM beträgt Die Größe einer einzelnen Seite beträgt 512 MB. Wenn Sie eine Abfrage und Bestätigung benötigen, führen Sie den Befehl aus: cat /proc/meminfo | grep Hugepagesize

2. Schließen Sie die transparente Seite

2.1 Transparente große Seiteneinstellungen anzeigen
cat /sys/kernel/mm/transparent_hugepage/enabled
[always] madvise never

#默认是已启用透明大页 
2.2 Ändern Sie die Datei /etc/default/grub

Bearbeiten Sie die Datei /etc/default/grub, GRUB_CMDLINE_LINUX-Konfigurationsparameter „transparent_hugepage=never“, der folgende Dateiinhalt nach der Bearbeitung:

cat /etc/default/grub 
GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
GRUB_DEFAULT=saved
GRUB_DISABLE_SUBMENU=true
GRUB_TERMINAL_OUTPUT="console"
GRUB_CMDLINE_LINUX="resume=/dev/mapper/klas-swap rd.lvm.lv=klas/root rd.lvm.lv=klas/swap rhgb quiet crashkernel=1024M,high transparent_hugepage=never"
GRUB_DISABLE_RECOVERY="true"
2.3 grub.cfg neu generieren

(1) Der Pfad der Grub-Boot-Datei für den traditionellen UEFI-Start im Legacy-BIOS ist inkonsistent. Sie müssen zunächst prüfen, ob es sich bei dem System um einen UEFI-Start oder einen herkömmlichen Legacy-BIOS-Start handelt

[ -d /sys/firmware/efi ] && echo UEFI || echo BIOS
BIOS
#如果输出是UEFI则表示是UEFI启动
#如果输出是BIOS则表示是传统的Legacy BIOS启动

传统的Legacy BIOS启动文件路径:
/boot/grub2/grub.cfg

UEFI启动文件路径:
/boot/efi/EFI/kylin/grub.cfg

(2) Aktualisieren Sie die Grub-Boot-Datei entsprechend der tatsächlich gefundenen Situation

grub2-mkconfig -o /boot/grub2/grub.cfg
2.4 Starten Sie den Server neu, damit er wirksam wird
reboot
2.5 Überprüfung
cat /sys/kernel/mm/transparent_hugepage/enabled
always madvise [never]
上述输出中,如果中括号的值为never,说明已禁用透明大页

3. Öffnen Sie die transparente Seite

Ändern Sie transparent_hugepage=never in transparent_hugepage=always und befolgen Sie die Schritte 2.2–2.5.

4. Konfigurieren Sie eine transparente große Seite

3.1 Temporäre Konfiguration
sysctl -w vm.nr_hugepages=100  #临时改变,重启失效
3.2 Dauerhaft wirksam

Bearbeiten Sie die Datei /etc/sysctl.conf und fügen Sie den Parameter vm.nr_hugepages hinzu

vim /etc/sysctl.conf
添加如下参数:
vm.nr_hugepages=100
#设置页个数为100个,默认单个大小为2M

执行sysctl -p生效
3.3 Überprüfen Sie die Konfiguration
[root@localhost ~]# cat /proc/meminfo  | grep Huge
AnonHugePages:     20480 kB
ShmemHugePages:        0 kB
HugePages_Total:     100
HugePages_Free:      100
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       2048 kB
Hugetlb:          204800 kB

Sie können sehen, dass die Konfiguration erfolgreich war, 100 Seiten konfiguriert wurden, 100 übrig sind und die Größe einer einzelnen Seite 2 MB beträgt.

Nach der Konfiguration von vm.nr_hugepages wird dieser Teil des Speichers direkt aus dem System entfernt.

Der Wert von Hugepagesize multipliziert mit dem Wert von HugePages_Total = 2MB*100=200MB entspricht der Konfiguration einer transparenten Seite von 200 MB.

(1) Die vorherige Speichernutzung wird nicht hinzugefügt
[root@localhost ~]# free -hg
              total        used        free      shared  buff/cache   available
Mem:          1.9Gi       324Mi       1.3Gi        17Mi       339Mi       1.4Gi
Swap:         2.0Gi          0B       2.0Gi
(2) Speichernutzung nach der Änderung
[root@localhost ~]# vim /etc/sysctl.conf 
[root@localhost ~]# sysctl -p
kernel.sysrq = 0
net.ipv4.ip_forward = 0
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.all.accept_source_route = 0
net.ipv4.conf.default.accept_source_route = 0
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.default.accept_redirects = 0
net.ipv4.conf.all.secure_redirects = 0
net.ipv4.conf.default.secure_redirects = 0
net.ipv4.icmp_echo_ignore_broadcasts = 1
net.ipv4.icmp_ignore_bogus_error_responses = 1
net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.default.rp_filter = 1
net.ipv4.tcp_syncookies = 1
kernel.dmesg_restrict = 1
net.ipv6.conf.all.accept_redirects = 0
net.ipv6.conf.default.accept_redirects = 0
vm.nr_hugepages = 100
[root@localhost ~]# free -hg
              total        used        free      shared  buff/cache   available
Mem:          1.9Gi       526Mi       1.1Gi        17Mi       343Mi       1.2Gi
Swap:         2.0Gi          0B       2.0Gi

##可以发现剩余内存里面直接少了200MB的内存

Guess you like

Origin blog.csdn.net/weixin_45754407/article/details/134693999