Как сделать так, чтобы "/sys/kernel/mm/transparent_hugepage/defrag" никогда не закрывал предупреждение THP

Перезагрузите Linux (Ubuntu 16.04 Redis 4.011)

/var/log/redis.log

шоу

# WARNING you have Transparent Huge Pages (THP) support enabled in your kernel. This will create latency and memory usage issues with Redis. To fix this issue run the command 'echo never > /sys/kernel/mm/transparent_hugepage/enabled' as root, and add it to your /etc/rc.local in order to retain the setting after a reboot. Redis must be restarted after THP is disabled.

Так и делаю

way1:

/etc/rc.local

if test -f /sys/kernel/mm/transparent_hugepage/defrag; then
   echo never > /sys/kernel/mm/transparent_hugepage/defrag
fi
if test -f /sys/kernel/mm/transparent_hugepage/enabled; then
   echo never > /sys/kernel/mm/transparent_hugepage/enabled
fi

при перезагрузке машины

the /var/log/redis.log shows the THP warning still.

Но когда я использую

$cat /sys/kernel/mm/transparent_hugepage/enabled
always madvise [never]
$cat /sys/kernel/mm/transparent_hugepage/defrag
always defer madvise [never]

Я получил право [никогда]

$systemctl restart redis

the /var/log/redis.log shows no THP warning.

Но это не является корректной проблемой, когда перезагрузка машины все еще имеет предупреждение THP.

Поэтому я пробую way2: сначала удалите файл /etc/rc.local, если...

$apt install sysfsutils

добавьте эти две строки в /etc/sysfs.conf:

kernel/mm/transparent_hugepage/enabled = never  
kernel/mm/transparent_hugepage/defrag = never

перезагружать

/var/log/redis.log got no any new message???

как я могу получить свой журнал снова? Это sysfutils есть это?

$systemctl status redis

Redis активен.

$cat /sys/kernel/mm/transparent_hugepage/enabled
always madvise [never]
$cat /sys/kernel/mm/transparent_hugepage/defrag
always defer [madvise] never

Я получил [Madvise]?????

затем

$systemctl restart redis
$cat /sys/kernel/mm/transparent_hugepage/enabled
always madvise [never]
$cat /sys/kernel/mm/transparent_hugepage/defrag
always defer [madvise] never

[Madvise] прийти снова?
[никогда] для дефрагментации не выбрать правильно??!

Странно, когда я меняю включено и дефрагментирую в /etc/sysfs.conf:

kernel/mm/transparent_hugepage/defrag = never   
kernel/mm/transparent_hugepage/enabled = never 

Я получил правильный результат cat $ $ systemctl restart redis $ cat /sys/kernel/mm/transparent_hugepage/enabled всегда madvise [никогда] $cat /sys/kernel/mm/transparent_hugepage/defrag всегда откладывает madvise [никогда]

Но до сих пор нет никаких сообщений, добавленных в мой /var/log/redis.log при перезагрузке Linux.

Но могу добавить новое сообщение, когда я командую "systemctl restart redis"

почему такая странная ситуация? что правильно и как это исправить?

2 ответа

Итак, как и у вас, у меня был этот вопрос, и я пошел на github и на форум, чтобы найти ответ, и на самом деле это результат сочетания всех их понемногу.

Я думаю, что вы были на правильном пути, но главная ошибка, которую делают все, заключается в том, чтобы не перезапустить службу Redis после применения новых правил THP.

1. добавить rc.local

Итак, во-первых, в Ubuntu 20.04 по умолчанию rc.local не существует, что я исправил, выполнив этот шаг (ссылка)

как корень

1.1. сделать сервис systemd для rc-local

добавить в /etc/systemd/system/rc-local.service

      [Unit]  
 Description=/etc/rc.local Compatibility  
 ConditionPathExists=/etc/rc.local  

[Service]  
 Type=forking  
 ExecStart=/etc/rc.local start  
 TimeoutSec=0  
 StandardOutput=tty  
 RemainAfterExit=yes  
 SysVStartPriority=99  

[Install]  
 WantedBy=multi-user.target  

1.2. активировать это

      touch /etc/rc.local  
chmod +x /etc/rc.local  
systemctl enable rc-local  
1.2.1 в этот файл (rc.local) вы можете добавить
      #!/bin/bash  
echo never > /sys/kernel/mm/transparent_hugepage/enabled  
echo never > /sys/kernel/mm/transparent_hugepage/defrag  
systemctl restart redis-server.service  
exit 0  

Проще использовать systemd-tmpfiles:

      # cat /etc/tmpfiles.d/disable-thp.conf
#Type Path                                                  Mode UID GID  Age Argument
w     /sys/kernel/mm/transparent_hugepage/enabled           -    -   -    -   never
w     /sys/kernel/mm/transparent_hugepage/defrag            -    -   -    -   never

# systemd-tmpfiles --create --prefix=/sys/kernel/mm/transparent_hugepage/ /etc/tmpfiles.d/disable-thp.conf

# grep -E . /sys/kernel/mm/transparent_hugepage/defrag /sys/kernel/mm/transparent_hugepage/enabled
/sys/kernel/mm/transparent_hugepage/defrag:always defer defer+madvise madvise [never]
/sys/kernel/mm/transparent_hugepage/enabled:always madvise [never]

Конечно, не нужно постоянно бегать.systemd-tmpfilesвручную, он будет запускатьсяsystemd-tmpfiles-setup.serviceпри загрузке.

Другие вопросы по тегам