Cómo detectar si isolcpus está activado y en qué cpus, cuando, por ejemplo, se conecta por primera vez en un servidor. Condiciones:
no genera ningún proceso para ver dónde se migrará.
El caso de uso es que isolcpus=1-7en un i7 de 6 núcleos, parece que no se activa isolcpus en el arranque, y me gustaría saber si es posible /proc/, /syso cualquier parte interna del núcleo que se pueda leer en el espacio de usuario, para proporcionar un estado claro de activación de isolcpus y qué CPU están interesados. O incluso lea la configuración activa del planificador, que es el primero afectado por isolcpus.
Tenga en cuenta que el tiempo de actividad es tan grande que dmesgya no se muestra el registro de arranque para detectar ningún error al inicio. No se aceptarán respuestas básicas como " mirar la línea cmd del núcleo " :)

pidstat -C isolcpus. pidstat es delsysstatpaquete.pidstatyisolcpus. ¿Puedes elaborar un poco más?isolcpuses, peropidstatpuedo decirte en qué CPU se está ejecutando un proceso si pasas la-C process_namebandera. Por ejemplopidstat -C topproduce lo siguiente.10:56:52 AM PID %usr %system %guest %CPU CPU Command 10:56:52 AM 3457 0.00 0.00 0.00 0.00 6 topisolcpuses un parámetro del núcleo que obliga al planificador a no migrar ningún proceso por sí mismo si están aislados. Por ejemplo, en un servidor de 8 cpu,isolcpus=1-7en la línea de comandos del kernel, forzará que todos los procesos generados por init y cualquier tipo de comando en shell se ejecuten solo en CPU0. Para ejecutar una tarea en una CPU aislada, debe iniciarlatasksetpor ejemplo. Entonces, con respecto a lo que estoy preguntando, parece que su respuesta está fuera de tema. Gracias de todos modos por tratar de respondermeRespuestas:
Lo que busca debe encontrarse dentro de este archivo virtual:
y lo contrario en
De lo
drivers/base/cpu.cque vemos es que la fuente que se muestra es la variable del núcleocpu_isolated_map:y
cpu_isolated_mapes exactamente lo que se establecekernel/sched/core.cen el arranque:Pero como observó, alguien podría haber modificado la afinidad de los procesos, incluidos los engendrados por demonios
cron,systemdy así sucesivamente. Si eso sucede, se generarán nuevos procesos heredando la máscara de afinidad modificada, no la establecida porisolcpus.Entonces, lo anterior le dará lo
isolcpusque solicitó, pero eso podría no ser útil.Suponiendo que descubres que
isolcpusse ha emitido, pero no se ha "tomado", este comportamiento no deseado podría derivarse de algún proceso al darse cuenta de que solo está obligadoCPU=0, creyendo que está en modo monoprocesador por error, e intentando ayudar a "arreglar las cosas". derecha "restableciendo la máscara de afinidad. Si ese fuera el caso, podría intentar aislar CPUS 0-5 en lugar de 1-6, y ver si esto funciona.fuente
/sys/devices/system/cpu/possibleno parece ser 'inverso' dependiendo de cómo interprete 'inverso'. Por ejemplo, si.../cpu/isolatedregresa2,4porque habían sido aislados,.../cpu/possibleregresaría0-191./sys/devices/system/cpu/presentqué muestra qué CPU existen, en lugar de/sys/devices/system/cpu/possiblequé muestra qué CPU podrían existir (pero que pueden no existir actualmente). En algunos sistemas son iguales, pero incluso en un escritorio bastante básico que verifiqué, no lo son.Una de las formas más fáciles de detectar si
isolcpuses consultarprocpara ver qué parámetros se pasaron al núcleo en tiempo de ejecución.Para eso, usarías:
Como puede ver, en este ejemplo en particular
isolcpus=2,3se pasó como argumento al núcleo en ejecución.También puede usar el
tasksetPID señalado 1. Como PID 1 es el PID estándar para la primera tarea lanzada por el kernel, podemos tomar como una muy buena indicación de que reflejará si estamosisolcpustrabajando. Como en:Comparando con el
lscpucomando en el mismo servidor:Como se puede ver,
lscpumuestra 4 CPU / núcleos, mientrastasksetque solo muestra 0,1, por lo que esto muestra queisolcpusestá funcionando aquí.Eche un vistazo a: ¿Cómo garantizar la disponibilidad exclusiva de la CPU para un proceso en ejecución?
fuente
/proc/cmdlinecuál es la copia exacta del contenido delgrub.confarchivo. ¡Esto no es lo que pregunté! Gracias de todos modos !Puede consultar Cpus_allowed y Cpus_allowed_list para ver el proceso actual del shell para ver qué cpus estaban reservados
por ej.
significa que cpu = 2 estaba reservado
isolcpusen un servidor de 6 cpusfuente
sshy uno hubiera limitado manualmente la afinidad del padresshda la CPU 1, vería siempre la CPU 1, ya sea que seisolcpushaya "tomado" o no. La$$rama le proporciona los valores heredados del proceso, no los valores originales del sistema.