Ubuntu 14.04에서 L1 및/또는 L2 캐시를 비활성화할 수 있습니까(가급적 Python과 같은 고급 언어 사용)? 그렇다면 어떻게 해야 할까요?
또한 캐싱 비활성화가 아키텍처마다 크게 다를까요? 그렇다면 ARM Cortex-A15에 더 관심이 가네요.
편집하다
캐싱을 비활성화하는 방법을 조사하는 동안 /proc/sys/vm/에서 "drop_caches" 파일을 찾았습니다.kernel.org 문서
"이것을 작성하면 커널이 디렉터리 및 inode와 같은 회수 가능한 슬랩 개체뿐만 아니라 깨끗한 캐시도 삭제하게 됩니다. 일단 삭제되면 해당 메모리가 해제됩니다."
...
"이 파일은 다양한 커널 캐시(inode, 디렉토리 항목, 페이지 캐시 등)의 증가를 제어하는 수단이 아닙니다. 시스템의 다른 곳에서 메모리가 필요할 때 커널이 이러한 개체를 자동으로 회수합니다."
이것은 캐시를 비활성화하는 것처럼 보이지 않을 뿐만 아니라 가상 메모리가 하드웨어가 아닌 OS에 상주한다고 생각하기 때문에 내가 원하는 것이 아닌 것 같습니다.내 목표는 캐싱을 비활성화하는 것이므로 필요한 메모리는 RAM과 같은 다른 곳에서 찾아야 합니다.
편집하다
명확히 하기 위해 캐시를 비활성화하면 시스템에 어떤 영향을 미치는지 이해합니다. 그러나 이는 안전이 중요한 응용 분야의 신뢰성을 향상시키기 위해 우주 응용 분야에서 사용되는 일반적인 기술입니다. 다음은 이 현상을 기록한 몇 가지 리소스입니다.
캐싱을 통해 임베디드 소프트웨어 방사로 인한 장애 감소
우주 방사선 환경에서 마이크로프로세서의 지상 방사선 테스트에 대한 지침
이 주제에 관한 책도 있습니다:
답변1
약간의 ASM 코드를 사용하여 이 작업을 수행할 수 있습니다. Intel의 11장을 참조하세요.시스템 프로그래밍 가이드
11.5.3 캐싱 방지
캐시 채우기를 활성화하고 수신한 후 L1, L2 및 L3 캐시를 비활성화하려면 다음 단계를 수행하십시오. 1. 채우기 없음 캐시 모드를 입력합니다. (제어 레지스터 CR0의 CD 플래그를 1로 설정하고 NW 플래그를 0으로 설정합니다. 2. WBINVD 명령어를 사용하여 모든 캐시를 플러시합니다. 3. MTRR을 비활성화하고 기본 메모리 유형을 비캐시로 설정하거나 모든 MTRR을 비캐시로 설정합니다. 캐시된 캐시 메모리 유형(섹션 11.11.2.1 "IA32_MTRR_DEF_TYPE MSR"의 TYPE 필드 및 E 플래그에 대한 설명 참조)
나는 이 기능을 구현할 수 있는 Python 모듈을 모릅니다.
답변2
이 작업을 수행하려면 커널 모듈이 필요하고 모듈을 로드하려면 루트 권한이 필요하기 때문에 Python에서 직접 수행할 수 없습니다.
바라보다http://lxr.free-electrons.com/source/arch/arm/mm/cache-v7.S#L21L1 캐시를 무효화하는 방법(비활성화가 아니라 무효화)을 알아보세요.
다양한 CPU 아키텍처(예: x86 및 ARM)에는 캐시를 비활성화하려면 다른 어셈블리 코드(CPU 명령어)가 필요합니다. Linux 커널이 L1/L2/L3/L4 캐시를 비활성화할 수 있는지 확실하지 않습니다. 그렇다면 이러한 캐시가 없으면 CPU가 느리기 때문에 짧은 시간 동안 내부적으로만 사용된다고 생각합니다.
바라보다Linux 시스템에서 CPU 캐시(L1/L2)를 비활성화하는 방법이 있습니까?x86/x64 시스템에서 캐시를 비활성화하는 방법에 대한 링크(레지스터를 변경해야 함 cr0
) ARM 검사용캐시 비활성화 동작.
CPU 캐시의 역할을 완전히 이해했는지 잘 모르겠습니다. 시스템 성능을 저하시키려는 이유를 자세히 설명할 수 있습니까?