프로세서의 L1 및 L2 캐시를 비활성화하는 방법은 무엇입니까?


10

Ubuntu 14.04에서 L1 및 / 또는 L2 캐시를 비활성화 할 수 있습니까 (Python과 같은 고급 언어). 그렇다면 어떻게?

또한 캐시 비활성화는 아키텍처마다 크게 다릅니 까? 그렇다면 ARM Cortex-A15에 더 관심이 있습니다.

편집하다

캐시를 비활성화하는 방법을 조사하는 동안 kernel.org 설명서 에서 / proc / sys / vm /의 "drop_caches"파일에 대해 알아 냈습니다.

"이것을 쓰면 커널이 클린 캐시를 삭제하고 덴 트리 및 아이 노드와 같은 회수 가능한 슬래브 객체가 삭제됩니다. 일단 삭제되면 메모리가 해제됩니다."

...

"이 파일은 다양한 커널 캐시 (inodes, dentries, pagecache 등)의 증가를 제어하는 ​​수단이 아닙니다. 시스템의 다른 곳에 메모리가 필요할 때 커널이이 객체를 자동으로 회수합니다."

이것은 캐시를 비활성화하지 않는 것처럼 보일뿐만 아니라 가상 메모리가 하드웨어가 아닌 운영 체제 내에 있다고 생각했기 때문에 찾고있는 것처럼 보이지 않습니다. 내 목표는 캐시를 비활성화하여 RAM과 같은 다른 곳에서 원하는 메모리를 찾아야한다는 것입니다.

편집하다

명확히하기 위해 캐시 비활성화 기능이 시스템에 어떤 영향을 미치는지 이해합니다. 그러나 안전에 중요한 응용 분야의 안정성을 높이기 위해 우주 응용 분야에 사용되는 일반적인 기술입니다. 이 현상을 설명하는 자료는 다음과 같습니다.

캐시 메모리를 통한 임베디드 소프트웨어 방사선으로 인한 장애 감소

우주 방사선 환경에서 마이크로 프로세서의 접지 방사선 테스트를위한 지침

주제에 관한 책들도 있습니다 :

전자 제품의 이온화 방사선 효과 : 메모리에서 이미 저까지


캐시 비활성화와 같은 일을하려고하는 경우 임베디드 프로그래밍을 수행하고 있으며 임베디드 프로그래밍을 수행하는 경우 임베디드 언어 (C)를 사용해야하며 OS를 사용하지 않을 것입니다. 옆으로 캐시를 비활성화하면 시스템 속도가 크게 느려집니다.
Sam

캐시없이 시스템 속도를 높일 수있는 다른 방법이 있지만 캐시를 비활성화하고 벤치 마크를 실행할 때까지 이러한 방법이 얼마나 효과적인지 알 수 없습니다. 나는 C 또는 어셈블리가 임베디드 응용 프로그램에 선호되는 선택임을 잘 알고 있습니다. 그러나 파이썬에서 더 의미있는 일이 일어나고 있습니다. 파이썬이 특정 응용 프로그램에 대해 캐시를 비활성화하는 것과 같은 작업을 지원하면 더 편리합니다. OS를 제거하는 것과 관련하여 베어 메탈은 불행히도 옵션이 아닙니다.
AustinTronics

답변:


2

커널 모듈이 필요하기 때문에 파이썬에서 직접 할 수는 없습니다 (그 모듈을로드 할 수있는 루트 권한).

L1 캐시 무효화 (무효화, 무효화)에 대한 내용은 http://lxr.free-electrons.com/source/arch/arm/mm/cache-v7.S#L21 을 참조 하십시오 .

다른 CPU 아키텍처 (예 : x86 대 ARM)는 캐시를 비활성화하기 위해 다른 어셈블리 코드 (CPU 명령어)가 필요합니다. 리눅스 커널이 L1 / L2 / L3 / L4 캐시를 비활성화 할 가능성이 있는지 확실하지 않으며, 만약 그렇다면, CPU가 느리기 때문에 단기간 동안 내부적으로 사용될 것이라고 생각합니다. 이 캐시없이.

Linux 시스템에서 CPU 캐시 (L1 / L2)를 비활성화하는 방법이 있습니까?를 참조하십시오 . x86 / x64 시스템에서 캐시를 비활성화하는 방법에 대한 링크가 필요합니다 (레지스터를 변경해야 함 cr0). ARM 검사 캐시 비활성화 동작의 경우 .

CPU 캐시의 기능을 완전히 이해하고 있는지 잘 모르겠습니다. 시스템 성능을 저하시키려는 이유를 자세히 설명해 주시겠습니까?


이 응용 프로그램은 항공 우주를위한 고성능 임베디드 컴퓨팅입니다. 가동 시간은 성능보다 응용 프로그램에 더 중요합니다. 나는 이것이 이상하게 들린다는 것을 알고 있지만 현상은 잘 문서화되어 있습니다.
AustinTronics

CPU 캐시없이 어떻게 "고성능"응용 프로그램을 사용할 수 있습니까? 캐시는 가동 시간과 어떤 관련이 있습니까?
tehnicaorg

2
저는 R & D의 소프트웨어 개발자입니다. 우리는 많은 미친 짓을합니다. 응답을 통해 정보를 남기지 않거나 모호한 것 같지만 유감스러운 정보이므로 원하는만큼 정보를 얻을 수 없습니다. 항공 우주 분야의 가동 시간과 캐시가 어떤 관계가 있는지 관심이 있으시면 여기에 공개 된 JPL 문서가 있습니다. 여기에도 논문이 있습니다.
AustinTronics

1
아이러니하게도 오늘날 L1 캐시를 비활성화하는 것이 합리적입니다!
반지 Ø

4

약간의 ASM 코드로이 작업을 수행 할 수 있습니다. 인텔 시스템 프로그래밍 안내서의 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 플래그에 대한 설명을 참조하십시오).

나는 이것을 구현하는 파이썬 모듈을 모른다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.