커널은 런타임시 캐시 라인 크기를 어떻게 결정합니까?


2

나는주의했다. /proc/cpuinfo 캐시 라인 크기를 제공합니다.

# cat /proc/cpuinfo | egrep "(cache|clflush)"
cache size  : 6144 KB
flags       : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat
pse36 clflush dts mmx fxsr sse sse2 ss syscall nx rdtscp lm constant_tsc arch_perfmon
pebs bts nopl xtopology tsc_reliable nonstop_tsc aperfmperf eagerfpu pni pclmulqdq
ssse3 cx16 pcid sse4_1 sse4_2 x2apic popcnt aes xsave avx hypervisor lahf_lm ida arat
epb pln pts dtherm xsaveopt
clflush size    : 64
cache_alignment : 64

커널이 CPU 명령어 (또는 x86 / x32 / x64의 CPUID 기능) 또는 오프라인으로 컴파일 된 값 테이블을 사용하고 있다고 생각합니다. 몇 가지 타이밍 공격을 저지하기 위해 소프트웨어에서 정확한 값을 얻는 데 관심이 있습니다.

또한 커널이 컴파일 할 때 정적 값을 사용한다는 것도 알고 있습니다. 예를 들어, 커널은 ARM에 대해 64의 캐시 라인 길이를 사용합니다. 빌드하는 동안 런타임에 동적 값으로 전환됩니다.

커널은 정확히 어떻게 캐시 라인 크기를 결정합니까?

커널이 API를 검색하여 커널을 검색합니까?

항상 정확한가?


당신은 당신이 도움이되었거나 중요하다고 대답 한 대답을 upvote해야합니다. 또한 원래 질문의 포스터이기 때문에 쿼리를 완전히 처리 한 경우이를 받아 들여야합니다.
MariusMatutiae

@ 마리우스 - 스택 교환 네트워크가 어떻게 작동하는지 알고 있습니다. 그래서 당신의 요점은 정확히 알지 못합니다 ... 세 가지 질문 중 두 가지는 답이 없습니다.
jww

답변:


2

EAX = 2 인 CPUID 명령은 EAX, EBX, ECX 및 EDX 레지스터에 캐시 및 TLB 정보를 반환합니다.

예를 들어, http://x86.renejeschke.de/html/file_module_x86_id_45.html 반환 값을 문서화하는 INPUT EAX = 2.

VM 내부와 같은 CPUID 명령어를 무시할 수도 있지만,이 경우에는 신경 쓰지 않아도됩니다.


감사. 내가 가장 관심을 갖고있는 프로세서는 (1) 우리가 x86 / x32 / x64 코드를 가지고 있고 (2) ARM이 모바일에서 인기있는 CPU이기 때문이다. 우리는 또한 MIPS와 S / 390 같은 덜 알려진 것을 지원합니다. 따라서 커널이 커널을 검색 할 수있는 커널을 제공하는지 궁금해하는 이유입니다. 만약 그렇다면 정말 정확한 (또는 추정치).
jww
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.