Léa-Linux & amis :   LinuxFR   GCU-Squad   GNU
Bench sur disque virtuel
Envoyé par: Madraf

Bonjour,

J'ai besoin d'un espace me permettant de créer quelques petits fichiers d'échanges entre plusieurs programmes afin d'obtenir des opérations de lecture/écriture très rapides. J'ai dans l'idée d'utiliser un disque virtuel en mémoire vive sur une Debian Sarge.

J'ai donc créé un disque virtuel à l'aide des commandes suivantes :

mkdir /tmp/ramdisk
dd if=/dev/zero of=dvfic bs=1k count=1024
mke2fs -i 1024 -b 1024 -m 5 -F -v dvfic
mount dvfic /tmp/ramdisk -t ext2 -o loop

J'obtiens mon disque virtuel, cependant, comme je ne maîtrise pas le sujet, j'ai des doutes sur ce que j'obtiens réellement et ses performances. Mes questions sont les suivantes :

- Ai-je vraiment ainsi créé un disque virtuel en mémoire vive ? Je redoute que cela ne soit qu'un fichier normal, sur disque dur physique, simulant le comportement d'un disque dur supplémentaire, auquel cas, les lectures/écritures ne seraient pas plus rapides.

- J'aimerais tester les performances ainsi obtenues, mais hdparm -tT /tmp/dvfic ne fonctionne pas dans ce cas-là (j'ai essayé sur /dev/hda1 et je n'ai pas de problème). Dans le cas de mon disque dur virtuel, il me retourne des erreurs (ce qui ne m'étonne pas vraiment, en fait) :

BLKROGET failed: Inappropriate ioctl for device
BLKRAGET failed: Inappropriate ioctl for device
BLKGETSIZE failed: Inappropriate ioctl for device

Comment tester les performances en lecture/écriture dans un tel cas ?

Merci de votre attention :-)

Poste le Friday 14 March 2008 17:07:24
Répondre     Citer    
Re: Bench sur disque virtuel

Citation
Madraf
J'ai besoin d'un espace me permettant de créer quelques petits fichiers d'échanges entre plusieurs programmes afin d'obtenir des opérations de lecture/écriture très rapides.

Avec suffisamment de RAM, ces fichiers seront dans le cache. A mon avis un disque virtuel n'est probablement pas nécessaire (sauf peut-être si tu es certain qu'ils sont tous très temporaires). Un tmpfs met (sauf erreur de ma part) les bouts de fichiers dans le swap s'il n'y a pas assez de RAM. Tu pourrais par exemple
mount -t tmpfs none /mnt/temp
et ensuite tout fichier créé dans /mnt/temp est virtuellement temporaire, au sens d'être en RAM (le disque n'est alors pas accédé). C'est bien sûr différent des fichiers temporaires (créés par tmpfile(3) par exemple) qui sont des fichiers qui n'ont plus de nom (et seront supprimés par le noyau quand plus aucun processus n'y accède).

Par ailleurs, il se pourrait que pour communiquer entre programmes, des FIFOs ou des sockets Unix conviennent mieux. Bien sûr, ce ne sont pas des fichiers à accès aléatoire.

J'ai du mal à comprendre l'intérêt véritable d'un bench pour tout ça, car la performance sur les fichiers dépend du cache fichier, donc de l'état de la machine.

----

Basile STARYNKEVITCH

Membre de l'APRIL « promouvoir et défendre le logiciel libre » - adhérez vous aussi à l'APRIL!

Projet logiciel libre: RefPerSys

Poste le Friday 14 March 2008 18:08:52
Répondre     Citer    
Re: Bench sur disque virtuel
Envoyé par: Madraf

Merci pour ta réponse Basile :-)

Citation
Basile STARYNKEVITCH
Avec suffisamment de RAM, ces fichiers seront dans le cache.
Je viens de vérifier avec free et la mémoire (256 Mo) est pratiquement saturée. C'est d'ailleurs étonnant, il semblerait qu'il y ait un problème, je verrai ça bientôt.

Citation
Basile STARYNKEVITCH
A mon avis un disque virtuel n'est probablement pas nécessaire (sauf peut-être si tu es certain qu'ils sont tous très temporaires).
Oui, ce seront quelques fichiers de quelques octets seulement qui feront l'objet de nombreuses mises-à-jour. La perte de ces données en cas de coupure ou plantage n'aura pas d'importance.

