Problema de rendimiento multiproceso multinúcleo en el entorno ARM de Linux

Problema de rendimiento multiproceso multinúcleo en el entorno ARM de Linux

Estoy desarrollando una aplicación de Linux en una CPU ARM de 4 núcleos. Hay dos procesos en la aplicación y asigné cada proceso a la CPU como se muestra a continuación.

  • núcleo1: proceso1 (GUI)
  • core2-4: precess2 (aplicación en tiempo real)

Sin el proceso1, el proceso2 maneja fácilmente su proceso y no hay nada de qué preocuparse. Pero el problema es que cuando ejecuto el proceso1, tiene un gran impacto en el rendimiento del proceso2 y el proceso2 no funciona correctamente en absoluto.

¿Cuál podría ser una razón para esto?

Información adicional:

  • cpu2-4 se aísla con isolcpus=1-3

  • Seguí los subprocesos de todo el sistema y noté que solo cuando existe el proceso1, el proceso2 activa muchas tareas llamadas rcu_preempt en core1. Sin embargo, estos dos procesos no comparten ninguna memoria.

  • Reemplacé el proceso1 con algunos otros procesos y descubrí que un proceso que escribe rápidamente una gran cantidad de datos en una memoria asignada afecta al proceso2. Solo un proceso que realiza un trabajo simple de CPU (como un bucle while) no afecta.

Respuesta1

Usted se ha hecho cargo de todas las CPU, lo que ha obligado al kernel de Linux a adelantarse a los procesos en ejecución para ejecutar sus propios subprocesos. El kernel entonces no distingue entre las CPU y puede apropiarse de la CPU1 tan bien como de cualquier otra CPU. Cuanta más actividad ocurra en la computadora, el kernel necesitará anticiparse aún más, nuevamente, sin discriminar entre CPU.

Además, la CPU no lo es todo y la arquitectura de una computadora puede tener más cuellos de botella implícitos. Algunos de ellos son bancos de memoria, donde el acceso simultáneo a un banco depende de la cantidad de canales hacia ese banco. Luego están el bus de memoria de la computadora, el caché del disco, el disco mismo, etc.

Puede encontrar más sugerencias sobre cómo ejecutar realmente un proceso en tiempo real en el artículo. ¿Cómo ejecutar una aplicación en tiempo real en Linux? Sin embargo, es su hardware real el que determina qué funcionará mejor o peor.

información relacionada