Docs Menu
Docs Home
/
MongoDB 매뉴얼
/ / /

투명 대형 페이지(THP) 사용 안 함

이 페이지의 내용

  • 서비스 파일 만들기
  • tunedktune사용

THP(Transparent Huge Pages)는 대용량 메모리 페이지를 사용하여 대용량 메모리가 있는 시스템에서 TLB(Translation Lookaside Buffer) 조회 시 발생하는 오버헤드를 줄여주는 Linux 메모리 관리 시스템입니다.

그러나 데이터베이스 워크로드는 연속적인 메모리 액세스 패턴이 아닌 희박한 메모리 액세스 패턴을 갖는 경향이 있기 때문에 THP가 활성화된 상태에서 성능이 저하되는 경우가 많습니다. Linux에서 MongoDB를 실행할 때는 최상의 성능을 위해 THP를 비활성화해야 합니다.

mongod 시작 전에 THP가 비활성화되도록 하려면, 부팅 시 THP를 비활성화하는 플랫폼 초기화 시스템에 대한 서비스 파일을 생성해야 합니다. systemdSystem V init 초기화 시스템에 대한 지침이 아래에 제공되어 있습니다.

또한 ktunetuned 성능 프로필을 사용하는 RHEL / CentOS 시스템의 경우 사용자 지정 tuned 프로필도 생성해야 합니다.

THP를 비활성화하는 서비스 파일을 생성하려면 플랫폼에 내장된 초기화 시스템을 사용합니다. Linux 최신 버전은 systemctl 명령을 적용하는 systemd를 사용하는 경향이 있는 반면, 이전 버전은 service 명령을 적용하는 System V init를 사용하는 경향이 있습니다. 자세한 내용은 운영 체제 설명서를 참조하세요.

플랫폼에 적합한 초기화 시스템을 사용하세요.

1

다음 파일을 생성하여 /etc/systemd/system/disable-transparent-huge-pages.service에 저장하세요.

[Unit]
Description=Disable Transparent Hugepages (THP)
DefaultDependencies=no
After=sysinit.target local-fs.target
Before=mongod.service
[Service]
Type=oneshot
ExecStart=/bin/sh -c 'echo never | tee /sys/kernel/mm/transparent_hugepage/enabled > /dev/null && echo never | tee /sys/kernel/mm/transparent_hugepage/defrag > /dev/null'
[Install]
WantedBy=basic.target

참고

Red Hat Enterprise Linux의 일부 버전과 잠재적으로 다른 Red Hat 기반 파생 제품은 THP enabled 파일에 대해 다른 경로를 사용합니다.

/sys/kernel/mm/redhat_transparent_hugepage/enabled

시스템에서 어떤 경로가 사용 중인지 확인하고 이에 따라 disable-transparent-huge-pages.service 파일을 업데이트하세요.

2

systemd 단위 파일을 다시 로드하고 disable-transparent-huge-pages.service를 사용할 수 있도록 하려면 다음 명령을 실행합니다.

sudo systemctl daemon-reload
3

실행:

sudo systemctl start disable-transparent-huge-pages

관련 THP 설정이 변경되었는지 확인하려면 다음 명령을 실행합니다.

cat /sys/kernel/mm/transparent_hugepage/enabled && cat /sys/kernel/mm/transparent_hugepage/defrag

Red Hat Enterprise Linux 및 잠재적으로 다른 Red Hat 기반 파생 제품에서는 대신 다음을 사용해야 할 수 있습니다:

cat /sys/kernel/mm/redhat_transparent_hugepage/enabled && cat /sys/kernel/mm/redhat_transparent_hugepage/defrag

출력은 다음과 같아야 합니다.

never
never
4

운영 체제가 시작될 때마다 이 설정이 적용되도록 하려면 다음 명령을 실행합니다.

sudo systemctl enable disable-transparent-huge-pages
5

