Streaming vers un disque

Résolu
Crealand Messages postés 2 Date d'inscription jeudi 10 décembre 2020 Statut Membre Dernière intervention 15 décembre 2020 - 10 déc. 2020 à 13:53
ToutEnMasm Messages postés 587 Date d'inscription jeudi 28 novembre 2002 Statut Membre Dernière intervention 13 décembre 2022 - 15 déc. 2020 à 11:19
Bonjour,

Je souhaiterais effectuer un transfert de données d'une carte d'acquisition vers un disque dur externe de 10 To connecté en PXI express. La vitesse de transfert doit pouvoir monter à 300 Mo/sec minimum, 400 Mo pour être tranquille.

Pour situer cela en ne restant que dans la programmation C, sans trop rentrer dans électronique hardware, voilà comment ça se présente :

je dispose d'une carte d'acquisition de 10 Go de mémoire et la fonction driver pour retirer les données est la suivante :

niScope_FetchBinary8 (sessions[0], channelListSession1, timeout, actualRecordLength_session1, <gras>(ViInt8*) waveformPtr_session1</gras>, wfmInfoPtr_session1);


quand je fais appel à cette fonction du driver de l'instrument, je récupère les données dans le pointeur "waveformPtr_session1" qui est un argument de sortie de la fonction

Le problème, c'est que je voudrais envoyer le contenu de ce pointeur dans le disque dur sans passer par la mémoire de windows, donc créé un flux, un streaming. Je travaille sous visual c 2008 sous windows 7, 64 bits.

Avant d'utiliser ce pointeur, je lui ai fait l'allocation suivante :

waveformPtr_session1 = (void*) malloc (..........);


Le problème, c'est que c'est trop lent...je n’atteins pas la vitesse théorique de streaming qui est de 400Mo si ce n'est plus, je perds des données, même en supprimant la partie écriture dans le fichier. Je pense que c'est du au fait que je passe par la mémoire windows avec cette allocation mémoire au lieu d'envoyer directement les données sur le disque dur !?

Si je bypass la mémoire de l'OS, je dois pouvoir générer un flux qui ne dépendra plus que de la vitesse de ma connexion PXI express entre le disque dur et la carte, un vrai streaming.

Voilà ce que dit le constructeur de la carte :
Implementing streaming from the instrument, through the controller, and onto hard disk increases the available memory of the instrument from megabytes to terabytes. By utilizing the high-bandwidth PXI and PXIe bus architectures, data can stream to and from hard disk at a rate high enough to support the instrumentation. This means that oscilloscopes can acquire data and store it directly to disk, while arbitrary waveform generators can pull data directly from disk, bypassing the previously-limiting onboard memory.


J'ai fait des recherches et j'ai entendu parler de file mapping, pensez vous que cette solution puisse être adaptée pour faire du transfert de datas d'une carte via mon pointeur de datas sur sa mémoire vers le disque !? Je serais tenté de faire un mapping de mon disque dur de 10 To ou découpé en une multitude de fichiers de quelques centaines de Go pour un traitement dans l'autre sens et d'essayer de faire pointer mon pointeur waveformPtr_session1 sur un de ces fichiers mappé du disque dur...!

Pour le file mapping, j'ai entendu parler de limitation de 2Go pour les fichiers pour du 32 bits.....mais je ne sais pas si ça concerne l'OS ou l'API win 32...! Avez vous une idée sur la meilleure manière (la plus rapide) de transférer ces données en streaming vers un disque !?

La mémoire de la carte d'1Go se rempli en quelques secondes avec mon acquisition de 300MHz d'échantillonnage. Avec le disque dur de 10 To, ça permet quelques heures d'enregistrements.

Si vous avez une idée de piste streaming, je suis preneur ;-) , j'ai un doute sur l'option file mapping...mais c'est la seule piste que j'ai, je dois passer par l'API win 32 ( https://docs.microsoft.com/en-us/windows/win32/memory/file-mapping ) mais j'ai peur d'être limité à des fichiers de 2 Go...

Merci d'avoir pris la patience de me lire :-)

2 réponses

Crealand Messages postés 2 Date d'inscription jeudi 10 décembre 2020 Statut Membre Dernière intervention 15 décembre 2020
15 déc. 2020 à 11:08
Finalement, j'ai fini par trouver ce que je cherchais, il y a un exemple en CVI qui explique tout, c'est la brique qui me manquait. J'étais sur la bonne piste avec ce que j'avais commencé sur les threads, donc je vais abandonner le file mapping et revenir sur ma première démarche avec cet exemple pour finaliser :

https://forums.ni.com/t5/Example-Program-Drafts/Reference-Design-for-Streaming-Data-from-Multiple-High-Speed/ta-p/4098718?profile.language=en&profile_language=fr
0
ToutEnMasm Messages postés 587 Date d'inscription jeudi 28 novembre 2002 Statut Membre Dernière intervention 13 décembre 2022 3
15 déc. 2020 à 11:19
Si tout est connectable,il faut un protocole de communication entre les appareils et le systeme.
Si le protocole n'existe pas tout fait,l'échec est total.
Le protocole est l'interface logiciel entre le hardware et le système.
Ce qui veut dire créer un fichier système dont on doit payer l'authentification sous windows 10.
Si la chose est faisable,le systeme doit trouver la solution.
On peut l'aider en vérifiant que l'installation est correcte dans le panneau de configuration système ce qui permet de chercher des drivers.
0
Rejoignez-nous