해시 설정
nginx 는 정적 데이터 세트, 예 를 들 어 server names, map 명령 의 매개 변수 값, MIME 형식, 첫 번 째 문자열 의 이름 을 요청 하 는 등 hash 표를 사용 하여 처리 합 니 다.nginx 는 설정 을 시작 하고 다시 불 러 올 때 가능 한 최소 hash 표 크기 를 선택 합 니 다. 이것 은 같은 hash 값 을 가 진 key 를 저장 할 때 bucket size 가 설정 의 상한 치 를 초과 하지 않도록 하기 위해 서 입 니 다.
hash 표 의 크기 는 bucket 으로 표시 합 니 다.hash 표 크기 가 hash max size 매개 변 수 를 초과 하기 전에 bucket 은 자동 으로 크기 를 조정 할 수 있 습 니 다.대부분의 hash 값 은 대응 하 는 설정 명령 이 있 습 니 다. 예 를 들 어 server name hash 에 대응 하 는 명령 은:
server_names_hash_max_size
과 server_names_hash_bucket_size
입 니 다.hash bucket size 의 크기 는 CPU 의 cache line size 를 맞 춰 야 합 니 다. cache line size 의 정수 배 여야 합 니 다.이 설정 은 현대 프로세서 가 key 검색 을 할 때 메모리 접근 횟수 를 줄 여 검색 속 도 를 높 일 수 있 습 니 다.
hash bucket size 가 cache line size 와 같다 면 key 검색 에 필요 한 접근 메모리 횟수 는 최대 2 회 가 필요 합 니 다.첫 번 째 는 bucket address 를 계산 하 는 것 입 니 다.두 번 째 는 bucket 에서 key 검색 을 하기 위해 서 입 니 다.따라서 nginx 가 hash max size 나 hash bucket size 를 증가 하 라 는 메 시 지 를 보 낼 때 hash max size 의 값 을 먼저 증가 해 야 합 니 다.
본문 을 이해 하기 위해 서 는 먼저 두 가지 개념 을 이해 해 야 한다.
hash table
hash table 은 해시 표, 산 목록 이 라 고도 부 르 며 키 값 (Key value) 에 따라 직접 접근 하 는 데이터 구조 입 니 다.즉, 키 코드 값 을 표 의 한 위치 에 비 추어 기록 에 접근 함으로써 검색 속 도 를 빠르게 하 는 것 이다.이 매 핑 함 수 는 해시 함수 라 고 하 는데 기록 을 저장 하 는 배열 을 hash 표 라 고 합 니 다.
주어진 표 M, 함수 f (key) 가 존재 합 니 다. 주어진 키 값 key 를 함수 에 대 입 한 후 이 키 워드 를 포함 하 는 표 에 기 록 된 주 소 를 얻 을 수 있다 면 표 M 을 해시 (Hash) 표 라 고 하고 함수 f (key) 를 hash 함수 라 고 합 니 다.
cache line size
L1 DATA CACHE 는 작은 메모리 에 해당 합 니 다. 16K 크기 라 고 가정 하면 일반 물리 적 메모리 와 상호작용 을 합 니 다. 메모리 와 의 상호작용 은 보통 16 바이트 (또는 32 바이트) 를 한 번 에 전송 합 니 다. 즉,:
CACHE 바이트 0 - 15 번 물리 적 메모리 쓰기 / 읽 기, 바이트 16 - 31 번 물리 적 메모리 쓰기 / 읽 기.. CACHE 와 물리 적 메모리 사이 에서 한 번 전송 되 는 바이트 들 을 cache line size 라 고 합 니 다.
cache 라인 정렬
cache 가 물리 적 메모리 의 위치 가 임 의적 이지 않 습 니 다. 우 리 는 메모리 가 64K 라 고 가정 합 니 다. 그러면 cache 주소 0 의 수 치 는 물리 적 메모리 의 주소 0, 16K, 32K 와 만 상호작용 할 수 있 습 니 다. cache 주소 1 의 수 치 는 물리 적 메모리 의 주소 1, 16K + 1, 32K + 1 과 만 상호작용 할 수 있 습 니 다. cache 주소 16K - 1 의 수 치 는 물리 적 메모리 의 주소 16K - 1, 16K + 16K - 1, 32K + 16K - 1 과 만 상호작용 할 수 있 습 니 다.
대상 A 의 한 필드 길이 가 16 바이트 라 고 가정 합 니 다. 물리 적 주소 0 - 15 에 두 면 CPU 는 cache 의 첫 번 째 cache line 상호작용 만 하면 대상 A 의 16 바이트 길이 필드 를 완전히 읽 을 수 있 습 니 다.
물리 적 주소 8 - 23 에 놓 으 면 첫 번 째 와 두 번 째 cache line 을 모두 읽 어야 이 필드 의 정 보 를 얻 을 수 있 습 니 다. 분명히 속도 가 느 리 기 때문에 일반 필드 는 cache line 정렬 이 필요 합 니 다. 여기 서 16 개의 바이트 정렬 입 니 다.
저작권 정보: 본 고 는 nginx. org 의 부분 을 컴 파일 하고 원래 의 licence 성명 에 따라 2 - clause BSD - like license
기타 참조: hash table cache line size cache line 정렬
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.