¿Cómo utiliza Debian muchos núcleos de CPU?

Acabo de recibir una count en un VPS de 24 núcleos (según UnixBench hay 24 CPU).

  1. En términos generales, ¿cómo puedo hacer un buen uso de todos estos núcleos para la informática shell de propósito general en Debian?
  2. ¿Debo escribir algo especial cuando ejecuto aplicaciones de larga ejecución desde el shell para hacer que cada process se ejecute en un núcleo separado si hay uno disponible? ¿O solo Debian maneja todo eso, invisible para mí?

No es necesario hacer nada especial: es tarea del núcleo decidir qué hilo va a cada CPU, y lo hace mucho mejor que un humano.

Sin embargo, no tiene sentido tener 24 CPU si no tiene al less 24 hilos simultáneos para ejecutar. Los progtwigs mágicamente no irán más rápido si hay más CPU disponibles: solo los progtwigs que están codificados para tener múltiples subprocesss paralelos se beneficiarán, y muchos progtwigs no se beneficiarán, no porque estén escritos de una manera inferior, sino porque lo que hacen es inherentemente no paralelizable.

Un progtwig con N subprocesss de cálculo simultáneos se beneficiará con hasta N CPU (aunque podría no ir N veces más rápido, porque la synchronization entre los subprocesss lleva time). Al ejecutar M diferentes progtwigs que no interactúan mucho, de todos modos se aprovecha de manera similar las CPU M (o más que eso si los progtwigs tienen múltiples subprocesss).

Hay algunos casos donde la intervención manual es necesaria para aprovechar el paralelismo. Si está iniciando múltiples tareas de procesamiento de datos, tenga cuidado de que se engendren en paralelo (con un poco más de una tarea por CPU) en lugar de una después de la otra. Por ejemplo, al crear software, pase la opción -j para make . Vea algunos otros ejemplos y explicaciones:

  • Cuatro tareas en paralelo … ¿cómo hago eso?
  • Ejecución paralela de un progtwig en múltiples files
  • ¿Por qué la gente recomienda la opción -j3 para hacer cuando tiene una CPU de doble núcleo?
  • Corriendo hasta X commands en paralelo

Si está ejecutando un server web, todos los serveres web diseñados para cargas pesadas son buenos para explotar el paralelismo. Apache se utiliza como un caso de testing al evaluar el performance de las optimizaciones en el kernel de Linux. Sin embargo, tenga en count que el paralelismo en la CPU solo ayuda si no hay otro cuello de botella, como la contención debida al acceso a la database o al ancho de banda de input-salida.

Hacer uso de muchos núcleos para acelerar el performance depende en gran medida de su aplicación. Algunas aplicaciones se deben ejecutar paso a paso: simplemente no hay forma de dividir el cálculo en paralelo entre muchos núcleos porque para calcular un cierto paso, uno necesita conocer los resultados de los pasos anteriores. Si ese es el caso, entonces usar 24 núcleos es tan bueno como usar solo uno.

En otros casos, cuando la aplicación necesita hacer muchas cosas que no dependen entre sí, tener muchos núcleos puede acelerar considerablemente las cosas. Como ejemplo pertinente, si está comstackndo un proyecto con muchos files fuente, puede comstackr cada file fuente de forma independiente antes de vincular los diferentes files. En tal caso, puede hacer que el comstackdor compile cada file en un núcleo separado. Las aplicaciones que pueden hacer uso de varios núcleos de CPU por lo general tienen un interruptor para que usted lo solicite. Por ejemplo, al comstackr un proyecto usando GNU make , puede pasarle el -j seguido de un número. Este número especifica el número de trabajos make debe comenzar simultáneamente (léase: en diferentes núcleos).