버전 8.0에서 변경되었습니다.
MongoDB 8.0 부터 시작됩니다. MongoDB 는 스레드별 캐시 대신 개의 CPU별 캐시 를 사용하는 업그레이드된 버전의 TCMalloc을 사용하여 메모리 조각화를 줄이고 스트레스가 높은 워크로드에 대한 데이터베이스 의 복원력을 향상시킵니다.
새 TCMalloc 버전을 사용하려면 다음을 수행합니다.
플랫폼 지원
MongoDB 8.0 을 지원 하는 운영 체제는 다음을 제외하고 업데이트된 TCMalloc도 지원 합니다.
이러한 운영 체제는 레거시 TCMalloc 버전을 사용합니다. 이러한 운영 체제를 사용하는 경우 THP를 비활성화합니다.
Windows 는 레거시 TCMalloc 버전을 사용하며 업데이트된 TCMalloc을 지원 하지 않습니다.
THP(Transparent Huge Pages) 활성화
THP(Transparent Hugepages)는 TLB(Translation Lookaside Buffer) 조회의 오버헤드 를 줄이는 Linux 메모리 관리 시스템입니다. THP는 작은 페이지를 결합하여 애플리케이션 에 더 큰 메모리 페이지로 표시함으로써 이를 달성합니다.
MongoDB 8.0 이상에서는 mongod
가 시작되기 전에 플랫폼의 초기화 시스템에 대한 서비스 파일 을 생성하여 THP가 활성화되어 있는지 확인합니다. MongoDB 7.0 이전 버전을 사용하는 경우 THP를 비활성화합니다.
참고
THP는 시스템 수준에서 작동하므로 시스템의 모든 프로세스에 적용됩니다. 프로세스별 THP 수준을 활성화 하거나 비활성화할 수 없습니다.
또한 ktune
및 tuned
성능 프로필을 사용하는 RHEL 및 CentOS 시스템의 경우 사용자 지정 tuned
프로필도 만들어야 합니다.
서비스 파일 만들기
THP를 활성화하는 서비스 파일 을 만들려면 플랫폼 내장 초기화 시스템을 사용하세요. 최신 버전의 Linux 는 일반적으로 systemctl
명령을 사용하는 systemd 를 사용합니다. 이전 버전의 Linux 는 service
명령을 사용하는 System V init 을 사용하는 경향이 있습니다. 자세한 내용은 운영 체제 설명서를 참조하세요.
플랫폼에 맞는 초기화 시스템을 사용하세요.
단위 파일만들기 systemd
다음 파일을 생성하여 /etc/systemd/system/enable-transparent-huge-pages.service
에 저장하세요.
[Unit] Description=Enable Transparent Hugepages (THP) DefaultDependencies=no After=sysinit.target local-fs.target Before=mongod.service [Service] Type=oneshot ExecStart=/bin/sh -c 'echo always | tee /sys/kernel/mm/transparent_hugepage/enabled > /dev/null && echo defer+madvise | tee /sys/kernel/mm/transparent_hugepage/defrag > /dev/null && echo 0 | tee /sys/kernel/mm/transparent_hugepage/khugepaged/max_ptes_none > /dev/null && echo 1 | tee /proc/sys/vm/overcommit_memory > /dev/null' [Install] WantedBy=basic.target
참고
Red Hat Enterprise Linux의 일부 버전과 잠재적으로 다른 Red Hat 기반 파생 제품은 THP enabled
파일에 대해 다른 경로를 사용합니다.
/sys/kernel/mm/redhat_transparent_hugepage/enabled
시스템에서 어떤 경로가 사용 중인지 확인하고 이에 따라 enable-transparent-huge-pages.service
파일을 업데이트하세요.
서비스 시작
실행:
sudo systemctl start enable-transparent-huge-pages
관련 THP 설정이 변경되었는지 확인하려면 다음 명령을 실행합니다.
cat /sys/kernel/mm/transparent_hugepage/enabled && cat /sys/kernel/mm/transparent_hugepage/defrag && cat /sys/kernel/mm/transparent_hugepage/khugepaged/max_ptes_none && cat /proc/sys/vm/overcommit_memory
Red Hat Enterprise Linux 및 잠재적으로 다른 Red Hat 기반 파생 제품에서는 대신 다음을 사용해야 할 수 있습니다:
cat /sys/kernel/mm/redhat_transparent_hugepage/enabled && cat /sys/kernel/mm/redhat_transparent_hugepage/defrag && cat /sys/kernel/mm/redhat_transparent_hugepage/khugepaged/max_ptes_none && cat /proc/sys/vm/overcommit_memory
출력은 다음과 같아야 합니다.
always defer+madvise 0 1
스크립트 만들기 init.d
다음 파일을 생성하여 /etc/init.d/enable-transparent-hugepages
에 저장하세요.
!/bin/bash ## BEGIN INIT INFO Provides: enable-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: Enable Linux Transparent Hugepages Description: Enable 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 'always' | tee ${thp_path}/enabled > /dev/null && echo defer+madvise | tee ${thp_path}/defrag > /dev/null && echo 0 | tee ${thp_path}/khugepaged/max_ptes_none > /dev/null && echo 1 | tee /proc/sys/vm/overcommit_memory > /dev/null' unset thp_path ;; esac
스크립트 실행
실행:
sudo /etc/init.d/enable-transparent-hugepages start
관련 THP 설정이 변경되었는지 확인하려면 다음 명령을 실행합니다.
cat /sys/kernel/mm/transparent_hugepage/enabled && cat /sys/kernel/mm/transparent_hugepage/defrag && cat /sys/kernel/mm/transparent_hugepage/khugepaged/max_ptes_none && cat /proc/sys/vm/overcommit_memory
Red Hat Enterprise Linux 및 잠재적으로 다른 Red Hat 기반 파생 제품에서는 대신 다음을 사용해야 할 수 있습니다:
cat /sys/kernel/mm/redhat_transparent_hugepage/enabled
출력은 다음과 같아야 합니다.
always defer+madvise 0 1
및 사용 tuned
ktune
중요
tuned
또는 ktune
을 사용하는 경우 서비스 파일 을 만든 후 이 섹션의 단계를 수행합니다.
tuned
및 ktune
은 시스템의 Transparent Hugepages 설정에 영향을 줄 수 있는 커널 조정 유틸리티입니다. mongod
를 실행 하는 동안 RHEL 또는 CentOS 시스템에서 tuned
또는 ktune
를 사용하는 경우 사용자 지정 tuned
프로필을 생성하여 THP가 활성화된 상태로 유지되도록 해야 합니다.
CPU별 캐시 활성화
TCMalloc이 CPU별 캐시로 실행 확인하려면 다음을 확인하세요.
tcmalloc.usingPerCPUCaches
는true
입니다.tcmalloc.tcmalloc.cpu_free
가0
보다 큽니다.
CPU별 캐시가 활성화되지 않은 경우 다음을 확인합니다.
glibc rseq를 비활성화합니다.
Linux 커널 버전 4.18 이상을 사용하고 있습니다.
glibc rseq 비활성화
새로운 TCMalloc은 CPU별 캐시를 구현 위해 Restartable Sequences(rseq)가 필요합니다. glibc 라이브러리와 같은 다른 애플리케이션 TCMalloc보다 먼저 rseq 구조를 등록하는 경우 TCMalloc은 rseq를 사용할 수 없습니다. rseq가 없으면 TCMalloc은 레거시 TCMalloc 버전에서 사용되는 스레드별 캐시를 사용합니다.
TCMalloc이 rseq를 사용하여 CPU별 캐시를 활성화 할 수 있도록 하려면 glibc의 rseq 구조 등록을 비활성화할 수 있습니다. glibc rseq를 비활성화하려면 mongod
시작하기 전에 다음 환경 변수를 설정하다 합니다.
GLIBC_TUNABLES=glibc.pthread.rseq=0 export GLIBC_TUNABLES
커널 버전 확인
glibc rseq를 비활성화했는데 여전히 CPU별 캐시가 활성화되지 않은 경우, Linux 커널 버전 4.18 이상을 사용하고 있는지 확인하세요. 커널 버전을 확인하려면 다음 명령을 실행 합니다.
uname -r