Connexion Premium

DirectStorage 1.4 avec compression zstd et Game Asset Conditioning Library

Le 16 mars à 08h27

DirectStorage est une fonctionnalité permettant aux GPU de discuter directement avec les périphériques de stockage de l’ordinateur, en évitant donc un passage par le processeur central. L’API vient de passer en version 1.4, avec comme principale nouveauté la prise en charge du codec zstd (ou ZStandard).

Cet algorithme est largement répandu ; nous avions d’ailleurs passé au crible ses performances en les comparant avec celles de plus d’une dizaine d’autres codecs. Microsoft a mis en ligne du code sur GitHub pour son utilisation avec les GPU.

Pour Microsoft, zstd a plusieurs avantages dans ce cas d’usage : il « se distingue par ses taux de compression et ses performances de décompression, sa large disponibilité sur le matériel et les logiciels à travers les systèmes d’exploitation, et son adoption généralisée dans les systèmes d’exploitation, le cloud et le web ».

GeForce RTX 40 Super

L’entreprise annonce dans le même temps sa Game Asset Conditioning Library (GACL), elle aussi sur GitHub. Elle propose « plusieurs composants pour améliorer la compression des assets du jeu ». Les textures sont la priorité de cette bêta car elles représentent la plus grosse taille des packages dans la plupart des jeux, explique Microsoft.

GACL « prépare » le contenu qui va être envoyé à zstd pour que les algorithmes de compression soient les plus efficaces possible. La Game Asset Conditioning Library « est conçue pour fonctionner avec le contenu existant, offrant jusqu’à 50 % d’amélioration des taux de compression Zstd pour vos assets, tout en maintenant un coût de décompression à l’exécution bas lorsqu’il est utilisé avec DirectStorage », affirme l’éditeur. Tous les détails se trouvent par ici.

Le 16 mars à 08h27

Commentaires (17)

votre avatar
Je me pose plein de questions, si certain savent comment ca fonctionne techniquement, je prend :)

Y a déjà des jeux qui font du DirectStorage sur PC ? Ca veut dire également que le GPU est capable de comprendre le filesystem (extX, ntfs, exFat, ...)? quid d'un stockage chiffrée (luks, bitlocker, ...)?
Ou alors on dédie une partition sur son NVMe, en écriture via un driver coté OS, et nativement lisible coté GPU?
votre avatar
Non, le GPU ne lit pas le disque directement. C'est le CPU qui lit le disque ; il se contente d'envoyer le contenu encore compressé au GPU.
votre avatar
Merci. Si je comprend bien, on peut dire que le CPU fait juste passe plat, donc hyper efficace. On y gagne car ca évite au CPU de passer du temps à décomprésser la data, et également un gain au niveau du bus PCIe puisque c'est plus long de passer de la data décompréssé.

Avec un algo de compression qui permet de paralléliser la décompression et des assets compréssé de tel sorte que le GPU les décompresse efficacement, on pourrait avoir un truc bien performant au final.
votre avatar
Un GPU est un processeur vectoriel, et la décompression est en général un algo avec plein de structures de contrôle, donc très peu vectorisable. Sur GPU, zstd est plus lent que sur CPU.
votre avatar
learn.microsoft.com Microsoft

& github.com GitHub

Tu désignes un fichier, un buffer, et tu dis à l'OS de préparer une ou plusieurs opérations, puis tu l'éxécutes en asynchrone.

Cela implique:

  • Que les données sont préparées dans un format interprétable par la CG ou par tout moyen d'interprétation "pluggable"

  • Qu'on passe en asyncrhone



Cela permet:

  • Que la sécurité soit vérifiée au moment de la préparation des transferts

  • Que les transferts soient fait sans intervention du CPU lors du déclenchement



Mais c'est du "Direct*": savoir si c'est réalisé dans les meilleures conditions ou si c'est "émulé" ou "en fallback" n'est pas dit.
votre avatar
Il y a un problème avec l'article, qui dit :
DirectStorage est une fonctionnalité permettant aux GPU de discuter directement avec les périphériques de stockage de l’ordinateur, en évitant donc un passage par le processeur central.
Non. DirectStorage est une technologie Microsoft qui permet de lire une texture compressée du disque vers la mémoire centrale (via le CPU, donc), puis cette texture est transférée au GPU encore compressée, et c'est le GPU qui décompresse.

Comme un GPU n'est pas vraiment prévu pour être efficace sur ce genre d'opération, les résultats sont en général mauvais. Quelqu'un peut citer un seul jeu où DirectStorage apporte quelque chose ?
votre avatar
Je ne suis pas sûr que tu puisses aborder le problème dans ce sens là, je n'ai pas fouillé mais je ne crois pas qu'il existe des bench qui comparent les mêmes jeux avec et sans directstorage...
En revanche, ici tu as une liste des jeux dispo sur Steam qui utilisent ce sdk : https://steamdb.info/tech/SDK/DirectStorage/

Y'a pas mal de beaux noms dans la liste, les résultats doivent pas être si mauvais que ça.
votre avatar
Je suis tombé sur ça : https://steamdb.info/tech/SDK/DirectStorage/

Mais cela ne donne que la liste des jeux qui utilisent l'API DirectStorage. Ca ne permet pas de comparer un même jeu avec/sans pour mesurer un éventuel gain de temps de chargement...

