tag mp3tag kid3 editar easytag linux kernel prefetch

linux - mp3tag - ¿Cómo desactivo programáticamente la recuperación previa de hardware?



mp3 tag linux (4)

De la referencia de Intel:
Esta instrucción debe ejecutarse en el nivel de privilegio 0 o en el modo de dirección real; de lo contrario, se generará una excepción de protección general #GP (0). Especificar una dirección MSR reservada o no implementada en ECX también causará una excepción de protección general.

...
La instrucción CPUID se debe usar para determinar si los MSR son compatibles (EDX [5] = 1) antes de usar esta instrucción.

Por lo tanto, su error podría estar relacionado con una CPU que no admite MSR o con la dirección incorrecta de MSR.

Hay muchos ejemplos de uso de los MSR en la fuente del kernel:

En la fuente del kernel, para una sola CPU, muestra la deshabilitación de la captación previa para Xeon en arch / i386 / kernel / cpu / intel.c, en la función:

static void __cpuinit Intel_errata_workarounds (struct cpuinfo_x86 * c)

Los argumentos de la función rdmsr son el número msr, un puntero a la palabra baja de 32 bits y un puntero a la palabra alta de 32 bits.
Los argumentos de la función wrmsr son el número msr, el valor bajo de palabra de 32 bits y el valor alto de palabra de 32 bits.

Los sistemas multi-core o smp tienen que pasar la estructura cpu como primer argumento:
void rdmsr_on_cpu (unsigned int cpu, u32 msr_no, u32 * l, u32 * h);
void wrmsr_on_cpu (unsigned int cpu, u32 msr_no, u32 l, u32 h);

Me gustaría deshabilitar programáticamente la recuperación previa de hardware.

Desde la optimización del rendimiento de aplicaciones en la microarquitectura Intel® Core ™ utilizando prefetchers implementados en hardware y cómo elegir entre la recuperación previa de hardware y software en la arquitectura Intel® de 32 bits , necesito actualizar el MSR para desactivar la recuperación previa de hardware.

Aquí hay un fragmento relevante:

"La prelectura DPL y la IA32_MISC_ENABLE L2 también pueden modificarse mediante programación escribiendo una utilidad de controlador de dispositivo para cambiar los bits en el registro IA32_MISC_ENABLE - MSR 0x1A0 . Dicha utilidad ofrece la capacidad de habilitar o deshabilitar mecanismos de MSR 0x1A0 sin requerir ningún tiempo de inactividad del servidor.

La siguiente tabla muestra los bits en IA32_MISC_ENABLE MSR que deben ser modificados para controlar el DPL y L2 Streaming Prefetch:

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"

Intenté usar http://etallen.com/msr.html pero esto no funcionó. También intenté usar wrmsr en asm/msr.h directamente, pero eso segfaults. Intenté hacer esto en un módulo kernel ... y maté a la máquina.

Por cierto, estoy usando kernel 2.6.18-92.el5 y tiene MSR vinculado en el kernel:

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


En 2014, Intel publicó información sobre la deshabilitación de preajustes h / w con 0x1a4 msr (1a4 msr) para Nehalem, Westmere, Sandy Bridge, Ivy Bridge, Haswell, Broadwell (y probablemente núcleos más nuevos). Link fue encontrado por bholanath here :

software.intel.com/en-us/articles/… Divulgación del control prefetcher H / W en algunos procesadores Intel - Vish Viswanathan (Intel) , 24 de septiembre de 2014

Este artículo divulga la configuración de MSR que se puede utilizar para controlar los diversos prefetchers h / w que están disponibles en procesadores Intel basados ​​en las siguientes microarquitecturas: Nehalem, Westmere, Sandy Bridge, Ivy Bridge, Haswell y Broadwell.

Los procesadores mencionados anteriormente admiten 4 tipos de precaptores h / w para la captación previa de datos. Hay 2 captadores previos asociados con el caché de datos L1 (también conocido como captador previo de DCU DCU, prefetcher de DCU IP ) y 2 captadores previos asociados con el caché L2 (captador de hardware L2, captador previo de línea de caché L2) .

Existe un Registro Específico de Modelo (MSR) en cada núcleo con dirección de 0x1A4 que se puede usar para controlar estos 4 captadores previos. Los bits 0-3 en este registro se pueden usar para habilitar o deshabilitar estos captadores previos. Otros bits de este MSR están reservados.

Son locales para cada núcleo de CPU y se pueden cambiar por root con la ayuda del controlador de kernel de msr linux. Son utilizados por Intel para medir la latencia de memoria en NUMA con la herramienta Intel MLC:

Por ejemplo, la herramienta Intel Memory Latency Checker ( http://www.intel.com/software/mlc ) modifica los captadores previos mediante escrituras en MSR 0x1a4 para medir las latencias precisas y restaurarlas al estado original al salir.


Estoy agregando una respuesta aquí, porque las anteriores pueden no ser aplicables a todos los procesadores Intel.

Para mi procesador Intel Xeon 5650 (familia 06_2CH), el capítulo 35 del manual especifica que los bits 10 a 8 del registro IA32_MISC_ENABLE en la dirección 0x1A0 están reservados. Supongo que esto significa que no puedo activar y desactivar prefetcher a través de MSR.

Según una respuesta de un empleado de Intel here : "Intel no ha revelado cómo deshabilitar los captadores previos en los procesadores de Nehalem en adelante. Tendrás que deshabilitar los captadores previos que usan opciones en el BIOS".


Puede habilitar o deshabilitar los captadores previos de hardware utilizando msr-tools http://www.kernel.org/pub/linux/utils/cpu/msr-tools/ .

A continuación, se habilita el precapturador de hardware (al desactivar el bit 9):

[root@... msr-tools-1.2]# ./wrmsr -p 0 0x1a0 0x60628e2089 [root@... msr-tools-1.2]# ./rdmsr 0x1a0 60628e2089

Lo siguiente deshabilita el captador previo de hardware (habilitando el bit 9):

[root@... msr-tools-1.2]# ./wrmsr -p 0 0x1a0 0x60628e2289 [root@... msr-tools-1.2]# ./rdmsr 0x1a0 60628e2289

Programativamente, puede hacer esto como root abriendo /dev/cpu/<cpunumber>/msr y usando pwrite para escribir en el "archivo" de msr en el desplazamiento 0x1a0 .