J'ai remarqué /proc/cpuinfo
propose une taille de ligne de cache :
# 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
Je suppose que le noyau utilise une instruction CPU (ou une caractéristique CPUID pour x86/x32/x64) ou une table de valeurs compilée hors ligne. Je suis intéressé par l'obtention d'une valeur précise dans le logiciel afin de contrecarrer certaines attaques temporelles.
Je sais également que le noyau a une valeur statique utilisée au moment de la compilation. Par exemple, la valeur Le noyau utilise une longueur de ligne de cache de 64 pour les ARM lors de la construction, mais il passe également à une valeur dynamique lors de l'exécution.
Comment le noyau détermine-t-il exactement la taille des lignes de cache ?
Le noyau expose-t-il une API pour la récupérer ?
Est-il toujours exact ?