Congestionamentos de velocidade USB (especificamente durante a execução da máquina virtual)

1

Esta questão é principalmente sobre o desempenho do USB no Linux, mas mais especificamente problemas de desempenho ao executar imagens do VirtualBox fora do meu USB. Eu postei isso no forum virtualbox, mas até agora ninguém me ajudou.

Detalhes

Comprei um novo pen drive USB Kingston HyperX Savage 512 GB 3.1. Eu copiei um arquivo de 150 GB, verifiquei o hash e ele passou. Eu também verifiquei a velocidade usando:

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

Outra hora seria em torno de 110 MB / s, mas ainda assim acho que o desempenho é bom o suficiente para que o VirtualBox execute a instância do Ubuntu nele.

Outro benchmark mostra o seguinte:

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                                                   

O que acontece é que quando eu inicio o VirtualBox, há pausas ou atrasos acontecendo. Um log de caixa virtual de uma nova inicialização e desligamento está localizado em: link (corte a parte inicial porque era muito longa).

Com base em minha pesquisa, sempre que há atraso, há muitas das seguintes mensagens no VBox.log:

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

Depois de procurar no Google, parece que as pessoas estão dizendo que isso tem a ver com E / S na unidade, mas como isso pode acontecer se eu tiver uma boa desempenho na unidade durante os benchmarks?

Estou marcando errado?

Você pode sugerir um método melhor?

Há algum outro parâmetro que possa estar desativado, o que está causando a caixa virtual a ter problemas de desempenho com o meu USB?

Não há erros no dmesg no host durante uma execução desta máquina virtual.

Aqui está o sudo lshw | grep -A26 -B10 Kingston para o meu 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

Alguém pode dizer qual poderia ser o problema?

    
por PurpleLizard 04.09.2018 / 05:12

2 respostas

0

https://pastebin.com/iC7kQ54J

De acordo com o seu log, parece que você tem o KVM instalado. (pelo menos o driver parece carregado) Se sim, você tem o motivo do seu atraso. Ambos os pilotos competem pelos mesmos recursos. Eu fiz o mesmo anos atrás e o sistema responde horrivelmente.

Uma solução de curto prazo é descarregar o módulo KVM antes de iniciar o Virtualbox. Uma solução de longo prazo desinstalaria um aplicativo de virtualização ou automatizaria suas verificações antes da inicialização.

    
por 04.09.2018 / 17:09
0

De sua própria pergunta, os tempos de gravação USB são metade do tempo de leitura sob condições ideais. Parece que você não está tomando buffers de conta, e essas velocidades são extremamente favoráveis em comparação com o desempenho real do dispositivo.

Então tente:

time $ (sudo dd se = / dev / urandom de = / home / host / mnt / testfile2 bs = contagem de 1M = 1000)
hora $ (sudo dd se = / dev / urandom de = / home / host / mnt / testfile2 bs = contagem de 1M = 1000 & sync)

E observe o momento da segunda operação.

Realizar operações simultâneas também não se presta bem sobre esse meio, e isso o fará parar. A vida de tal dispositivo sob tal uso será curta, esse tipo de meio não foi projetado para tal uso.

Normalmente, também os hipervisores precisam de muita E / S, eles podem estar salvando constantemente a imagem da VM, além das operações de E / S das VMs, e algumas tecnologias também fazem instantâneos regulares.

Em suma, você está tentando dar a ele um uso para o qual ele não foi projetado, ele não funcionará, não importa o quanto você tente otimizá-lo.

PS. Eu também tenho uma caneta USB do modelo "mesmo", exceto capacidade menor, e esse modelo é uma escolha muito ruim, eles são lentos sob uso normal. As especificações do fabricante ficam bem no papel, no entanto, muitas vezes são operações de temporização com quantidades de dados que se encaixam em seu buffer de RAM.

PS2. Você está dizendo que o dispositivo é USB 3.1, mas não está nos dizendo a tecnologia do seu dispositivo.

    
por 09.09.2018 / 10:38