Linux 커널, 특히 LLC에서 데이터를 캐싱하는 프로세스

Linux 커널, 특히 LLC에서 데이터를 캐싱하는 프로세스

커널이 어떻게 데이터를 LLC나 L3 캐시에 넣는지 자세히 알고 싶습니다. 커널에서 캐시를 사용하는 방법에 대한 정보를 검색해봤는데 많은 결과가 페이지 캐시나 버퍼 캐시에 대한 이야기인데 이 질문에는 메인 메모리 위의 캐싱에 대해서만 나와 있습니다.

or 를 사용하여 커널 컨텍스트에서 작업 세트 또는 데이터 구조(30MB kmalloc) 를 생성한다고 가정해 보겠습니다 vmalloc. 내 생각에는 커널의 메모리 위반을 방지하기 위해 보호 또는 추가 최적화와 같은 다양한 프로세스가 있을 수 있으며 이는 사용법 malloc이나 mmap사용자 컨텍스트 와 다릅니다 .

따라서 사용자 모드에서 user library()를 사용하여 동일한 크기의 작업 세트(30MB)를 생성하면 malloc작업 세트에서 이 데이터에 액세스할 때 성능이 달라질 것으로 예상됩니다.

질문
1. 커널은 LLC 캐시를 어떻게 사용합니까?
2. malloc을 사용하여 메모리를 할당하면 성능이 달라지나요?

답변1

LLC는 단순히 "마지막 레벨 캐시". 정확히 어느 수준의 캐시인지는 아키텍처에 따라 매우 다릅니다. 최근 x86/amd64 아키텍처에서는 일반적으로 L3 캐시입니다.

캐싱은 대부분 커널과 독립적으로 수행됩니다. asm 레벨에서도 L3 캐시를 비롯해 CPU 메모리 캐시를 운용할 수 있는 기능이 없거나 아주 적다. 이를 처리하는 것이 커널의 임무라면 아마도 의심스러울 것입니다.

Intel(AMD) CPU에는 다음이 있습니다.지하철레지스터는 커널이 캐시 기능에 대한 메모리 범위를 보는 방식에 영향을 미칠 수 있습니다. 최신 Intel CPU에는 다음 기능도 있습니다.분할L3 캐시는 다음과 같이 조정할 수 있습니다.도구(커널 4.10부터 시작). 1

커널 API에는 malloc()기능이 없습니다. kmalloc()기본적으로 가 malloc()있으며 vmalloc()항상 바이트가 아닌 페이지를 할당합니다. 커널 가상 머신은 주로 페이지를 처리하며 본질적으로 보다 효율적인 malloc 유사 기능을 위한 kmalloc()래퍼일 뿐입니다 .vmalloc()

커널 알고리즘에는 캐시 환경에서 더 잘 조정되도록 하는 다양한 최적화가 있지만 주로 낮은 캐시 수준을 처리합니다(예: 동일한 페이지 또는 캐시 라인에서 동시 프로세스/커널 스레드가 작동할 가능성이 최소화된 경우 더 좋습니다). ). 이를 사용하면 vmalloc()다중 CPU 환경에서 캐싱을 처리하는 데 큰 도움이 될 수 있습니다.

커널은 주로 C로 작성되었으며 메모리 주소를 처리하고 캐시는 CPU 메모리 처리 메커니즘에 의해 투명하게 처리됩니다.

1 감사합니다스티븐 지터귀중한 조언을 해주세요.

관련 정보