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

자체 관리 배포서버를 위한 THP(Transparent Hugepages) 비활성화

이 페이지의 내용

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

중요

MongoDB 8.0에서 업그레이드된 TCMalloc

MongoDB 8.0 부터 MongoDB 는 Transparent Hugepages를 활성화하여 성능을 개선하는 업그레이드된 버전의 TCMalloc을 사용합니다. MongoDB 8.0 이상을 사용하는 경우 THP(Transparent Hugepages) 활성화를 참조하세요.

THP(Transparent Hugepages)는 TLB(Translation Lookaside Buffer) 조회의 오버헤드 를 줄이는 Linux 메모리 관리 시스템입니다. THP는 작은 페이지를 결합하여 애플리케이션 에 더 큰 메모리 페이지로 표시함으로써 이를 달성합니다.

실행 MongoDB 7.0 이하 버전을 Linux 하는 경우 최상의 성능을 위해 THP를 비활성화해야 합니다. 이전 버전의 MongoDB 에서는 비연속적인 메모리 액세스 패턴을 사용하는 경우가 많으므로 데이터베이스 워크로드는 THP를 활성화하면 성능이 저하되는 경우가 많습니다.

참고

시스템 수준에서 THP를 활성화 하고 프로세스 수준에서 비활성화할 수 있습니다. 단일 머신에 여러 MongoDB 프로세스가 있는 경우, 버전 8.0 의 프로세스는 THP를 활성화 하고 7.0 이전의 프로세스는 THP를 비활성화해야 합니다.

mongod 가 시작되기 전에 THP를 비활성화하려면 부팅 시 THP를 비활성화하는 운영 체제의 서비스 파일 을 만듭니다. 다음 지침에는 systemdSystem V 초기화 시스템에 대한 예제가 모두 포함되어 있습니다.

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

THP를 비활성화하는 서비스 파일 을 생성하려면 운영 체제 내장 초기화 시스템을 사용하세요. 최신 버전의 Linux 는 일반적으로 systemctl 명령을 사용하는 systemd 를 사용합니다. 이전 버전의 Linux 에서는 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/disabled && 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 을 사용하는 경우 서비스 파일 을 만든 후 이 섹션의 단계를 수행합니다.

tunedktune 은 시스템의 Transparent Hugepages 설정에 영향을 줄 수 있는 커널 조정 유틸리티입니다. 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

돌아가기

TCMalloc 성능