기본적으로 활성화되어 있는 CentOS 7 EC2 인스턴스에서 transparent_hugepage(THP)를 비활성화하고 싶습니다.
# cat /sys/kernel/mm/transparent_hugepage/enabled
[always] madvise never
# cat /sys/kernel/mm/transparent_hugepage/defrag
[always] madvise never
이 설정은 수동으로 변경할 수 있습니다.
# echo never > /sys/kernel/mm/transparent_hugepage/enabled
# echo never > /sys/kernel/mm/transparent_hugepage/defrag
# cat /sys/kernel/mm/transparent_hugepage/enabled
always madvise [never]
# cat /sys/kernel/mm/transparent_hugepage/defrag
always madvise [never]
...하지만 재부팅 후에는 변경 사항이 손실됩니다.
echo never [...]
지침을 내 rc.local
및 파일에 넣으려고 했지만 cloud.cfg
작동하지 않았습니다.
또한 (설명된 대로) transparent_hugepage=never
커널 라인에 설정을 추가하려고 했습니다 ./etc/grub.conf
거기), 그러나 더 잘 작동하지 않았습니다.
그렇다면... AWS EC2 인스턴스에서 실행되는 CentOS 7에서 THP를 비활성화하려면 어떻게 해야 합니까?
편집: 제목이 변경되었습니다... THP를 비활성화해야 합니다그리고THP 조각 모음
답변1
해결책은 다음과 같습니다.조정된, @michael-hampton이 지적한 바와 같습니다. 까다로운 부분은VM플러그인은 설정만 구성할 수 있습니다 /sys/kernel/mm/transparent_hugepage/enabled
.
설정도 비활성화하려면 /sys/kernel/mm/transparent_hugepage/defrag
시작 시 프로필에서 호출되는 스크립트를 만들어야 했습니다.
결국 완전한 솔루션은 다음과 같습니다.
1 단계: 사용자 정의 프로필을 보관할 디렉터리를 만듭니다.
mkdir /etc/tuned/custom
2 단계: 프로필 만들기 /etc/tuned/custom/tuned.conf
:
[main]
include=virtual-guest
[vm]
transparent_hugepages=never
[script]
script=script.sh
이 프로필은 다음에서 상속됩니다.가상 게스트, 이는 내 활성 프로필이었으며 실제로는 가상화된 서버(EC2)에 적합해 보였습니다. 명령을 사용하여 활성 프로필을 볼 수 있습니다 tuned-adm active
. 궁금하신 분은 사전 정의된 프로필의 내용을 확인해보세요./usr/lib/tuned/
3단계: 스크립트 생성 /etc/tuned/custom/script.sh
:
#!/bin/sh
. /usr/lib/tuned/functions
start() {
echo never > /sys/kernel/mm/transparent_hugepage/defrag
return 0
}
stop() {
return 0
}
process $@
실행 가능하게 만드세요:
sudo chmod 755 /etc/tuned/custom/script.sh
4단계: 새 프로필을 활성화합니다.
tuned-adm profile custom
이제 다음을 얻을 수 있습니다:
# cat /sys/kernel/mm/transparent_hugepage/enabled
always madvise [never]
# cat /sys/kernel/mm/transparent_hugepage/defrag
always madvise [never]
재부팅 후에도 지속됩니다.
답변2
grub 명령줄 설정 외에도 tuned를 구성해야 합니다. 하지만 링크된 지침을 사용하지 않으면 오류가 너무 많아서 모두 설명하는 데 반나절이 걸릴 것입니다.
사용자 정의 조정 프로필('이라고 함 custom
)을 생성한 다음 프로필을 설정합니다. virtual-guest
가상 머신(물론 EC2)에서 실행 중이거나 throughput-performance
물리적 머신에서 실행 중인 경우 와 같이 기존 프로필을 기반으로 합니다 .
사용자 정의 프로필을 보관할 디렉터리를 만듭니다.
mkdir /etc/tuned/custom
예를 들어 다음과 같이 맞춤 프로필을 만듭니다 /etc/tuned/custom/tuned.conf
.
[main]
include=virtual-guest
[vm]
transparent_hugepages=never
이제 프로필을 설정합니다.
tuned-adm profile custom
답변3
또한 이것을 시도하십시오
nano /etc/init.d/disable-transparent-hugepages
#!/bin/sh
### BEGIN INIT INFO
# Provides: disable-transparent-hugepages
# Required-Start: $local_fs
# Required-Stop:
# X-Start-Before: mongod mongodb-mms-automation-agent
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Disable Linux transparent huge pages
# Description: Disable Linux transparent huge pages, to improve
# database performance.
### END INIT INFO
case $1 in
start)
if [ -d /sys/kernel/mm/transparent_hugepage ]; then
thp_path=/sys/kernel/mm/transparent_hugepage
elif [ -d /sys/kernel/mm/redhat_transparent_hugepage ]; then
thp_path=/sys/kernel/mm/redhat_transparent_hugepage
else
return 0
fi
echo 'never' > ${thp_path}/enabled
echo 'never' > ${thp_path}/defrag
unset thp_path
;;
esac
sudo chmod 755 /etc/init.d/disable-transparent-hugepages
sudo chkconfig --disable-transparent-hugepages 추가
답변4
편집하다:위의 대답은잘못된, 현재 sysctl에는 투명 거대 페이지 손잡이가 없기 때문입니다. 소음이 발생해서 죄송합니다.
에 원하는 값을 넣을 수 있습니다 /etc/sysctl.conf
.
sysctl.conf(5) 매뉴얼 페이지에서:
SYSCTL.CONF(5) 파일 형식 SYSCTL.CONF(5) 이름 sysctl.conf - sysctl 사전 로드/구성 파일 설명 sysctl.conf는 sysctl에서 읽고 설정할 sysctl 값이 포함된 간단한 파일입니다. 구문은 간단히 다음과 같습니다. # 논평 ; 논평 토큰 = 가치 값에 공백이 포함될 수 있더라도 빈 줄은 무시되고 토큰이나 값 앞뒤의 공백은 무시됩니다. # 또는 ;로 시작하는 줄 고려된다 댓글을 달고 무시했습니다. 예 # sysctl.conf 샘플 # kernel.domainname = example.com ; 여기에는 sysctl에 기록될 공간이 있습니다! kernel.modprobe = /sbin/mod 프로브