Cómo funciona CXL, el PCI Express mejorado para centros de datos y estaciones de trabajo
Si habéis leído las especificaciones de muchos procesadores y placas base para el mercado alto rendimiento, es decir, estaciones de trabajo, servidores, centros de datos y similares, veréis que siempre aparece nombrada una tecnología llamada CXL o Compute Express Link que suele coincidir con el PCI Express. En este artículo os vamos a explicar qué es y para qué se usa y por qué no suele verse en PC.
Una de las particularidades del PC y todos los sistemas derivados, entre ellos algunos que no son de uso doméstico, es el hecho de que su memoria o acceso a la misma no es unificado, lo que obliga a la creación de nuevos protocolos para conseguir dicha función. Durante un largo tiempo, los diferentes fabricantes tienen que romperse los sesos para conseguir que los diferentes componentes. Pese a tener distintas memorias, usarán el mismo direccionamiento. Si bien podían hacerlo entre dispositivos una misma marca, la cosa se complicaba cuando en varias compañías la idea del CXL no es otra que conseguir ese objetivo desde un protocolo abierto que pueda usar cualquier fabricante sin miedo incompatibilidades de ningún tipo
¿Qué es CXL o Compute Express Link?
Bajo el nombre de Compute Express Link, o CXL, se conoce un estándar que es una expansión del PCI Express. Esto es debido a que utiliza su misma interfaz de datos, pero que añade un elemento ausente que es la coherencia de memoria. Es decir, que pese a que físicamente los diferentes dispositivos tengan distintos pozos de memoria físicos, estos tienen acceso a una forma común de comunicarse entre ellos.
Obviamente, aquí hemos de diferenciar entre direccionamiento y situación física. Ya que lo primero es la forma en la que la CPU, GPU o cualquiera de los componentes clave localiza los datos en memoria y conoce la situación de los mismos. Como por ejemplo si se ha reescrito una celda de memoria recientemente.
Esto se suele conseguir con un sistema de cachés, donde varios núcleos, independientemente de si son simétricos o no, comparten una caché de último nivel que les permite tener una visión común del contenido de la RAM, lo cual se facilita por el hecho que suelen estar en el mismo chip, SoC, con un único controlador de memoria integrado y un pozo de memoria en común.
¿Pero qué ocurre cuando tenemos un sistema del tipo NUMA Non-Uniform Memory Access? Es decir, lo que se suele tener en PC que consiste en que, por un lado, tenemos la CPU con la RAM del sistema y por el otro, la tarjeta gráfica con su VRAM. Pues en este punto es donde entra el CXL o Compute Express Link, que lo que busca es que todos los componentes del PC, al menos los de alto rendimiento. Ya que estos son los que se comunican por la interfaz PCI Express, de ahí a usar estar como base para la creación de este estándar abierto.
Relación con el estándar PCI Express
CXL 1.0 y 2.0 se construyen a partir de la interfaz PCI Express 5.0. En cambio, la versión 3.0 del estándar lo hace bajo PCI Express 6.0. No existe una versión del Compute Express Link que funcione con generaciones anteriores de esta interfaz de comunicación en paralelo de alta velocidad. Sin embargo, hemos de tener en cuenta que para que las ventajas del CXL se activen, no solo ha de estar soportado por la placa base o el controlador PCI Express del sistema, sino que también por los dispositivos que se conectan.
Y es que el Compute Express Link añade una serie de normas de comunicación con tal de conseguir la coherencia de memoria entre los diferentes dispositivos que requieren que el hardware se encuentre adaptado para ello. Por el momento, dicha adaptación solo la podemos ver en estaciones de trabajo, servidores y centros de datos, ya que no se encuentra ni tan siquiera en las placas base más avanzadas para PC de Intel y AMD.
No obstante, el uso de este protocolo tiene como principal utilidad, el poder convertir a memorias RAM que no son la principal y que en jerarquía vendrían después de la misma en principales para ciertas tareas. De esta forma se evita el tener que recorrer memorias de alta capacidad de las que se saben que no contienen los datos. Dicho de otra forma, nos permite usar el puerto PCI Express para así acceder a memoria desde una GPU o una CPU ajena a la de cada dispositivo
Tipos de dispositivo CXL
Tenemos tres tipos de dispositivos CXL, los cuales son los siguientes:
- Los dispositivos de tipo 1 son aquellos que carecen de memoria local propia, pero que pueden beneficiarse del uso de la RAM del sistema.
- En cuanto a los dispositivos de tipo 2, son aquellos que son chips de apoyo colocados en forma de tarjeta de expansión con su propia memoria RAM. Es decir, tarjetas gráficas, FPGA a través de PCI Express. El CXL les permite a estos dispositivos y a la CPU ver sus respectivas memorias como un todo y compartir direccionamiento, incluyendo un sistema de coherencia de memoria.
- Los dispositivos de tipo 3 son memorias RAM que no forman parte ni de la RAM principal y tampoco de las especializadas de cada componente, pero que se pueden agregar al sistema y ser usadas para la intercomunicación entre estos o para ampliar la capacidad de memoria más allá de los límites físicos.
En cuanto a los protocolos de comunicación, todo dispositivo CXL ha de ser seguir a rajatabla los tres siguientes:
- CXL.io: se trata del protocolo que usa la interfaz PCI Express y su funcionalidad de comunicación para transmitir datos entre dispositivos. Lo que le permite que CXL no solo se aplique en tarjetas de expansión, sino que se puede usar también en tarjetas M.2 e incluso en periféricos externos. En el último caso, tenemos los ejemplos de Thunderbolt y las tarjetas de memoria SD Express.
- CXL.cache: se trata de proporcionar una caché en común para los diferentes dispositivos. Lo cual permite una comunicación directa entre los diferentes componentes sin que tengan que tocar la RAM principal para ello.
- CXL.memory: es la capacidad de un dispositivo de poder acceder a una memoria diferente a la suya propia de forma lateral. Ya sea la de otro dispositivo o en su defecto el añadido de un pozo de memoria adicional al sistema.
Memory pooling en CXL 2.0 en adelante
A partir de la versión 2.0 del CXL, los componentes que son compatibles con este estándar pueden utilizar otras memorias que no sean las suyas propias para trabajar. Sin embargo, para evitar problemas de contención con el uso de pozos de RAM externos, lo que se permite es utilizar espacios de memoria y asignarlos a dichos aceleradores. Esto se hace para evitar conflictos en el acceso a memoria entre los diferentes dispositivos que acceden a la misma. No obstante, permite asignar espacios de memoria concretos a las necesidades de cada dispositivo fuera de su memoria local.
Para ello, el CXL.cache es muy importante, ya que actúa como una especie de caché de último nivel de cara a los pozos de memoria adicionales que se encuentran más allá del controlador de memoria integrado en el chip y permite su acceso directo a ellos como si fuesen parte de su RAM principal. La utilidad de todo esto es fácil de entender y tiene varios usos.
Por ejemplo, imaginad por un momento que tenemos que entrenar una IA en una GPU y que su VRAM nos resulta un factor limitante en tamaño, entonces el acelerador puede ir más allá de su propia memoria local. Ya sea utilizando la RAM principal del sistema, de otro dispositivo similar compatible con CXL en el mismo ordenador o un dispositivo de memoria.
Todo ello es clave en sistemas que por limitaciones físicas no permiten ir más allá de su asignación de memoria. El caso más claro es el de una tarjeta gráfica por el hecho que suelen tener la RAM soldada, pero puede que nos encontremos en la misma situación con una CPU o cualquier otro dispositivo.