2

reboot the linux (ubuntu 16.04 redis 4.011)

/var/log/redis.log

shows

# 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.

So I do

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

when reboot the machine

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

But when I use

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

I got the right [never]

$systemctl restart redis

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

But it is not correct the issue as when the machine reboot is still having the THP warning.

So I try way2: remove the /etc/rc.local if...fi sentence first

$apt install sysfsutils

add these two lines to /etc/sysfs.conf:

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

reboot

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

how can I get my log again? Is the sysfutils eat it?

$systemctl status redis

the redis is active.

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

I got [madvise] ?????

then

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

the [madvise] come again?
the[never] for the defrag is not choose right??!

it's strage when I change the enabled and defrag on /etc/sysfs.conf:

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

I got the right cat result $systemctl restart redis $cat /sys/kernel/mm/transparent_hugepage/enabled always madvise [never] $cat /sys/kernel/mm/transparent_hugepage/defrag always defer madvise [never]

But still no any message added to my /var/log/redis.log when reboot the linux.

But can add new message when I command "systemctl restart redis"

why is so strange situation? which is correct and how to fix it?

robspin
  • 133

2 Answers2

1

So as you I had this question and I went to github and forum to find the answer, and actually it result from a mix of a little bit all of them

I think you were on the good way but the main mistake everybody seams to do is to not restart the redis service after applying the new THP rules.

1. add rc.local

So first, on ubuntu 20.04 by default the rc.local don't exist, which I fixed by following those step (ref)

as root

1.1. make a systemd service for rc-local

add in /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. active it

touch /etc/rc.local  
chmod +x /etc/rc.local  
systemctl enable rc-local  
1.2.1 in that file (rc.local) you could add
#!/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  
JOduMonT
  • 357
1

It's simpler to use 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]

Of course, there's no need to always run systemd-tmpfiles manually, it'll be run by the systemd-tmpfiles-setup.service on boot.

spuk
  • 111
  • 3