J'ai fait un peu de benchmarking avec des opérations d'écriture dans un périphérique de bouclage. Voici la conclusion:
- Si vous effectuez une synchronisation après chaque écriture, un périphérique de bouclage est nettement moins performant (presque deux fois plus lent).
- Si vous autorisez le cache disque d'un planificateur d'E / S à faire son travail, il n'y a pratiquement aucune différence entre l'utilisation d'un périphérique de bouclage et l'accès direct au disque.
Résultats de référence
Tout d'abord, j'ai exécuté un test sur un périphérique de bouclage en tmpfs de 8 Go, et un périphérique de bouclage dans ce périphérique de bouclage ( avec synchronisation après chaque opération d'écriture ):
ext4 dans tmpfs:
Measured speed: 557, 567, 563, 558, 560, 559, 556, 556, 554, 557
Average speed : 558.7 MB/s (min 554 max 560)
ext4 dans extf dans tmpfs:
Measured speed: 296, 298, 295, 295, 299, 297, 294, 295, 296, 296
Average speed : 296.1 MB/s (min 294 max 299)
De toute évidence, il existe des différences de performances lors de l'utilisation de périphériques de bouclage avec synchronisation sur écriture.
J'ai ensuite répété le même test sur mon disque dur.
ext4 (disque dur, 1000 Mo, 3 fois):
Measured speed: 24.1, 23.6, 23.0
Average speed : 23.5 MB/s (min 23.0 max 24.1)
ext4 en ext4 (disque dur, 945 Mo):
Measured speed: 12.9, 13.0, 12.7
Average speed : 12.8 MB/s (min 12.7 max 13.0)
Même référence sur le disque dur, désormais sans synchronisation après chaque écriture ( time (dd if=/dev/zero bs=1M count=1000 of=file; sync), mesurée comme <size>/ <time in seconds>).
ext4 (disque dur, 1000 Mo):
Measured speed: 84.3, 86.1, 83.9, 86.1, 87.7
Average speed : 85.6 MB/s (min 84.3 max 87.7)
ext4 en ext4 (disque dur, 945 Mo):
Measured speed: 89.9, 97.2, 82.9, 84.0, 82.7
Average speed : 87.3 MB/s (min 82.7 max 97.2)
(étonnamment, le benchmark de bouclage semble meilleur que le benchmark de disque brut, probablement en raison de la plus petite taille du périphérique de bouclage, donc moins de temps est consacré à la synchronisation réelle sur le disque)
Configuration de référence
Tout d'abord, j'ai créé un système de fichiers en boucle de 8G dans mon / tmp (tmpfs):
truncate /tmp/file -s 8G
mkfs.ext4 /tmp/file
sudo mount /tmp/file /mnt/
sudo chown $USER /mnt/
J'ai ensuite établi une base de référence en remplissant le fichier de bouclage monté avec des données:
$ dd if=/dev/zero bs=1M of=/mnt/bigfile oflag=sync
dd: error writing '/mnt/bigfile': No space left on device
7492+0 records in
7491+0 records out
7855763456 bytes (7.9 GB) copied, 14.0959 s, 557 MB/s
Après cela, j'ai créé un autre périphérique de bouclage dans le périphérique de bouclage précédent:
mkdir /tmp/mountpoint
mkfs.ext4 /mnt/bigfile
sudo mount /mnt/bigfile /tmp/mountpoint
sudo chown $USER /tmp/mountpoint
Et a exécuté à nouveau la référence, dix fois:
$ dd if=/dev/zero bs=1M of=/tmp/mountpoint/file oflag=sync
...
7171379200 bytes (7.2 GB) copied, 27.0111 s, 265 MB/s
puis j'ai démonté le fichier de test et l'ai supprimé:
sudo umount /tmp/mountpoint
sudo umount /mnt
(de même pour le test sur le disque dur, sauf que j'ai également ajouté count=1000pour empêcher le test de remplir tout mon disque)
(et pour le test de non-écriture sur la synchronisation, j'ai exécuté le chronométré ddet l' syncopération)