CentOS 7 EC2 인스턴스에서 THP 및 THP 조각 모음 비활성화

CentOS 7 EC2 인스턴스에서 THP 및 THP 조각 모음 비활성화

기본적으로 활성화되어 있는 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 프로브

관련 정보