16.6.2.6 memcached에서의 메모리 할당
memcached를 처음 시작했을 때는 구성된 메모리가 자동으로 할당되지 않습니다. 대신 memcached는 캐시에 정보 저장이 시작 된 후에 비로소 물리적 메모리 할당 및 확보를 시작합니다.
캐시에 데이터를 저장하고 시작할 때, memcached는 항목의 데이터 메모리를 항목 단위로 할당하지 않습니다. 대신 슬래브 할당을 사용하여 메모리 사용을 최적화하고 캐시 정보가 만료 된 때 메모리 조각화를 방지합니다.
슬라브 할당을 사용하면 메모리가 1M 바이트 블록 단위로 보장됩니다. 슬래브는 동일한 크기의 여러 블록으로 분할됩니다. 캐시에 값을 저장하려고하면 memcached는 캐시에 추가되는 값의 크기를 확인하고 해당 항목에 적합한 크기의 할당을 포함 슬래브를 확인합니다. 항목의 크기에 맞게 슬래브가 이미 존재하는 경우, 슬래브의 블록에 항목이 기록됩니다.
새 항목이 기존의 어떤 블록 크기보다 큰 경우, 새로운 슬래브가 만들어지고 적절한 크기의 블록으로 분할됩니다. 적절한 블록 크기를 갖는 슬래브가 이미 존재하지만, 여유 블록이없는 경우는 새로운 슬래브가 작성됩니다. 기존 항목을 해당 키에 대한 기존의 블록 할당 더 큰 데이터로 업데이트하면 그 키는 적절한 석판에 다시 할당됩니다.
예를 들어, 최소 블록의 기본 크기는 88 바이트 (값 40 바이트와 키 및 플래그 데이터에 대한 기본 48 바이트)입니다. 캐시에 먼저 저장하는 항목의 크기가 40 바이트 미만인 경우는 88 바이트의 블록 크기를 갖는 슬래브가 생성되고 값이 저장됩니다.
저장하려는 데이터 크기가이 값보다 큰 경우는 블록 크기를 청크 크기 계수의 단위로 증가시켜 값을 저장할 수있는 크기의 블록 크기가 결정됩니다. 블록 크기는 항상 스케일 계수의 함수이며, 청크 크기 다만 나눌 수있는 블록 크기로 반올림합니다.
이 구조의 예는 그림 16.7 "memcached에서의 메모리 할당" 을 참조하십시오.
그림 16.7 memcached에서의 메모리 할당
따라서 memcached에 할당 된 메모리의 범위 내에 복수의 페이지가 할당됩니다. 각 페이지는 (기본적으로) 1M 바이트의 크기를 가지고 키 / 값 쌍을 저장하는 데 필요한 청크 크기에 따라 다를 수 청크로 분할됩니다. 각 인스턴스는 여러 페이지가 할당 특정 크기의 청크를 필요로하는 새 항목을 만들 필요가있을 때는 항상 페이지가 생성됩니다. 슬래브는 여러 페이지로 구성 될 수 슬래브의 각 페이지에는 같은 수의 청크가 포함되어 있습니다.
새로운 슬래브의 청크 크기는 기반이되는 청크 크기 및 청크 크기 증가 계수의 조합에 의해 결정됩니다. 예를 들어, 초기 청크 크기가 104 바이트에서 기본 청크 크기 증가 계수 (1.25)가 사용되는 경우 다음 할당 청크 크기는 104 * 1.25에 가장 적합한 2의 거듭 제곱 (136 바이트)입니다 .
이렇게하여 페이지를 할당하여 메모리의 단편화를 방지 할 수 있습니다. 그러나 포함 된 개체의 분포에 따라 항목의 크기가 크게 다른 경우 슬래브와 청크가 효과적으로 분포하지 않을 수 있습니다. 예를 들어, 각 청크 크기의 항목 수가 적은 경우는 할당 된 각 페이지에 극소수의 청크 밖에 존재하지 않기 때문에 많은 메모리가 낭비 될 가능성이 있습니다.
-f
명령 행 옵션을 사용하여 증가 계수를 조정하면이 영향을 줄일 수 있습니다. 이 옵션은 할당 된 청크와 슬래브를보다 효과적으로 사용할 수 있도록 적용되는 증대 계수를 조정합니다. 현재 슬래브 할당 통계를 확인하는 방법은 섹션 16.6.4.2 "memcached 석판 통계" 를 참조하십시오.
운영 체제에서 지원되는 경우 -L
명령 행 옵션을 지정하여 memcached를 시작할 수 있습니다. 이 옵션은 부팅 중에 큰 메모리 페이지를 사용하여 모든 메모리를 미리 할당합니다. 그러면 CPU 메모리 캐시 미스의 수가 줄어들고 성능이 향상 될 수 있습니다.