Actualizado a: 19 de enero de 2024
Nuevo tutorial, esta vez dedicado a otro término que deberías conocer, ya que afecta tanto a las comunicaciones de red como a tu ordenador. Se trata del término QoS, en el que profundizaremos para que conozcas todos los detalles.
¿Qué es QoS?
La calidad de servicio (QoS o Quality of Service) se refiere al nivel de desempeño promedio que experimentan los usuarios en una red, máquinas virtuales, ordenador o servicio. Es decir, se puede decir que es un parámetro que evalúa de forma cuantitativa aspectos que afectan al servicio como la tasa de errores, problemas de ancho de banda, rendimiento, latencia, disponibilidad, pérdida de datos, ruido o interferencias, etc.
La QoS es de particular importancia cuando se trata de transportar tráfico en sistemas críticos o sistemas en los que dependerá su funcionalidad de este tipo de inconvenientes que he citado anteriormente. Se han desarrollado diversas tecnologías para permitir monitorizar y mejorar el QoS de distintos dispositivos.
Problemas frecuentes en comunicaciones de datos
Durante la transmisión de datos desde el origen al destino, sea en redes, entre dispositivos electrónicos, buses, etc., hay que decir que se pueden dar diferentes problemas que debes conocer, y que afectan al QoS:
- Bajo rendimiento: la velocidad máxima de transmisión de datos puede ser lenta debido a la carga variable y esto puede ser un problema para servicios en tiempo real.
- Pérdida de paquetes: todos los buses o redes que trabajan con paquetes de datos pueden perder algunos o varios de estos paquetes, lo que resulta en problemas de transmisión, pérdidas o corrupción.
- Retardos: los bits o datos transferidos también pueden tardar más o menos dependiendo de las colas largas o rutas indirectas para evitar la congestión de red.
- Latencia: cuando los datos tardan un tiempo ser accedidos o llegar, pudiendo producir un rendimiento pobre del sistema o afectar a la estabilidad de ciertas aplicaciones.
- Jitter: son fluctuaciones en la llegada de los datos, que podrían llegar con diferentes retrasos. Esta variación en el retraso se llama jitter y puede afectar la calidad de transmisiones de audio o video, o de la red.
- Entrega fuera de orden: cuando los paquetes o bits que conforman un mismo dato toman rutas alternativas, cuando esto es posible, podrían llegar al receptor en un orden diferente a como salieron del emisor, lo que podría afectar al resultado final.
- Errores: a veces, los datos pueden corromperse, por ejemplo, cuando se intercambian los estados de los bits. Si el receptor no tiene un sistema de detección y/o corrección de errores, terminará con un mal funcionamiento.
QoS en la CPU
Bien, hasta aquí he comentado mucho acerca de redes o buses que transfieren datos. Pero el QoS también se puede aplicar a otros componentes de un ordenador, como puede ser la CPU. En este caso ocurrirá lo mismo que en telecomunicaciones, es decir, se refiere al rendimiento general o capacidad para brindar un servicio adecuado.
Cuando nos referimos al QoS de una CPU con múltiples núcleos o hilos, está más relacionado a la comunicación entre los diferentes componentes del procesador y la memoria RAM a través de un bus central común. Por lo tanto, el QoS de una CPU multinúcleo depende del rendimiento de este hub central, y algo parecido sucede también en los sistemas MP o Multi-Processor, como los del HPC, donde estas comunicaciones dependerán del tipo de red que enlaza los diferentes nodos.
La idea fundamental detrás de la calidad de servicio es asegurarse de que los distintos núcleos y componentes del sistema dispongan de las vías de comunicación necesarias para funcionar de manera óptima en todo momento. Esto implica diseñar el sistema de interconexión rápido, con un gran ancho de banda, estable, con sistemas de detección y corrección de errores en algunos casos, etc.
En un sistema multihilo, donde cada CPU se ocupa de una secuencia de instrucciones diferente, es crucial que cada núcleo de la CPU mantenga una comunicación fluida con los demás núcleos y componentes. Esto es especialmente relevante debido a la intercomunicación entre los distintos hilos de ejecución de los programas, aunque también lo es para la intercomunicación de procesos, o IPC. Además, esta consideración cobra importancia en las CPU de servidores o el HPC, donde todo es aún más crítico que en un PC.
Por ejemplo, cuando nos referimos al QoS de una CPU QoS que trabajan con máquinas virtuales, como las de los servidores VPS, entre otros, se emplea para asegurar la asignación de recursos de cómputo, aislar la interacción entre la potencia de cómputo de las máquinas virtuales debido a los distintos servicios, cumplir con los requisitos de rendimiento de cómputo de los diversos servicios de las máquinas virtuales, maximizar la eficiencia, etc.
El QoS de una vCPU incluye tres parámetros principales:
- Recurso compartido de CPU: Este parámetro define que varias máquinas virtuales asignen recursos de cómputo de manera proporcional cuando compiten por los recursos físicos de la CPU. Por ejemplo, si tenemos un host físico de un solo núcleo con una frecuencia X y tres máquinas virtuales con un solo CPU ejecutándose en él, cada máquina virtual obtendrá una cuota proporcional de los recursos de la CPU en función de su configuración. Esto asegura una distribución justa de la rendimiento de cómputo entre las máquinas virtuales cuando compiten por recursos.
- Garantía de cuota de CPU: en situaciones de competencia por los recursos de cómputo, las máquinas virtuales deben recibir al menos la cantidad mínima especificada de potencia de cálculo. Por ejemplo, si una máquina virtual necesita una cuota X, esta cuota debe ser satisfecha incluso cuando otras MV o sistemas están compitiendo por recursos.
- Prioridad de CPU: la prioridad de CPU establece qué máquinas virtuales tienen acceso preferente a los recursos de hardware de procesamiento cuando se produce una competencia por esos mismos recurso. Si se configura una MV con mayor preferencia, ésta accederá preferentemente a los recursos frente a otra MV con una preferencia más baja.
Estos parámetros permiten una gestión efectiva de los recursos de CPU en las máquinas virtuales, asegurando un rendimiento adecuado y una distribución equitativa de recursos, incluso en entornos de alta competencia.
¿Qué tiene que ver con la Ley de Parkinson?
Como he comentado en el apartado anterior, garantizar una latencia mínima, un ancho de banda y una estabilidad en las transmisiones de datos entre componentes de CPU o núcleos, es vital. Y para esto se aplica una ley conocida como Ley de Parkinson. Y que dice:
«El trabajo se expande hasta llenar el tiempo disponible para que se termine.»
En un sistema informático basado en CPU también pueden aparecer algunos problemas o inconvenientes que puedan aumentar la latencia o generar algún problema referente al QoS, como puedes imaginar. Y esto debe tenerse en cuenta a la hora de diseñar un procesador, para que no se generen problemas mayúsculos y todo funcione como se espera, incluso en las peores condiciones.
¿Se puede asegurar el QoS en una CPU?
Como sabes, la electrónica o el hardware y el software trabajan en conjunto. Uno no puede funcionar sin el otro cuando hablamos de ordenadores o sistemas programados. Por este motivo, hay que garantizar un cierto QoS para que todo funcione de forma correcta. Sin embargo, en un sistema de memoria no unificado, puede haber diferentes latencias entre las diferentes ubicaciones de la memoria principal o la memoria caché de los distintos niveles. Todo ello hay que tenerlo en cuenta durante el diseño, al igual que el camino crítico, retrasos o problemas en la señal de reloj, en la alimentación, etc.
En lo que respecta al software, el sistema operativo, encargado de gestionar los hilos de ejecución de los programas y los procesos, también desempeña un papel crucial, con el planificador, y más aún cuando se trata de procesadores con multinúcleo heterogéneo. De lo contrario, rendimiento de la CPU se ve afectado por la eficiencia y optimización del sistema operativo. Por lo tanto, diferentes sistemas operativos pueden ofrecer diferentes niveles de rendimiento en la misma CPU, dependiendo de su optimización. Y esto lo hemos visto con los problemas del planificador y la asignación de las cargas de trabajo en los Intel con núcleos P-Core y E-Core en Windows, que han tenido que irse resolviendo con parches y actualizaciones, o con mejoras en el hardware de Intel…
La calidad del código fuente utilizado para desarrollar programas también es fundamental. Aunque es posible escribir un millón de programas diferentes para realizar la misma tarea, no todos utilizarán algoritmos y estructuras de datos igualmente eficientes. Y no solo eso, también interfieren en esto las bibliotecas empleadas y las APIs, ya que unas pueden ser mejor que otras. Y, si eso te parece poco, los compiladores o las opciones de compilación usadas también pueden afectar al rendimiento final. Por tanto, alcanzar un QoS perfecto es imposible, una utopía.
Es decir, el QoS pefecto significaría alcanzar los máximos teóricos necesarios para lograr un rendimiento de comunicación del 100%, algo que no se cumple en la práctica. En la práctica, estas condiciones son difíciles de lograr, pero representan un desafío constante para los ingenieros en su búsqueda del máximo rendimiento posible…
Otros usos
Para finalizar, decir que no solo sirve para la CPU, el QoS también se puede aplicar, como dije anteriormente, a otros campos, como:
- Transmisión de datos por streaming, IPTV, vídeo, audio, etc.
- Telefonía IP o VoIP.
- Videollamadas o videoconferencias.
- Telecomunicaciones inalámbricas y cableadas.
- Buses para unidades de almacenamiento.
- Aplicaciones críticas de seguridad, medicina, etc.
- Juegos en línea y apuestas, donde un retraso puede afectar al resultado.
- Buses para IoT, industria 4.0,…
- Etc.