Streaming de données vers disque externe
Répondre à la discussion
Affichage des résultats 1 à 10 sur 10

Streaming de données vers disque externe



  1. #1
    Crealand

    Streaming de données vers disque externe


    ------

    Bonjour,

    J'aurais aimé avoir quelques avis. Est il possible de transférer les données d'un appareil sans passer par la mémoire Windows, c'est à dire sans faire une allocation mémoire classique !? En gros, créer un flux de données qui parte de la carte d'acquisition et qui aille directement dans le disque dur en by-passant la ram de l'OS... càd faire du streaming. En fait, je voudrais juste faire une allocation mémoire disque dur pour que ça parte directement dans le disque...au lieu de faire une allocation mémoire "windows"...

    Je m'explique...je récupère via une carte d'acquisition un signal qui se répète 4000 fois par seconde (4KHz), je récupère les 10 000 premiers points sur ses 80 000 points de période qu'il contient, avec une fréquence d'échantillonnage de 300 millions d'échantillons par seconde, acquisitions que j'aimerais enregistré sur un disque dur externe (reliée en PCI express) en temps réel, dans des fichiers binaires...ou autres du moment que je puisse les relire et qu'ils prennent le moins de place possible...

    Pour ça, j'alloue de la mémoire de la façon suivante en fonction de la taille de mes données (méthode qui a priori n'est pas bonne) :

    Code:
    // Alloue de la mémoire
    waveformPtr_session1 = (void*) malloc (LengthDataType * actualRecordLength_session1 * numWaveform_session1);
    et je récupère les données dans la mémoire de la carte via une fonction spécifique du driver de l'appareil

    Code:
    niScope_FetchBinary8 (sessions[0], channelListSession1, timeout, actualRecordLength_session1, (ViInt8*) waveformPtr_session1, wfmInfoPtr_session1);
    Tout se passe dans le pointeur waveformPtr_session1, je lui alloue une quantité de mémoire dans windows comme on peut le voir dans le code au dessus et ensuite je récupère avec ce pointeur les données (1 échantillon = 1 octet donc 10 Ko de données par itération) via la fonction fetch qui est dans une boucle (10 000 pts à chaque itération). En gros, je récupère les données, j'enregistre dans le fichier et je boucle jusqu'au stop. Pour gérer tout ça, j'ai créé deux threads, un pour l'acquisition et un pour l'écriture dans le fichier que je gère avec des sémaphores et un mutex.

    C'est trop lent, je perds des données, je passe par la mémoire Windows au lieu d'écrire directement dans le disk externe relié en PCI express. Même quand je supprime la partie écriture dans le fichier, ça perd des données. Je ne respecte pas le principe du streaming développé dans ce lien, ça doit être la cause de mon problème :

    https://www.ni.com/fr-fr/innovations...from-disk.html

    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.
    Il faut donc que je trouve une solution pour remplacer

    Code:
    waveformPtr_session1 = (void*) malloc (LengthDataType * actualRecordLength_session1 * numWaveform_session1);
    par quelquechose qui enverrait directement les données dans le disque dur externe de 10To...ce qui serait équivalent à passer à une carte de 1Go de RAM (qui se remplie en quelques secondes) à 10To de RAM, soit plusieurs heures d'enregistrements...! Je me dis que je dois quand même fournir à ce pointeur des données et qu'au lieu d'allouer de la mémoire windows, il faudrait que j'alloue plutôt de la mémoire disque dur pour envoyer directement les données dessus...

    J'ai fait quelques recherches qui m'ont dirigées vers le FileMapping sous l'API win32(CreateFileMappingA), la mémoire virtuelle, etc... encore flou pour moi pour le moment,...la bonne piste selon vous !? J'hésite à m'engager sur ces pistes...

    Si des personnes savent écrire les données d'un appareil dans un disque dur sans passer par la mémoire Windows ou qui savent faire du streaming en C, je suis preneur de pistes . Aucun des exemples que j'ai ne traite du streaming et pas grand chose, voir rien en C dans mes recherches et le constructeur des cartes d'acquisition (national instruments) ne donne pas d'info pour le faire en C, en gros, il faut passer à la caisse et acheter leur solution, leur logiciel américain LABview en langage G, mais ça doit se faire en C !

    PS : je suis sous visual C 2008 donc limité en bibliothèque

    Bonne semaine à tout le monde.

    -----

  2. #2
    gienas
    Modérateur

    Re : Streaming de données vers disque externe

    Bonjour Crealand et tout le groupe

    Bienvenue sur les forums.

    Citation Envoyé par Crealand Voir le message
    ... Est il possible de transférer les données d'un appareil sans passer par la mémoire Windows ...
    Il me semble que ta question n'est pas de nature électronique, mais plutôt informatique. C'est pourquoi je vais déplacer en software, probablement plus adapté.

  3. #3
    umfred

    Re : Streaming de données vers disque externe

    Il y a une erreur dans le lien que tu as fourni :/
    L'extrait que tu mentionnes parle du protocole PXI ou PXIe qui est le protocole de communication avec l'appareil d'acquisition (rien à voir avec l'interface PCIe de ton disque dur)
    Avec quel protocole tu communiques avec ton appareil actuellement ?
    regardes si tu as le support du langage C installé pour ton appareil > https://knowledge.ni.com/KnowledgeAr...IsSSAU&l=fr-FR

  4. #4
    Crealand

    Re : Streaming de données vers disque externe

    Merci pour ta réponse ! Pour le lien, le voici (j'avais pourtant fait un copier coller) :

    https://www.ni.com/fr-fr/innovations...from-disk.html

    J'ai bien les exemples de support en C et CVI, environ une 10aine, sauf qu'ils ne traitent pas le streaming. J'ai pu faire le driver de l'appareil en c à partir de ces exemples, il y a toute une documentation d'aide chm sur les fonctions et sur la carte d'acquisition qui m'a permis de faire le driver en c, mais ils ne traitent pas du tout du streaming, ils ne traitent que l'acquisition de données.

    A partir du moment où on veut faire du streaming vers un disque dur, national instrument nous dirige vers son logiciel payant LABview et sur leur site, coté support, tous les exemples de streaming que j'ai trouvé sont en LABview, le problème c'est qu'avec ce langage G graphique, on ne peut pas le transposer en C vu qu'on ne sait pas comment sont fait les blocs. J'ai l'impression qu'ils ne mettent pas toutes les informations dans leur support pour nous obliger à se tourner vers des options payantes quand on veut faire des choses un peu plus élaborées.

    Pour la carte d'acquisition, c'est une carte NI PXIe-5185 dans un rack PXIe 1075 relié au PC avec un câble particulier. J'ai demandé à un collègue, il m'a confirmé que c'était bien une liaison PXIe pour le disque dur, il est branché via un câble identique à celui des cartes d'acquisition donc le disque dur a le même protocole que la carte d'acquisition.
    Dernière modification par Crealand ; 10/12/2020 à 14h40.

  5. A voir en vidéo sur Futura
  6. #5
    CM63

    Re : Streaming de données vers disque externe

    Le streaming est un process comme un autre, tu ne peux pas faire passer l'information d'un support à un autre sans avoir recours à un process, donc un processeur.

  7. #6
    Crealand

    Re : Streaming de données vers disque externe

    Bonjour, ça n'est pas mon but d'éviter le processeur, c'est même très bien dit sur le site qu'il est utilisé

    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.
    Je cherche juste à éviter de passer par la mémoire de Windows pour gagner du débit en évitant une allocation mémoire classique comme dans leurs exemples en C qui ne traitent pas le streaming.

  8. #7
    umfred

    Re : Streaming de données vers disque externe

    le contrôleur ce n'est pas le processeur du PC ici il me semble, mais celui de l'interface PXI; je me demande si ce n'est pas au niveau de l'appareil que l'on peut définir ce streaming direct sur le disque dur (on lui dit tu envoies tes données sur tel disque)

  9. #8
    Crealand

    Re : Streaming de données vers disque externe

    Il existe effectivement une carte contrôleur. Elle n'a pas été installé dans le châssis. Je suis arrivé après donc tout était déjà installé. On me l'a mise à ma disposition cette semaine en me disant qu'elle était facultative mais disponible si j'en avais besoin. En effet, il y a windows d'installé sur cette carte contrôleur, donc je pense que ça n'est rien de plus qu'un PC utile pour miniaturisé et tout faire tenir dans le rack. Travaillant dans un labo, avoir une tour ne me dérange pas, le seul avantage serait pour le multitâche si elle dispose de plus de puissance, elle a 4 processeurs je crois.

    Pour le moment, j'explore la piste file mapping :

    http://awinsyspro.com/18-file-mapping-windows/
    https://www.labri.fr/perso/betrema/winnt/manamemo.html
    https://tanwestern.weebly.com/blog/c-memory-mapped-file

    J'epluche donc la doc microsoft pour mettre cela en place :
    https://docs.microsoft.com/en-us/win...y/file-mapping

    et notamment cet exemple :
    https://docs.microsoft.com/en-us/win...-within-a-file

  10. #9
    Crealand

    Re : Streaming de données vers disque externe

    J'essayerai quand même de voir ce qu'il y a sur cette carte contrôleur des fois qu'il y ait un logiciel qui soit installé qui pourrait être utile, mais les logiciels de national instruments sont tous payants donc j'en doute et je n'ai rien vu dans la doc de la carte contrôleur qui en parlait...

    Pour le moment, les seuls exemples concrets que j'ai trouvé sont sous leur logiciel payant LABview en langage G :

    https://forums.ni.com/t5/Example-Cod...le.language=fr
    https://forums.ni.com/t5/Example-Cod...le.language=fr

  11. #10
    Crealand

    Re : Streaming de données vers disque externe

    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-Pro...le.language=fr

Discussions similaires

  1. Sauvegarde données sur disque dur externe
    Par Rianon dans le forum Logiciel - Software - Open Source
    Réponses: 7
    Dernier message: 01/06/2020, 17h51
  2. récupération données sur disque dur externe
    Par invitefadb120f dans le forum Matériel - Hardware
    Réponses: 1
    Dernier message: 04/07/2011, 19h23
  3. Sauvegarder ses données sur un disque dur externe
    Par jo-electrons dans le forum Logiciel - Software - Open Source
    Réponses: 12
    Dernier message: 07/01/2011, 18h44
  4. Perte de données sur un disque dur externe
    Par invite234d9cdb dans le forum Internet - Réseau - Sécurité générale
    Réponses: 4
    Dernier message: 07/12/2009, 21h26
  5. Récupération de données disque dur externe
    Par invite483d8df8 dans le forum Matériel - Hardware
    Réponses: 9
    Dernier message: 24/09/2009, 18h12
Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...