Как сделать так, чтобы "/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
при загрузке.