Blog Personal.

PlayStation 5, PS5, Xbox Series X, XSX

PS5 y XSX: Unidades DMA

En PlayStation 4 entre los dispositivos DAGB que son los que se encuentran conectados al Northbridge de la GPU hay una unidad DMA.

Fuente: Documentación SDK PlayStation 4

La unidad DMA se utiliza para comunicar el espacio de memoria de la GPU con el espacio de memoria de la CPU y viceversa, es decir, para copiar datos y en realidad no es una unidad sino 2 unidades, una para cada dirección.

DMA0DMA1
LeeSystem RAMGPU RAM
EscribeGPU RAMGPU RAM

En la serie Xbox One al existir la memoria ESRAM tenemos 4 unidades DMA, los llamados Move Engines, los Move Engines solo pueden enviar y recibir datos de la GPU.

DMA0DMA1DMA2*DMA3*
LeeSystem RAMGPU RAMESRAMGPU RAM
EscribeGPU RAMGPU RAMGPU RAMESRAM
*Move Engines/DME

En el caso concreto de Xbox One X no hay ESRAM pero el intercambio de datos de un espacio a otro es emulado de la siguiente manera:

/DMA0DMA1DMA2*DMA3*
LeeSystem RAMGPU RAMGPU RAM**GPU RAM
EscribeGPU RAMGPU RAMGPU RAMGPU RAM**
*Move Engines/DME **GDDR5 copiándose a si misma los datos, emulando al intercambio de datos con la ESRAM.

En RDNA2 para PC hay 4 unidades sDMA… ¿El motivo?  Nadie se lo ha preguntado pero creo que son para comunicar la GPU con una eventual memoria NVMe (SSD), es decir, un «disco» SSD en la GPU,

Cosa que no es novedad desde el momento en que existen las Radeon Pro SSG que contienen memoria NVMe (Nand Flash en su interior). Además, ya os comente en una entrada que dicho disco SSD integrado en la GPU no era accesible para la CPU sino solamente para la GPU.

Por lo que la final la cosa quedaría así en PC con RDNA 2.

DMA0DMA1DMA2DMA3
LeeSystem RAMGPU RAMSSDGPU RAM
EscribeGPU RAMGPU RAMGPU RAMSSD

Es un caso distinto al de las consolas de siguiente generación, en el caso concreto de PlayStation 5 tenemos un total de 6 unidades DMA:

DMA0DMA1DMA2DMA3DMA4DMA5
LeeSystem RAMGPU RAMSSDGPU RAMSystem RAMSSD
EscribeGPU RAMGPU RAMGPU RAMSSDSSDSystem RAM

Dichas unidades DMA contienen las unidades de compresión y descompresión de datos correspondientes por lo que no son todas simetricas al 100% aunque deriven de los de la RDNA2.

  • DMA4 tiene integrado el compresor ZLib.
  • DMA5 tiene integrado el descompresor Zlib
  • DMA2 tiene integrado el descompresor Kraken
  • DMA3 tiene integrado compresor Kraken

De tal manera que cuando un dato se copia a través de la unidad DMA mientras viaja a este se lo comprime o descomprime durante el proceso.

En el caso de Xbox Series X es lo mismo pero con 8 unidades DMA ya que necesitamos esas dos unidades DMA extras para emular el funcionamiento de los Move Engines de la Xbox One original y su versión S de la misma manera que como he comentado más arriba, la Xbox One X necesitaba hacer lo mismo por lo que no tiene más secreto.

¿Pero que aporta el nuevo tipo de DMA en RDNA2? Pues que han aumentado el tamaño de los bloques de envió de 4MB… ¡Hasta 1GB! Por lo que esto significa que trasladar de un espacio de memoria a otro y/o de una memoria a otra hasta 1GB de datos con una sola instrucción. También nos marca que al menos 1GB del espacio de memoria de la CPU y 1GB del espacio de memoria de la GPU están asignados para el intercambio de datos con el SSD en ambas consolas. Tened en cuenta que el SoC (CPU y GPU) no leen del SSD de manera directa ni tampoco escriben sino que la petición de datos que hacen es para que dichos datos se vuelquen en dicho espacio de la RAM desde el SSD y cuando no sean necesarios vuelvan al SSD.

Esto es todo, tenéis los comentarios de esta misma entrada para comentar y no olvideis que tenemos Discord.