Goulots d'étranglement de la vitesse USB (en particulier lors de l'exécution d'une machine virtuelle)

1

Cette question concerne principalement les performances USB sous Linux, mais plus particulièrement les problèmes de performances lors de l’exécution d’images virtualbox à partir de mon clé USB. J'ai posté ceci sur le forum de la virtualbox, mais jusqu'à présent, personne ne m'a aidé.

Détails

J'ai acheté une nouvelle clé USB Kingston HyperX Savage 512 Go 3.1. J'ai copié un fichier de 150 Go dessus, vérifié le hachage et il est passé. J'ai aussi vérifié la vitesse en utilisant:

time $(sudo dd if=/dev/zero of=/home/host/mnt/testfile2 bs=1M count=1000 & sync)         
1000+0 records in            
1000+0 records out           
1048576000 bytes (1.0 GB, 1000 MiB) copied, 3.69425 s, 284 MB/s                                                             
real    0m3.883s             
user    0m0.002s
sys     0m0.002s

À un autre moment, ce serait autour de 110 Mo / s, mais je pense tout de même que les performances sont suffisantes pour que VirtualBox puisse y exécuter une instance Ubuntu.

Un autre repère montre ce qui suit:

sudo hdparm -Tt /dev/sdd1        
/dev/sdd1:                    
Timing cached reads:   21882 MB in  1.99 seconds = 10973.39 MB/sec                                                     
Timing buffered disk reads: 1204 MB in  3.00 seconds = 400.74 MB/sec                                                   

Qu'est-ce qui se passe est que lorsque je démarre la VirtualBox, il y a des pauses ou des retards. Un journal de boîte virtuelle d'un nouveau démarrage et d'un nouvel arrêt se trouve à l' adresse suivante : https://pastebin.com/iC7kQ54J (couper la partie de début parce qu'elle était trop longue).

D'après mes recherches, chaque fois qu'il y a un retard, le message VBox.log contient un grand nombre des messages suivants:

00:07:10.988753 AsyncCompletion: Task 0x007f65495ff9c0 completed after 16 seconds
00:07:17.981513 AsyncCompletion: Task 0x007f65495ffe80 completed after 23 seconds
00:07:17.989714 AsyncCompletion: Task 0x007f65495ff7c0 completed after 23 seconds
00:07:18.004043 AsyncCompletion: Task 0x007f65495ffec0 completed after 23 seconds
00:07:18.009427 AsyncCompletion: Task 0x007f65495fffc0 completed after 23 seconds
00:07:18.065390 AsyncCompletion: Task 0x007f65495ffd80 completed after 23 seconds
00:07:18.065474 AsyncCompletion: Task 0x007f65495ff840 completed after 23 seconds

Après avoir cherché sur Google, il semble que les gens disent que cela a à voir avec les entrées / sorties sur le disque, mais comment cela peut-il être le cas si j'obtiens de bonnes performances sur le disque pendant les tests?

Est-ce que je me trompe?

Pouvez-vous suggérer une meilleure méthode?

Existe-t-il d'autres paramètres qui pourraient être désactivés et qui causent des problèmes de performance avec virtual-box avec ma clé USB?

Il n'y a pas d'erreur dans dmesg sur l'hôte lors de l'exécution de cette machine virtuelle.

