Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 26/06/2020, à 10:02

astrakan

Transfert de données en temps réel

Bonjour à tous,

Je travaille avec deux PC, reliés en réseau local avec IP fixe, tournant sous Ubuntu 18.0. Les accès SSH sont paramétrés, et chacun d'entre eux peut se connecter à l'autre sans login.

Le premier PC sert à piloter un appareil scientifique qui enregistre des données brutes en direct. Chaque série de mesure dure de quelques heures à 24h maxi. Le rythme de génération de données est d'environ 30 Go/h, constitué de fichiers d'environ 100 à 1000 Mo.

Le second PC traite ces données au fur et à mesure de leur acquisition, et enregistre le résultat dans un autre répertoire. L'acquisition est plus rapide que le traitement, donc ce PC prendra du retard au fur et à mesure.
Les fichiers bruts sont ordonnés, ce qui permet de faire des calculs dessus même si les plus récents sont encore en cours d'écriture (et éventuellement de reprendre un traitement interrompu, sans recommencer le travail sur des fichiers déjà traités).

J'ai testé et paramétré plusieurs approches, mais je ne sais pas laquelle conviendrait le mieux :

  1. Partager le dossier du PC de pilotage avec sshfs. Le PC de calcul effectuera donc ses calculs à partir de données distantes.

  2. Synchroniser le répertoire du PC de pilotage vers un répertoire du PC de calcul avec rsync .

  3. Copier le contenu du PC de pilotage vers le PC de calcul avec cp.

Si je travaille avec cp ou rsync, je suppose que si la copie des fichiers va plus vite que la création de nouveaux fichiers, à un moment le programme s'arrêtera car il pensera avoir terminé la copie. Il faudrait alors relancer la commande régulièrement (donc passer par rsync pour n'envoyer que les nouveaux fichiers et ceux qui ont été modifiés) ?
La première approche me semble donc être la plus pertinente, mais je préfère avoir votre avis.

De plus, je souhaiterais aussi archiver les données brutes en parallèle de leur acquisition sur 2 disques dédiés à la sauvegarde (un dans chaque PC).
Mais pour ce point, l'aspect "temps-réel" est un peu moins important. Un rsync régulier planifié avec cron devrait suffire ?

Merci d'avance pour vos conseils big_smile

Hors ligne

#2 Le 26/06/2020, à 10:25

MicP

Re : Transfert de données en temps réel

Bonjour

la machine qui pilote l'appareil scientifique pourrait, grâce à inotify
prévenir l'autre machine qu'un nouveau fichier viens d'être reçut de l'appareil scientifique
ou bien envoyer directement à l'autre machine le nouveau fichier dès sa création.

l'autre machine n'aura plus qu'à traiter séquentiellement chaque fichier reçut.

Dernière modification par MicP (Le 26/06/2020, à 10:32)

Hors ligne

#3 Le 26/06/2020, à 11:01

astrakan

Re : Transfert de données en temps réel

Merci de la réponse. Je vais lire la doc.

Si j'ai bien compris, le principe serait de démarrer rsync une fois la notification 'nouveau fichier' reçue ?

Pour le traitement, c'est un programme fourni par le concepteur de l'appareil, il gère tout seul le fait de recevoir des nouveaux fichiers en continu. Lorsque l'appareil a fini de générer les fichiers, il crée un fichier de compte-rendu, et à partir de là le programme du traitement sait que le run est terminé (donc il s'arrête tout seul une fois qu'il a fini le traitement).

Mon seul souci c'est donc de m'assurer que le dossier de sortie de l'appareil de mesure est bien connecté "en temps réel" au dossier d'entrée du programme de traitement.

Hors ligne

#4 Le 26/06/2020, à 11:49

MicP

Re : Transfert de données en temps réel

Avec inotify, il ne sera pas nécessaire d'utiliser rsync

Inotify surveille les évènements d'un système de fichiers comme par exemple, la création d'un fichier dans un répertoire.