Edit: A priori, 3DMArk permet de comparer avec et sans : Image
Edit 2 : Je vois à plusieurs reprises, qu'il suffirait -à priori- de supprimer les 2 DLL dstoragecore.dll et dstorage.dll du répertoire d'un jeu puis de le relancer pour désactiver. Si la manip est faite sur un SSD nvme PCIE4, ça doit être une façon intéressante de faire son propre benchmark.
votre avatar
DirectStorage est une technologie Microsoft qui permet de lire une texture compressée du disque vers la mémoire centrale (via le CPU, donc)
D'après ce que j'ai lu: pas tout à fait. C'est pas nommé DMA mais c'est tout comme. L'OS a l'air de choisir ce qui va bien - et éviter de passer par ses anciennes librairies qui doivent garantir tout un tas de vérification/sécurité/fonctions.
Notamment, si c'est l'OS qui lit un fichier en mémoire, c'est l'OS qui "détient" la mémoire. Avec tous les context switch qui vont avec lors des accès par différents processus (le pilote NVMe, le pilote graphique, l'OS, le jeu)

learn.microsoft.com Microsoft

Le NVMe peut écrire en mémoire sans le CPU (ou presque), et la CG peut lire depuis la RAM sans le CPU. LE CPU coordonne ces échanges. J'imagine (oui, j'imagine) que DirectStorage active dans un cas favorable des buffers réservés HORS gestion mémoire de l'OS.

github.com GitHub
Quelqu'un peut citer un seul jeu où DirectStorage apporte quelque chose ?
La techno existe sur PS5, d'après ce que j'avais lu Ratchet & Klank était basé sur la techno et cela rendait les transitions et chargements inutiles. Mais bon: je n'ai pas testé et blabla commercial de Sony...
votre avatar
D'après ce que j'en ai vu, le CPU pilote la lecture des textures depuis le disque vers la RAM, puis il envoie ces données compressées vers le GPU. Bien sûr, ces transferts se font en DMA, donc les données ne transitent pas réellement via le CPU, mais c'est le CPU qui pilote, et les données transitent par la RAM. Il n'y a pas de transfert direct du disque vers le GPU comme on a un transfert direct du réseau vers le GPU sans passer par la RAM avec GPU Direct.
votre avatar
Arf, j'ai lu que le nvme peut se débrouiller pour la lecture vers la ram.
En fait en pcie, techniquement je ne vois pas ce qui empêche le nvme d'envoyer directement vers la cg ou la cg de lire depuis un buffer du disque.
votre avatar
Ce serait comme un pipe entre le fichier (je dis fichier car il y a bien un FS) exposé par le CPU et la GPU?
La GPU a donc au accès au pipe pour recevoir le fichier (peut-être plus sous forme de fichier mais de stream compressé) ?
Si c'est le cas, le principe serait alors de ne pas solliciter la CPU pour la décompression mais pour la conversion du fichier vers vers le pipe GPU.
Si je ne dis pas de bêtises, ce serait donc un gain p-e pas si intéressant que ça non?
votre avatar
Comme un GPU n'est pas vraiment prévu pour être efficace sur ce genre d'opération, les résultats sont en général mauvais.
Je ne sais pas. Les textures compressées, ça existe depuis les années 2000 (compression S3 par exemple) pour optimiser la bande passante.
Et des formats comme LZ (donc ZStd) sont simples à décompresser - ce sont des formats "linéaires" qu'on décompresse avec peu de retour arrière et une logique assez simple. Le genre adapté à de l'embarqué.
votre avatar
Certes, mais zstd n'est pas le plus rapide sur GPU, de loin :
https://d29g4g2dyqv443.cloudfront.net/sites/default/files/3.0nvCOMPResults.PNG
votre avatar
Intéressant. C'est quoi la colonne ratio?
Le choix est surtout lié au goulet d'étranglement. Si c'est le stockage qui rame, ça peut être intéressant de gagner sur le transfert.
Et j'aime ton exemple qui rappelle, au vu des cartes testées, qu'une techno de ce type n'est peut-être pas destinée avant tout au gamer isolé dans son coin, mais aux datacenters.
Car en montant des datacenters IA, on monte des datacenters aussi capables de gaming.
La bataille n'est plus de mon point de vue sur l'ordinateur personnel, mais bien sûr la construction de structures qui vont centraliser les traitements -et les sécuriser.
Car l'ordi personnel est une verrue dans le paysage de distribution contrôlée des médias, qui doit se sécuriser pour perdurer dans le temps.
Bref, 'e pas voir ces technos uniquement du poi t de vue de gaming perso. Il faut imaginer ce que ça apporte en datacenter.
votre avatar
Tient, c'est marrant ça, je suis justement en train de bosser sur un projet pour empaqueter les jeux avec compression/décompression zstd à la volée, et ne suis pas très loin d'une sortie... 🙂
L'idée c'était de mimer le comportement de CompactGUI de façon transparente pour tous types de jeux sous Linux, mais sans devoir se soucier de la compatibilité avec un système de fichiers en particuliers, ça fonctionnerait aussi bien en local que distant, tout en limitant grandement les problématiques de latence sur le réseau.
Pour le moment je me concentre sur Libretro (le port rust est terminé mais je dois achever le gui et l'API) et de standardisation, mais j'aimerais potasser sur le support de Proton pour les jeux PC, ensuite.
Le programme en question sera agnostique, pas spécifiquement lié à un core libretro ou un jeu en particulier, et, évidemment, livré nu. Il est pensé pour tourner sur SteamDeck avec SteamOs et les futures SteamMachines, PS4/PS5 sous Linux, et PC sous Linux.
votre avatar
Test CPC Hardware
Test sur la 1.2 sur 2 jeux, conclusion : il est urgent d'attendre