사용에서는 hugepages 최적화 메모리 성능
HTTPS : // www.linuxidc.com/Linux/2015-03/114587.htm 주로 지적 내용의 페이지 테이블 등등.
[일시 : 2015년 3월 6일] | 출처 : CSDN 저자 : wenshuangzhu | [폰트 : 타이 종 소형 ] |
1. 프라이머
시스템 프로세스는 가상 주소를 통해 메모리를 액세스되지만, CPU는 정말 실제 메모리 주소 액세스 메모리 드라이브로 변환해야합니다. 변환 효율을 향상시키기 위해, CPU는 가상 메모리 주소를 물리적 메모리 주소 사이에 최근의 매핑을 캐시 및 CPU에 의해 유지되는 매핑 테이블에 저장됩니다. 메모리 액세스 속도를 극대화하기 위해, 당신은 매핑 테이블에서 많은 매핑으로 저장해야합니다.
리눅스에서 메모리는 기본적으로 각 페이지는 큰 물리적 메모리 경우, 매핑 테이블 항목이 매우 많은 CPU의 검색 효율성에 영향을 미칠 것이라고하는 수단, 4K이다 분할 페이지의 형태이다. 메모리 크기가 고정되어 있기 때문에, 항목 매핑 테이블을 줄이기 위해,이 페이지의 크기를 증가 할 수있는 유일한 방법을 취할 수 있습니다.
2.에서는 hugepages 프로필
2.1 관련 개념
에서는 hugepages 주로 비교적 큰의 4K 페이지와 페이지 선택을 제공하기 위해, Linux2.6 커널에 도입된다.
개념 |
개념주의 |
페이지 테이블 |
페이지 테이블은 가상 어드레스와 물리 어드레스 사이의 대응 관계를 저장하기위한 운영체제의 가상 메모리 시스템의 데이터 구조 모델이다. 우리가 액세스 실제 물리적 메모리에 페이지 테이블로 매핑 한 후, 최초의 리눅스 메모리 액세스 페이지 테이블에 액세스 (RAM + 스왑) |
TLB |
변환 색인 버퍼 (TLB) CPU TLB는 CPU 부분 및 빠른 액세스 어드레스 변환을 유지하기위한 고정 된 크기의 버퍼 (또는 캐시), 페이지 테이블에 할당된다. |
hugetlb |
TLB의에서 hugetlb 항목이 기록 시점에서는 hugepages된다. |
hugetlbfs |
이것은 tmpfs의 같은 2.6 커널을 기반으로 새 메모리 파일 시스템입니다. TLB의에서 hugetlb의 hugepage에 의해 지적했다. 이러한 사용에 대한 방법을 제공하는 메모리 파일 시스템 hugetlbfs (유사의 tmpfs)로 hugepage를 할당됩니다. |
의미 2.2에서는 hugepages
에서는 hugepages는 리눅스 커널의 기능입니다, 더 큰 메모리 페이지를 사용 hugepage는 기존의 4K 페이지를 교체합니다. 주요 사용 HugePage 다음과 같은 이점 :
시스템 시동시 1에서는 hugepages 직접 할당 및 크기에 대응하는 메모리 영역을 확보한다.
가있는 경우 (2)에서는 hugepages 시작 이후에는 관리자의 개입은 해제하고 변화하려고하지 않습니다.
3. 더 스왑이 없습니다.
Notswappable :에서는 hugepages은 스왑 할 수 없습니다. 따라서 어떤 페이지 인 / 페이지 outmechanism overhead.HugePages 보편적 aspinned하지 간주된다 thereis.
4. 크게하여 TLB는 적중률 향상 덮여 페이지 테이블에 저장되어있는 CPU의 캐시 메모리 크기를 향상시킬 수있다.
가상 메모리 주소는 프로세스 페이지 테이블에 연결 한 다음 실제 메모리에 연결합니다. 메모리에 액세스 할 때 그래서 당신은 가상 및 실제 메모리 및 물리적 메모리에 다음 액세스 사이에 매핑 페이지 테이블에 접근 할 필요가있다.
상기 전환의 속도를 증가시키는 페이지 테이블의 일부분을 저장하기위한 CPU 캐시 TLB의 부분. 페이지 크기가 커지기 때문에, 같은 크기가되도록 상기 메모리의 크기에 의해 덮여 TLB는 커진다. 또한 TLB의 적중률을 개선하지만은 주소 변환의 속도를 향상시킵니다.
5. 페이지 테이블의 부하를 줄일 수 있습니다.
XXX 성능 테스트 시스템은, 아니에서는 hugepages 경우, 데이터베이스 서버에 페이지 테이블 크기는 (또한 성능 테스트 데이터베이스 서버의 메모리 부족의 주요 원인이 될해야하는) 세대에 대한 경우 :
node74 : / 홈 / 오라클 # 고양이 / proc 디렉토리 / meminfo 파일
MemTotal : 16,323,732킬로바이트
페이지 테이블 : 5442384kB
에서는 hugepages을 구성한 후, 페이지 테이블 크기 만 124M (약 80 %에서 안정 성능 시험 메모리 사용)이다 :
node74 : / 홈 / 오라클 # 고양이 / proc 디렉토리 / meminfo 파일
MemTotal : 16,323,732킬로바이트
페이지 테이블 : 127384 kB의
탈락 페이지 tablelookup 오버 헤드 : hugepage가 스왑하지 않고, 모두가 더 페이지 테이블 조회 수 없습니다 때문입니다.
빠른 전체 메모리 성능 : 가상 메모리는 실제 물리적 메모리 주소에 해당하는 두 가지 작업, 너무 적은 페이지, 액세스 페이지 테이블에 열을 줄일 필요하므로, 페이지 테이블 뜨거운 병목 현상을 피하기 위해.
CPU 부하, 원리 위의 감소, 메모리 성능을 향상 6.
2.3 지방에서는 hugepages의 사용을 참고
할당이, 서버의 모든 SGA 어떤 경우의 합계의 크기가 거의 다른 사람보다 작동하지, 크게 옆으로 설정됩니다 후 1에서는 hugepages이다.
8G, 9G에 오라클 SGA에 예에서는 hugepages 세트의 경우, 다음 부팅시 오라클이에서는 hugepages 8 세대의에 사용되지 않습니다. 이 세대는 낭비. SGA의 hugepages 용량을 산출 할 때 설정 따라서 스크립트를 계산하기 위해 후술한다.
2. 다른 프로세스에서는 hugepages 메모리를 사용할 수 없습니다, 그래서 너무 SGA SGA보다 약간 큰, 대형 잘에서는 hugepages를 확인하는 데 사용할 수있는 설정하지 마십시오.
3.이 meminfo 파일 및 Hugepage 사 관련 :
HugePages_Total : 4611
HugePages_Free : 474
HugePages_Rsvd : 467
Hugepagesize : 2,048 킬로바이트
HugePages_Total의 페이지 번호가 할당되고, Hugepagesize는 할당 된 메모리의 크기를 곱한. 9기가바이트 약 4611 * 1,024분의 2
HugePages_Free 에서는 hugepages가 이전에 사용 된 적이 수 있습니다. 심지어 oraclesga은이 메모리를 할당하고 있지만 실제로 작성되지 않은 경우, 당신은 여전히 자유를 참조하십시오. 그것은 오해 장소에 용이하다.
HugePages_Rsvd는 예약되어 있지만 수는 페이지가 사용되지 않은 지정되었습니다. 오라클이 막 시작했을 때, 대부분의 메모리는 모든 SGA, 예약 및 무료 감소 계속 오라클의 사용으로, 예약 및 무료해야한다.
HugePages_Free-HugePages_Rsvd 이 부분은 낭비되는, 다른 오라클 인스턴스 경우,이 메모리에 사용되지 않을 수도 있습니다, 메모리에 사용되지 않습니다.
메모리 매개 변수의 사용에서는 hugepages MEMORY_TARGET / MEMORY_MAX_TARGET 0으로 설정해야하므로 4에서는 hugepages 오라클 AMM (자동 메모리 관리)는 상호 배타적이다.
3. 구성에서는 hugepages
3.1 수정 커널 매개 변수 memlock을
메모리가 16G 인 경우 KB 단위로, 커널 매개 변수를 수정 memlock을, 크기는 memlock을 실제 메모리보다 약간 작다. 12기가바이트의 프로그램 잠금 메모리 크기. 매개 변수는 SGA 무해보다 크게 설정되어 있습니다.
파일의 limits.conf 루트 사용자, 편집 등 데이터베이스 서버에 모두 로그인 :
node74 : ~ # VI는 /etc/security/limits.conf
다음 두 줄을 추가합니다 :
* 소프트의 memlock을 12582912
* 하드 memlock을 12582912
3.2 memlock을 제한 확인
로그 다시 루트 및 사용자 오라클, 체크 memlocklimit
node74 : ~ # ulimit를 -l
12582912
오라클 @ node74 : ~> ulimit를 -l
12582912
3.3 안 AMM
당신이 11 세대 이상 사용하는 경우, AMM은 먼저, 해제 AMM를해야한다 기본적으로 사용하지만, AMM과에서는 hugepages는 호환되지 않습니다되었습니다. 비활성화 AMM은 다음과받는 사람 :
3.3.1 닫기 데이터베이스 인스턴스
SQLPLUS는 두 개의 데이터베이스 인스턴스를 폐쇄을 통해 오라클 사용자는 두 개의 데이터베이스 서버에 로그인 할 수 있습니다.
오라클 @ node74 : ~> SQLPLUS / SYSDBA로
SQL> 종료 즉시
PFILE을 생성 3.3.2
호스트 중 하나에 오라클 사용자가 로그인으로, 실행 PFILE 다음 명령을 만듭니다
오라클 @ node74 : ~> SQLPLUS / SYSDBA로
SQL> PFILE 생성 = '/ 홈 / 신탁 / pfile.ora'fromspfile = '+ DG_ORA / ORCL / spfileorcl.ora';
3.3.3 편집 PFILE
편집 PFILE, 삭제 memory_max_target 및 memory_target 매개 변수 :
오라클 @ node74 : ~> VI /home/oracle/pfile.ora
다음 줄을 삭제합니다 :
orcl1.memory_max_target = 11,114,905,600
orcl2.memory_max_target = 11,114,905,600
* = 0 .memory_max_target
orcl1.memory_target = 11,114,905,600
orcl2.memory_target = 11,114,905,600
* = 0 .memory_target
후 파일 저장 수정합니다.
3.3.4 SPFILE 생성
SPFILE을 만들려면 다음 명령을 실행합니다 :
오라클 @ node74 : ~> SQLPLUS / SYSDBA로
SQL> SPFILE을 생성 = '+ DG_ORA / ORCL / spfileorcl.ora'from PFILE ='/ 홈 / 신탁 / pfile.ora ';
3.3.5 시스템 매개 변수를 kernel.shmall 수정
메모리 크기 공유 Kernel.shmall의 최대 사용할 수있는 시스템이다. 단위는 페이지 (4킬로바이트)이다. 매개 변수 kernel.shmall 시스템을 수정하는 AMM, 필요성을 해제 한 후,이 매개 변수를 너무 낮게 설정되어, 데이터베이스가 ORA-27102을 (부록 4.2 참조)를 시작하지 못했습니다 원인이 될 수 있습니다.
오라클은 모든 데이터베이스 인스턴스의 SGA 시스템의 합계로 설정하는 것이 좋습니다. 예를 들어, SGA 합 9기가바이트, 당신은 세트 kernel.shmall = 9 * 1024 * 4분의 1,024 = 2,359,296 할 필요가있다.
루트 사용자 편집하여 sysctl.conf 파일과 데이터베이스 서버 모두에 로그인합니다.
node74 : ~ # VI /etc/sysctl.conf에
매개 변수를 수정 Kernel.shmall :
kernel.shmall = 2,359,296
구성을 검증하는 sysctl을 -p를 실행합니다 :
node74 : ~ # sysctl을 -p
3.3.6 데이터베이스 인스턴스를 시작합니다
사용자는 오라클이 데이터베이스 서버에 로그온, 두 개의 데이터베이스 인스턴스는 SQLPLUS에 의해 시작.
오라클 @ node74 : ~> SQLPLUS / SYSDBA로
SQL> 시작
3.4 계산의 사용을 필요로 hugepage 페이지 크기를
모든 인스턴스가 다음 실행 크기 hugepages_settings.sh (스크립트 내용 부록 4.1) 루트 사용자로 설정에서는 hugepages의 필요성을 평가하기 위해, (ASM 포함) 시작되었는지 확인합니다.
node74 : / 홈 / 신탁 번호의 ./hugepages_settings.sh
이 스크립트는 MyOracle 지원에서 문서의 ID 401749.1에 의해 제공됩니다
(http://support.oracle.com)는 tocompute 대한 값을 의도된다
/ HugeTLB 구성가 죽으면 전류 공유 추천에서는 hugepages
메모리 세그먼트. executionplease 진행하기 전에 확인
그:
* OracleDatabase 인스턴스 (들)을 설치하고 실행하다
* OracleDatabase 11g 자동 메모리 관리 (AMM)는 설치되지 않습니다
(참조 문서 ID749851.1)
* sharedmemory 세그먼트가 명령에 의해 표시 될 수있다 :
# IPCS -m
눌러 toproceed 입력 ...
---- 키를 누릅니다 입력
권장 설정 : vm.nr_hugepages = 4611
당신은 손으로 계산 될 수있다 :
nr_hugepages 파일> = SGA_TARGET / Hugepagesize
= * 9G 1024M / 2M
= 4608
그것은 4608보다 약간 큰 값을 취할 수 있습니다.
3.5 매개 변수 vm.nr_hugepages를 수정
루트 사용자 편집 /etc/sysctl.conf의 같은 두 개의 데이터베이스 서버에 로그인 :
node74 : ~ # VI /etc/sysctl.conf에
Vm.nr_hugepages 파라미터 단계에서 산출 된 값이다 변성 :
vm.nr_hugepages = 4611
구성을 검증하는 sysctl을 -p를 실행합니다 :
node74 : ~ # sysctl을 -p
3.6 정지 데이터베이스 인스턴스는 운영 체제를 다시 시작
모든 데이터베이스 인스턴스를 중지 운영 시스템을 다시 시작합니다. (이론적으로는 재시작을 권장, 운영 체제를 다시 시작할 필요가 없습니다)
3.7 검사 설정이 효과를 가지고있다
시스템을 재부팅 한 후, 다음의 발효 여부를 확인하기 위해 모든 데이터베이스 구성 명령을 사용하려면 :
node74 : ~ # 그렙에서는 hugepages은 / proc / meminfo 파일
HugePages_Total : 4611
HugePages_Free : 2394
HugePages_Rsvd : 2387
HugePages_Surp : 0
이미 시행 HugePages_Free <HugePages_Total 다음에서는 hugepages, HugePages_Rsvd가 0이 아닌 상태.
4. 부록
4.1 스크립트 hugepages_settings.sh
#! / 빈 / bash는
#
# hugepages_settings.sh
#
에 대한 계산 값 # 리눅스 bash는 스크립트
#은에서는 hugepages / HugeTLB 구성 권장
#의
# 참고 :이 스크립트는 모든 공유 메모리에 대한 계산을 수행
스크립트가 실행될 때 사용할 수 # 세그먼트를, 상관없이 그것은
# 오라클 RDBMS 메모리 세그먼트를 공유하거나하지 않습니다.
#
#이 스크립트는 내 오라클 지원에서 문서 ID 401749.1에 의해 제공됩니다
# http://support.oracle.com
# 오신 것을 환영합니다 텍스트
에코 "
이 스크립트는 내 오라클 지원에서 문서 ID 401749.1에 의해 제공됩니다
( http://support.oracle. COM )가에 대한 계산 값으로 구성된다
현재 공유에 대한 권장에서는 hugepages / HugeTLB 구성
메모리 세그먼트. 실행을 계속하기 전에 확인하십시오
: 있음
* Oracle 데이터베이스 인스턴스 (들) 및 실행됩니다
* 오라클 데이터베이스 11g 자동 메모리 관리 (AMM)이 설정되지 않습니다
(참조 문서 ID 749851.1가)
* 공유 메모리 세그먼트 명령으로 나열 할 수 있습니다 :
# IPCS -m
보도 ... 계속 입력 "
읽어
커널 버전에 대한 # 확인합니다
. KERN =`끝나면 uname -r | AWK -F '를 {의 printf (". % d 개 % d 개 \ n ", $ 1, $ 2); } '`
# HugePage 크기 알아
HPG_SZ =`그렙 Hugepagesize은 / proc / meminfo 파일 | AWK'{ '} $ 2 인쇄`
# 초기화 카운터
NUM_PG을 = 0
# 페이지의 누적 개수가 실행중인 공유 메모리 세그먼트를 처리하는 데 필요한
IPCS가 -m`에 SEG_BYTES를 들어 | | AWK '{$ 5 인쇄}' 그렙 "[0-9] [0-9] *는"`
할
MIN_PG을 =`에코 "$ SEG_BYTES / ($ HPG_SZ * 1024)"| -q` BC
경우 [$ MIN_PG가 -gt 0]; 다음
NUM_PG =`에코 "$ NUM_PG + $ MIN_PG + 1"| -q` BC
Fi를
수행
RES_BYTES =`에코 "$ NUM_PG * $ HPG_SZ * 1024"| -q` 기원전
# SGA 적은 1백메가바이트 이상이 감지하지 않습니다
그런 경우 #이 구제
경우는 [$ RES_BYTES -lt 100000000] 다음
"***********"에코
에코 "** 오류 **"
에코 "***********"
에코 "죄송합니다! 공유 메모리 세그먼트의 충분한 총 없습니다 에 할당
에서는 hugepages 구성. 에서는 hugepages은 공유 메모리 세그먼트에 사용할 수 있습니다
: 당신이 명령으로 나열 할 수 있다는
# IPCS -m
오라클 데이터베이스 SGA와 일치 할 수있는 크기. : 있는지 확인하시기 바랍니다
* Oracle 데이터베이스 인스턴스가 실행 인
오라클 데이터베이스 11g 자동 메모리 관리 (AMM)이 구성되어 있지 * "
1 번 출구
Fi를
결과로 # 마침을
의 경우 $ 컨
'2.4') HUGETLB_POOL =`에코"$를 NUM_PG을 * $ HPG_SZ / 1024 "| -q` BC;
에코"권장 설정 : vm.hugetlb_pool = $ HUGETLB_POOL ";
'2.6') 에코"권장 설정 : vm.nr_hugepages = $ NUM_PG ";;
*) 에코"인식 할 수없는 커널 버전 $ KERN. 종료. ";
ESAC의
# 종료
4.2 데이터베이스 시작 오류 ORA-27102
외부 메모리 리눅스 X86_64 오류의 : 28 : 리눅스 데이터베이스 getORA-27102의 시작시 없음 공간 장치에 남아
제목:
외부 메모리 리눅스 X86_64 오류의 : 28 : 리눅스 데이터베이스 getORA-27102의 시작시 없음 공간 장치에 남아
닥 ID :
참고 : 301830.1
유형:
문제
마지막 개정일 :
2001/10/01 2008
상태:
게시 된
이 문서에
조짐
변경
원인
해결책
참조
-------------------------------------------------- ------------------------------
적용 대상 :
오라클 서버 - 엔터프라이즈 에디션 - 버전 : 9.2.0.4에 11.1.0.6
유나이티드 - 64
레드햇 엔터프라이즈 리눅스 고급 Serverx86-64 (AMD Opetron 아키텍처)
86 64 비트
조짐
SHMMAX는 RAM의 절반 크기에 맞게 설정된 경우에도, 리눅스 64 비트 같이 OperatingSystem에 오라클 64 비트 버전 approachhalf 사용 가능한 RAM에 SGA를 증가하려고 할 때, 자식 들이나 인스턴스를 시작하려고 다음과 같은 오류 :
SQL> 시작 NOMOUNT
ORA-27102 : 메모리 부족
리눅스 x86_64의 오류 : 28 : 없음 공간 왼쪽 ondevice
변경
SHMALL은 대부분 2097152의 tothe 기본 설정을 너무 작게 설정되어
$ 고양이 / proc 디렉토리 / sys 인 / 커널 / SHMALL
2097152
원인
SHMALL 시스템이 한 번에 사용할 수있는 페이지의 sharedmemory의 총량이다.
해결책
세트는 페이지 크기로 나눈 모든 SGAson 시스템의 합과 동일 SHMALL.
페이지 크기가 thefollowing 명령을 사용하여 확인할 수 있습니다 :
$ 된 getconf PAGE_SIZE
4096
예를 들어, 모든 SGAS의 합이 16 기가 롭 시스템 및 4,194,304에 '$ 된 getconf의 PAGE_SIZE'4096 (4KB)는 다음 세트 SHMALL 결과 (4MB) :이면
루트 사용자가 SHMALL을 세트로 /etc/sysctl.conf에 파일을 4194304in합니다 :
kernel.shmall = 4194304
다음 명령을 실행합니다 :
# sysctl을 -p
# 고양이 / proc 디렉토리 / sys 인 / 커널 / SHMALL
4194304
노트:
새로운 가치와 areboot이 필요하지 않습니다 위의 명령로드
오라클 사용자 andretry 시작 명령 인로 전환 백.
참조
참고 169706.1 - 오라클? 데이터베이스 onAIX?, HP-UX?, 리눅스?, 맥 OS? X, 솔라리스?, Tru64를 유닉스? 운영 SystemsInstallation 및 구성 요구 사항 빠른 참조 (8.0.5 11.1까지)
키워드
NO ~ SPACE ~ LEFT ~ ON ~ DEVICE; START ~ INSTANCE; ~ MEMORY OF OUT ~; 64BIT;
자세한 내용은 오라클 참조 오라클 주제 페이지를 http://www.linuxidc.com/topicnews.aspx?tid=12
이 문서 영구적으로 업데이트 링크 주소 : http://www.linuxidc.com/Linux/2015-03/114587.htm