투명 대형 페이지(THP) 사용 안 함
이 페이지의 내용
THP(Transparent Huge Pages)는 대용량 메모리 페이지를 사용하여 대용량 메모리가 있는 시스템에서 TLB(Translation Lookaside Buffer) 조회 시 발생하는 오버헤드를 줄여주는 Linux 메모리 관리 시스템입니다.
그러나 데이터베이스 워크로드는 연속적인 메모리 액세스 패턴이 아닌 희박한 메모리 액세스 패턴을 갖는 경향이 있기 때문에 THP가 활성화된 상태에서 성능이 저하되는 경우가 많습니다. Linux에서 MongoDB를 실행할 때는 최상의 성능을 위해 THP를 비활성화해야 합니다.
mongod
시작 전에 THP가 비활성화되도록 하려면, 부팅 시 THP를 비활성화하는 플랫폼 초기화 시스템에 대한 서비스 파일을 생성해야 합니다. systemd 및 System V init 초기화 시스템에 대한 지침이 아래에 제공되어 있습니다.
또한 ktune
및 tuned
성능 프로필을 사용하는 RHEL / CentOS 시스템의 경우 사용자 지정 tuned
프로필도 생성해야 합니다.
서비스 파일 만들기
THP를 비활성화하는 서비스 파일을 생성하려면 플랫폼에 내장된 초기화 시스템을 사용합니다. Linux 최신 버전은 systemctl
명령을 적용하는 systemd를 사용하는 경향이 있는 반면, 이전 버전은 service
명령을 적용하는 System V init를 사용하는 경향이 있습니다. 자세한 내용은 운영 체제 설명서를 참조하세요.
플랫폼에 적합한 초기화 시스템을 사용하세요.
단위 파일만들기 systemd
다음 파일을 생성하여 /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
파일을 업데이트하세요.
서비스 시작
실행:
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
스크립트 만들기 init.d
다음 파일을 생성하여 /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
스크립트 실행
실행:
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
및 사용 tuned
ktune
중요
tuned
또는 ktune
을 사용하는 경우 위의 서비스 파일을 생성한 후 이 섹션의 단계도 수행해야 합니다.
tuned
ktune
은 시스템의 THP 설정에 영향을 줄 수 있는 동적 커널 튜닝 도구입니다. mongod
를 실행하는 동안 RHEL /CentOS 시스템에서 tuned
/ ktune
을 사용하는 경우 사용자 지정 tuned
프로필을 생성하여 THP가 비활성화된 상태로 유지되도록 해야 합니다.