Voici sudo lshw | grep -A26 -B10 Kingston pour ma clé USB:

          *-usb:1
               description: Mass storage device
               product: HyperX Savage
               vendor: Kingston
               physical id: 6
               bus info: usb@4:6
               logical name: scsi8
               version: 1.00
               capabilities: usb-3.10 scsi emulated scsi-host
               configuration: driver=usb-storage maxpower=896mA speed=5000Mbit/s
             *-disk
                  description: SCSI Disk
                  product: HyperX Savage
                  vendor: Kingston
                  physical id: 0.0.0
                  bus info: scsi@8:0.0.0
                  logical name: /dev/sdd
                  version: PMAP
                  size: 468GiB (503GB)
                  capabilities: removable
                  configuration: ansiversion=6 logicalsectorsize=512 sectorsize=512
                *-medium
                     physical id: 0
                     logical name: /dev/sdd
                     size: 468GiB (503GB)
                     capabilities: partitioned partitioned:dos
                     configuration: signature=6e13cd5d
                   *-volume
                        description: EXT4 volume
                        vendor: Linux
                        physical id: 1
                        logical name: /dev/sdd1
                        logical name: /home/host/mnt
                        version: 1.0
                        serial: e953210a-43c2-4ba9-87ec-55ed8ab3c6ff
                        size: 468GiB
                        capacity: 468GiB
                        capabilities: primary journaled extended_attributes large_files huge_files dir_nlink recover 64bit extents ext4 ext2 initialized
                        configuration: created=2018-09-01 00:55:53 filesystem=ext4 label=datapartition lastmountpoint=/home/host/mnt modified=2018-09-01 12:50:22 mount.fstype=ext4 mount.options=rw,relatime,data=ordered mounted=2018-09-01 12:50:22 state=mounted

Quelqu'un peut-il dire quel pourrait être le problème?

PurpleLizard
la source
Avez-vous vraiment dit &dans cette première commande? On dirait qu'il devrait y en avoir un &&. (De plus, cela $semble étrange.)
G-Man
D'accord, cela devrait être &&et je commencerais la commande avec sudoau lieu d'être dans la substitution de commande Bash ( $()).
Willian Paixao
PS: vraiment bien décrit problème. C'est rare de voir une question aussi claire.
Willian Paixao
@ WillianPaixao tellement tellement clair. Si vous décrivez un problème comme celui-ci, vous devez décrire le système hôte, le processeur modèle et le technicien USB.
Rui F Ribeiro

Réponses:

0

https://pastebin.com/iC7kQ54J

Selon votre journal, il semble que KVM soit installé. (du moins, le pilote semble chargé) Si c'est le cas, vous avez la raison de votre décalage. Les deux pilotes se disputent les mêmes ressources. J'ai fait la même chose il y a des années et le système réagit horriblement.

Une solution à court terme consiste à décharger le module KVM avant de démarrer Virtualbox. Une solution à long terme désinstallerait une application de virtualisation ou automatiserait ses vérifications avant son initialisation.

Willian Paixao
la source
Cela n'a pas aidé. Je suppose que la clé USB est mauvaise d'une manière ou d'une autre. J'ai fini en utilisant un disque SSD et tout fonctionne à merveille :)
PurpleLizard
0

De votre propre question, les temps d'écriture USB sont la moitié du temps de lecture dans des conditions optimales. Il semble que vous ne tenez pas compte des tampons, et ces vitesses sont extrêmement favorables par rapport aux performances réelles de l'appareil.

Alors essayez:

heure $ (suddd si = / dev / urandom de = / home / hôte / mnt / testfile2 bs = 1M nombre = 1000)
heure $ (sudo dd si = / dev / urandom de = / home / hôte / mnt / testfile2 bs = 1M compte = 1000 & sync)

Et regardez le timing de la deuxième opération.

Les opérations simultanées ne se prêtent pas bien non plus à ce support, et cela l’arrêtera. La durée de vie d'un tel dispositif sous une telle utilisation sera courte, ce type de support n'a pas été conçu pour une telle utilisation.

Habituellement, les hyperviseurs ont également besoin de nombreuses E / S, ils peuvent en permanence sauvegarder l'image de la machine virtuelle en plus des opérations d'E / S des machines virtuelles et certaines technologies effectuent également des instantanés réguliers.

En bref, vous essayez de lui donner un usage pour lequel il n’a pas été conçu. Cela ne fonctionnera pas, peu importe comment vous essayez de l’optimiser.

PS J'ai aussi un stylo USB du "même" modèle, à l'exception des petites capacités, et ce modèle est un très mauvais choix, ils sont lents dans des conditions normales d'utilisation. Les spécifications du fabricant ont l’air attrayantes sur le papier, mais il s’agit souvent d’opérations de synchronisation avec des quantités de données qui tiennent dans sa mémoire tampon.

PS2. Vous dites que le périphérique est USB 3.1 mais ne nous dites pas la technologie de votre périphérique.

Rui F Ribeiro
la source