inotifywait pourrait simplement détecter la création puis la fermeture du nouveau fichier créé (quand il a été complètement écrit)
et lancer alors une ligne de commandes qui fera en sorte d'établir la connexion avec l'autre machine et y copier le nouveau fichier.

Sur l'autre machine, la création du nouveau fichier pourrait être détectée par inotifywait
ce qui lancerait l'exécution d'une de commande qui lancerait le traitement de ce fichier.

Dernière modification par MicP (Le 26/06/2020, à 11:57)

Hors ligne

#5 Le 26/06/2020, à 12:15

astrakan

Re : Transfert de données en temps réel

MicP a écrit :

inotifywait pourrait simplement détecter la création puis la fermeture du nouveau fichier créé (quand il a été complètement écrit)
et lancer alors une ligne de commandes qui fera en sorte d'établir la connexion avec l'autre machine et y copier le nouveau fichier.

D'accord. Un simple cp de ce fichier vers le répertoire de destination à chaque nouveau fichier complété ça irait ? Ou il y a de meilleurs pratiques ?

Une commande du type  ?

cp /chemin_source/fichier_x user@10.0.0.1:/chemin_destination/

Auparavant il faudra que je m'assure qu'un fichier fermé n'est pas édité plus tard. Mais il me semble que l'enregistrement des données se fait bien progressivement (création fichier 1, remplissage, puis après x mesures, fermeture du fichier 1 et création du fichier 2 ...).

Hors ligne

#6 Le 26/06/2020, à 13:05

MicP

Re : Transfert de données en temps réel

… Un simple cp de ce fichier vers le répertoire de destination …

Si la copie doit se faire par une connexion ssh
il vaudra mieux utiliser la commande scp

… il me semble que l'enregistrement des données se fait bien progressivement (création fichier 1, remplissage, puis après x mesures, fermeture du fichier 1 et création du fichier 2 ...). …

Oui, je pense aussi, j'imagine que l'appareil scientifique et son programme ne passent pas leur temps à fermer et ré-ouvrir le même fichier,
mais tu pourrais vérifier ça en 'monitorant' avec inotifywait , dans un premier temps, les évènements concernant le répertoire à surveiller.

Je n'ai pas cherché trop longtemps, mais dans ce fil de discussion, il y a quelques exemples de l'utilisation de la commande inotifywait.

Dernière modification par MicP (Le 26/06/2020, à 13:09)

Hors ligne

#7 Le 26/06/2020, à 15:51

Watael

Re : Transfert de données en temps réel

Oui, je pense aussi, j'imagine que l'appareil scientifique et son programme ne passent pas leur temps à fermer et ré-ouvrir le même fichier,

et pourquoi pas ?
il y a un coût supplémentaire à ouvrir et fermer un même fichier, plutôt que de créer (soit ouvrir et fermer) une multitude de fichiers ?

Dernière modification par Watael (Le 26/06/2020, à 15:51)


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#8 Le 26/06/2020, à 20:54

MicP

Re : Transfert de données en temps réel

Si le programme ré-ouvre pour les modifier les fichiers qu'il créé, ça ne va pas être évident de pouvoir créer une synchronisation efficace,
mais on verra bien ce qu'il en est en lisant la suite d'évènements listés par inotifywait

Hors ligne

#9 Le 27/06/2020, à 08:24

Nasman

Re : Transfert de données en temps réel

Il serait intéressant de connaître :
- le temps d'acquisition d'un fichier
- le temps de transfert
- le temps de chiffrement/déchiffrement
- le temps de traitement

Si le temps de transfert est long devant le temps de traitement alors c'est le PC d'acquisition qui va s'engorger


PC fixe sous Bionic 64 bits et portable avec Focal 64 bits

Hors ligne

#10 Le 27/06/2020, à 09:31

MicP

Re : Transfert de données en temps réel


- le temps d'acquisition d'un fichier
- le temps de transfert
- le temps de chiffrement/déchiffrement
- le temps de traitement

Oui, et d'ailleurs, inotifywait (sur chacune des machines) pourra nous donner toutes ces informations en détail.

Dernière modification par MicP (Le 27/06/2020, à 09:31)

Hors ligne