Come distriggersre a livello di programmazione il prefetching dell’hardware?

Vorrei distriggersre a livello di programmazione il prefetching dell’hardware.

Dall’ottimizzazione delle prestazioni delle applicazioni su Microarchitettura Intel® Core ™ Utilizzando prefetcher implementati da hardware e come scegliere tra prefetch hardware e software su architettura Intel® a 32 bit , è necessario aggiornare l’MSR per disabilitare il prefetching dell’hardware.

Ecco uno snippet pertinente:

“Le impostazioni di Prefetch di DPL Prefetch e L2 Streaming possono anche essere modificate a livello di IA32_MISC_ENABLE scrivendo un’utilità di driver di periferica per la modifica dei bit nel registro IA32_MISC_ENABLEMSR 0x1A0 . Tale utility offre la possibilità di abilitare o disabilitare i meccanismi di prefetch senza richiedere alcun tempo di inattività del server.

La tabella seguente mostra i bit nel IA32_MISC_ENABLE MSR che devono essere modificati per controllare il Prefetch streaming DPL e L2:

     Prefetcher Type MSR (0x1A0) Bit Value DPL (Hardware Prefetch) Bit 9 0 = Enable 1 = Disable L2 Streamer (Adjacent Cache Line Prefetch) Bit 19 0 = Enable 1 = Disable" 

    Ho provato a utilizzare http://etallen.com/msr.html ma questo non ha funzionato. Ho anche provato ad usare wrmsr in asm/msr.h direttamente ma in segfault. Ho provato a farlo in un modulo del kernel … e ho ucciso la macchina.

    BTW – Sto usando il kernel 2.6.18-92.el5 e ha MSR collegato nel kernel:

     $ grep -i msr /boot/config-$(uname -r) CONFIG_X86_MSR=y ...