RHEL/CentOS에서 tuned 또는 ktune 프로필을 사용하는 경우 사용자 지정 tuned 프로필도 만들어야 합니다.

1

다음 파일을 생성하여 /etc/init.d/disable-transparent-hugepages에 저장하세요.

#!/bin/bash
### 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 Hugepages
# Description: Disable Linux Transparent Hugepages, 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' | tee /sys/kernel/mm/transparent_hugepage/enabled > /dev/null && echo 'never' | tee /sys/kernel/mm/transparent_hugepage/defrag > /dev/null
unset thp_path
;;
esac
2

실행:

sudo chmod 755 /etc/init.d/disable-transparent-hugepages
3

실행:

sudo /etc/init.d/disable-transparent-hugepages start

관련 THP 설정이 변경되었는지 확인하려면 다음 명령을 실행합니다.

cat /sys/kernel/mm/transparent_hugepage/enabled && cat /sys/kernel/mm/transparent_hugepage/defrag

Red Hat Enterprise Linux 및 잠재적으로 다른 Red Hat 기반 파생 제품에서는 대신 다음을 사용해야 할 수 있습니다:

cat /sys/kernel/mm/redhat_transparent_hugepage/enabled && cat /sys/kernel/mm/redhat_transparent_hugepage/defrag

출력은 다음과 같아야 합니다.

never
never
4

운영 체제가 시작될 때마다 이 설정이 적용되도록 하려면 Linux 배포판에 대해 다음 명령을 실행하세요.

배포
명령

우분투 및 데비안

sudo update-rc.d disable-transparent-hugepages defaults

SUSE

sudo insserv /etc/init.d/disable-transparent-hugepages

Red Hat, CentOS, Amazon Linux 및 파생

sudo chkconfig --add disable-transparent-hugepages
5

RHEL/CentOS에서 tuned 또는 ktune 프로필을 사용하는 경우 사용자 지정 tuned 프로필도 만들어야 합니다.

중요

tuned 또는 ktune을 사용하는 경우 위의 서비스 파일을 생성한 후 이 섹션의 단계도 수행해야 합니다.

tuned ktune은 시스템의 THP 설정에 영향을 줄 수 있는 동적 커널 튜닝 도구입니다. mongod를 실행하는 동안 RHEL /CentOS 시스템에서 tuned / ktune을 사용하는 경우 사용자 지정 tuned 프로필을 생성하여 THP가 비활성화된 상태로 유지되도록 해야 합니다.

1

관련 디렉토리를 복사하여 기존 프로필에서 새 프로필을 만듭니다. 이 예시에서는 virtual-guest 프로필을 기본으로 사용하고, virtual-guest-no-thp를 새 프로필로 사용합니다.

sudo cp -r /etc/tune-profiles/virtual-guest /etc/tune-profiles/virtual-guest-no-thp
2

/etc/tune-profiles/virtual-guest-no-thp/ktune.sh를 편집하고 set_transparent_hugepages 설정을 다음과 같이 변경합니다.

set_transparent_hugepages never
3

새 프로필을 활성화합니다.

sudo tuned-adm profile virtual-guest-no-thp
1

사용자 지정 tuned 프로필을 저장할 새 디렉토리를 만듭니다. 이 예시에서는 기존 virtual-guest 프로필을 상속하고 virtual-guest-no-thp를 새 프로필로 사용합니다.

sudo mkdir /etc/tuned/virtual-guest-no-thp
2

/etc/tuned/virtual-guest-no-thp/tuned.conf를 생성하고 편집하여 다음 내용을 포함하도록 합니다.

[main]
include=virtual-guest
[vm]
transparent_hugepages=never

이 예시는 기존 virtual-guest 프로필을 상속합니다. 시스템에 가장 적합한 프로필을 선택합니다.

3

새 프로필을 활성화합니다.

sudo tuned-adm profile virtual-guest-no-thp

돌아가기

성능