El término «calidad de servicio» nos puede hacer venir a la mente cosas que no tienen nada que ver con el hardware, por lo que no se trata de un término muy común en el mundo del hardware. No obstante el QoS de una CPU es un elemento muy importante de cara al rendimiento en un procesador multinúcleo. Os explicamos en qué consiste y qué factores influyen en él.
En cualquier sistema de trabajo donde hay varios elementos trabajando entre sí, ya sean personas o elementos autómatas cómo máquinas y procesadores. No solo es importante el rendimiento individual de cada uno de los elementos, sino también que la comunicación entre ellos sea la adecuada en cada momento para dar el máximo rendimiento posible. Es aquí donde lo que conocemos como calidad de servicio o QoS de un procesador entra en juego.
¿Qué entendemos cómo calidad de servicio o QoS en una CPU?
El término calidad de servicio en las CPU viene del mundo de las telecomunicaciones, donde hace referencia al rendimiento general de una red telefónica y por tanto la capacidad de dar el servicio adecuado a las diferentes terminales que participan en dicha red. Dicha definición está extrapolada al mundo de las CPU multinúcleo y las APU, donde hace referencia a la comunicación de los diferentes elementos del procesador entre si y con la memoria RAM a través de un hub central común. El cual conocemos tradicionalmente como Northbridge y por tanto el QoS de una CPU multinúcleo depende del rendimiento del hub central, sea este el clásico Crossbar Switch de los Switch o un NIC o SmartNIC de un NoC.
La idea de la calidad de servicio es que no solo los diferentes núcleos, sino también el resto de componentes en el procesador tienen las líneas de comunicación necesarias para funcionar adecuadamente en cada momento. Por lo que se ha de procurar en el diseño que todo el sistema de intercomunicación no solo en los picos de rendimiento esperados. Sino también que no haya desequilibrios de cara a la comunicación interna en una CPU.
En un sistema multihilo en el que cada una de las CPUs se encargan de un hilo de ejecución distinto, el hecho de cada núcleo de la CPU no tenga problemas de comunicación con el resto de núcleos y componentes es importante de cara al rendimiento. En especial por la intercomunicación que hay entre los diferentes hilos de ejecución de los programas. Pero esto es importante de cara a las CPU para servidores que ejecutan varios sistemas operativos de manera virtualizada para varios clientes remotos.
La Ley de Parkinson y la QoS de una CPU
Como es obvio para que en un procesador multinúcleo ofrezca calidad de servicio nos hemos de asegurar que los anchos de banda y las latencias de cada uno de los elementos son los adecuados para poder sacar el máximo rendimiento posible. A día de hoy los núcleos dependen del Northbridge integrado para alcanzar el máximo rendimiento posible en ese aspecto. ¿Cómo medimos dicho rendimiento? Al contrario de leyes de rendimiento en computación como la Ley de Amdahl en computación se aplica la Ley de Parkinson, cuyo enunciado general es el siguiente:
El trabajo a realizar se expande hasta llenar el tiempo disponible para que este sea completado.
En principio no es algo que tenga mucho que ver con la informática, pero hay que tener en cuenta que el QoS de una CPU depende de cómo se organizan los envíos de información entre las diferentes partes. Por lo que de la misma manera que en la vida real cuando planificamos algo aparecen elementos no esperados que retrasan nuestro proyecto. En la comunicación interna de una CPU de cara a otorgar la calidad de servicio ocurre lo mismo, por lo que se han de tener en cuenta todos los elementos que pueden aumentar la latencia y disminuir el ancho de banda interno.
No obstante, a la hora de diseñar un nuevo procesador no todos los elementos que otorgan calidad de servicio dependen del hardware.
No se puede asegurar la calidad de servicio de una CPU
Nuestro hardware es algo inútil sin un software que ejecutar y al mismo tiempo el software no es nada sin un hardware que lo ejecute. Por lo que son dos partes que se complementan entre sí de manera simbiótica y por tanto el hardware no puede vivir sin el software y viceversa. Esto implica que hay factores en el software que afectan al hardware y también a la calidad de servicio de una CPU.
En cuanto al hardware, hay elementos como la latencia existente entre diferentes pozos de memoria en un sistema de direccionamiento no unificado. La comunicación de la memoria caché con los diferentes núcleos y la forma de estos de utilizarla. Además de otros factores a nivel de arquitectura que por limitaciones varias en el diseño no se han podido implementar de mejor manera.
Si hablamos del software, tenemos que el programa encargado de gestionar los hilos de ejecución de los diferentes programas es el sistema operativo, por lo que será la gestión de este la que afectará a la calidad de servicio que pueda otorgar una CPU. Por lo que dependiendo de lo optimizado y por tanto bien programado que resulte un sistema operativo veremos un rendimiento u otro entre diferentes sistemas operativos ejecutándose en una misma CPU.
No podemos olvidar tampoco la calidad del código utilizado a la hora de desarrollar los programas. Podemos escribir un millón de programas distintos para hacer una tarea en concreto, pero no todos utilizan algoritmos y estructuras de datos igual de eficientes, tampoco las librerías de terceros y APIs externas en las que se basen serán igual de buenas. Todo esto hace que la calidad de servicio en una CPU a día de hoy no se pueda conseguir y sea realmente una utopía.
¿Existe la CPU con calidad de servicio ideal?
Antes de nada, hemos de tener en cuenta que la calidad de servicio ideal no existe, ya que es imposible llegar a los máximos teóricos que ésta requiere para que haya el rendimiento en comunicación al 100% entre las diferentes partes. ¿Qué tendría que tener una CPU con una calidad de servicio perfecta? Pues los siguientes elementos:
No hay problemas en el acceso a los datos e instrucciones por parte de la CPU, todo funciona de manera correcta. Lo cual sabemos que es imposible en la búsqueda y captación de información por parte de la CPU.
No hay interrupciones por hardware y por software que hagan parar todos los procesos de golpe. Lo cual es imposible, ya que sin interrupciones el resto del hardware no podría interactuar con la CPU.
El sistema operativo tiene el código perfecto a la hora de gestionar los diferentes hilos de la CPU de manera ordenada. Otra cosa que también es imposible de conseguir en un sistema operativo.
Por lo que la CPU con calidad de servicio ideal no existe realmente, pero al mismo tiempo es un desafío para los ingenieros para obtener el mayor rendimiento posible.
The post ¿Qué es la calidad de servicio de una CPU y cómo afecta al rendimiento? appeared first on HardZone.