Citation
Basile STARYNKEVITCH
Un tmpfs met (sauf erreur de ma part) les bouts de fichiers dans le swap s'il n'y a pas assez de RAM. Tu pourrais par exemple
mount -t tmpfs none /mnt/temp
et ensuite tout fichier créé dans /mnt/temp est virtuellement temporaire, au sens d'être en RAM (le disque n'est alors pas accédé).
Ce serait une solution intéressante, mais il faut alors bien s'assurer d'avoir de la RAM de libre pour l'employer, c'est bien ça ?

Citation
Basile STARYNKEVITCH
Par ailleurs, il se pourrait que pour communiquer entre programmes, des FIFOs ou des sockets Unix conviennent mieux. Bien sûr, ce ne sont pas des fichiers à accès aléatoire.
J'y ai pensé, mais le but est qu'un programme (écrit en C) mette à jour une donnée régulièrement et rapidement (presque à chaque seconde, une sorte de flux, en fait). Pendant ce temps plusieurs programmes viendraient lire la dernière donnée mise à disposition à n'importe quel moment (programmes écrits en shell ou en php voire les deux, on ne sait pas encore très bien comment on va s'y prendre) afin de mettre à jour une base de données et un site internet.

D'une part, je ne sais pas encore s'il sera possible de lire un FIFO en shell (en shell, je crois bien que c'est possible) ou en php. D'autre part, si je me rappelle bien mes cours de C-système, la lecture d'une file (FIFO) provoque le vidage de celui-ci, ce qui ne nous arrange pas puisque d'autres programmes devront venir consulter cette valeur.

Quant au socket, je ne vois pas très bien comment le mettre en œuvre dans ce cas de figure.

Citation
Basile STARYNKEVITCH
J'ai du mal à comprendre l'intérêt véritable d'un bench pour tout ça, car la performance sur les fichiers dépend du cache fichier, donc de l'état de la machine.
C'est juste histoire de vérifier si les performances sont au rendez-vous. Mais si tu me dis que même avec un disque virtuel les accès ne seront peut-être pas meilleurs que sur un disque physique du fait du cache fichiers, ça a effectivement moins d'intérêt...

J'espérais exploiter de manière simple les performances de la mémoire vive, je dois obtenir du temps réel ou presque, mais je sens que ça va se révéler très compliqué finalement... Sauf si quelqu'un a une solution pas trop complexe à mettre en œuvre. S'il s'agit d'utiliser tmpfs, comment s'assurer que de la mémoire vive sera disponible pour éviter toute écriture sur le disque physique ? Ça me rendrait un grand service :-)

----

Basile STARYNKEVITCH où on trouve mon mél

N.B. N'hesitez pas à consulter aussi mes
contributions antérieures.[/quote]

Poste le Friday 14 March 2008 18:54:48
Répondre     Citer    
Re: Bench sur disque virtuel

Il ne faut pas copier (par erreur) ma signature. ?-( Elle n'est pas libre (comme Linux), c'est la mienne :-))

C'est normal que free t'indique que toute la RAM est occupée. La RAM inoccupée est perdue car gaspillée et Linux gère bien la RAM (en l'utilisant pour le cache des fichiers quand elle ne sert pas à autre chose).


Ne benches pas le tmpfs, mais ton application sur ton système.

Et utiliser des fichiers sur disque ou dans un tmpfs, c'est juste une question de montage ou de répertoire (rien besoin de recompiler).

Sinon, tu pourrais aussi mmap-er les fichiers, ou bien utiliser du shmem.
man mmap
man shmop
man svipc

----

Basile STARYNKEVITCH

Membre de l'APRIL « promouvoir et défendre le logiciel libre » - adhérez vous aussi à l'APRIL!

Projet logiciel libre: RefPerSys

Poste le Friday 14 March 2008 20:54:12
Répondre     Citer    
Re: Bench sur disque virtuel
Envoyé par: Madraf

Citation
Basile STARYNKEVITCH
Il ne faut pas copier (par erreur) ma signature. Elle n'est pas libre (comme Linux), c'est la mienne
Oui, désolé, quand je m'en suis aperçu, j'ai aussi vu qu'il n'y avait pas moyen d'éditer son propre message, c'est idiot mais c'est comme ça.

Merci pour tes indications, Basile, je vais continuer à chercher...

Poste le Saturday 15 March 2008 08:08:07
Répondre     Citer    

Veuillez vous authentifier auparavant pour commenter.

 

Ce forum !
Bench sur disque virtuel
Aide sur les distributions Debian, Ubuntu et leurs dérivées : Mepis, Mint, Knoppix, Kubuntu, Lubuntu, Xandros

Sauf mention contraire, les documentations publiées sont sous licence Creative-Commons