Por que minha área de trabalho é bloqueada quando copio muitos arquivos em uma unidade USB?

11

Minha área de trabalho geralmente é muito responsiva, mesmo sob carga pesada. Mas quando eu copio arquivos para uma unidade USB, ela sempre trava depois de algum tempo. Por "travar", quero dizer:

  • Mover o foco de uma janela para outra pode levar de 10 a 20s
  • A mudança de desktops pode levar de 10 a 20s
  • Os vídeos não são mais atualizados (no YouTube, o áudio continua sendo reproduzido, apenas o vídeo congela)

A carga do sistema não é excepcionalmente alta quando isso acontece. Às vezes, vejo muito branco no xosview indicando que o kernel está ocupado em algum lugar.

À primeira vista, parece que copiar arquivos para a unidade USB interferiria de alguma forma no compiz, mas não consigo imaginar qual poderia ser a conexão.

Aqui está a saída de htop:

Saída de htop logo após o travamento

Aqui está a saída iostat -c -z -t -x -d 1durante um travamento de 2 minutos:

19.07.2012 20:38:22
avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           1,27    0,00    0,38   37,52    0,00   60,84

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
sdg               0,00     2,00    0,00  216,00     0,00 109248,00  1011,56   247,75  677,69    0,00  677,69   4,63 100,00

Como você pode ver, apenas o disco rígido externo está ativo. Aqui está o log completo: http://pastebin.com/YNWTAkh4

O travamento começou às 20:38:01 e terminou às 20:40:19.

Informação do software:

  • openSUSE 12.1
  • KDE 4.7.x
  • Sistemas de arquivos: reiserfs e btrfs no meu disco rígido interno, btrfs na unidade USB
Aaron Digulla
fonte
1
Você já tentou montar a unidade USB syncpara ver que efeito (se houver) isso tem?
Alexios
2
Uma desvantagem do USB é o fato de ele depender muito da CPU para E / S. Que tipo de CPU seu sistema possui? Anexe o resultado de grep name /proc/cpuinfosua pergunta, por favor.
11123 jippie
1
Você arrasta e solta os arquivos usando o dolphin? Nesse caso, tente cpna linha de comando para excluir possíveis erros de golfinhos.
Jari Laamanen
@JariLaamanen: Estou usando rsyncna linha de comando.
Aaron Digulla
1
@ippie: Na verdade, não porque a interface do usuário trava quando isso acontece, então não posso fazer uma captura de tela. Vou tentar criar um log comiostat -c -z -d 1
Aaron Digulla

Respostas:

4

Meu primeiro palpite foi btrfsque, às vezes, os processos de E / S desse sistema de arquivos assumem o controle. Mas isso não explica por que o X trava.

Observando as interrupções, vejo o seguinte:

# cat /proc/interrupts 
           CPU0       CPU1       CPU2       CPU3       CPU4       CPU5       CPU6       CPU7       
  0:        179          0          0          0          0          0          0          0  IR-IO-APIC-edge      timer
  1:          6          0          0          0          0          0          0          0  IR-IO-APIC-edge      i8042
  8:          1          0          0          0          0          0          0          0  IR-IO-APIC-edge      rtc0
  9:          0          0          0          0          0          0          0          0  IR-IO-APIC-fasteoi   acpi
 12:         10          0          0          0          0          0          0          0  IR-IO-APIC-edge      i8042
 16:    3306384          0          0          0          0          0          0          0  IR-IO-APIC-fasteoi   ehci_hcd:usb1, nvidia, mei, eth1

Bem, duh. O driver USB usa o mesmo IRQ da placa de vídeo e é o primeiro da cadeia. Se ele travar (porque o sistema de arquivos faz algo caro), a placa gráfica passa fome (e a rede também).

Aaron Digulla
fonte
2

Eu tinha visto problemas semelhantes com o kernel do linux-3.1 do openSUSE 12.1 e descobri que desabilitar páginas enormes transparentes ajudava:

echo never > /sys/kernel/mm/transparent_hugepage/enabled

O problema subjacente é que, se um aplicativo alocar 4 MB ou mais, o kernel tentará fornecer uma página enorme, para a qual precisa de toda uma RAM contígua de 4 MB. Agora, se houver muitas páginas sujas por aí, que ainda precisem ser gravadas em um dispositivo USB lento, ele aguardará a conclusão do IO antes de continuar com a alocação de memória.

Bernhard M.
fonte
1

Como mencionado, isso provavelmente tem a ver com a configuração de páginas enormes do kernel. Conheço várias pessoas com esse problema. Você pode encontrar várias documentações sobre isso na web, por exemplo

Corrigi completamente o problema na minha instalação, fazendo o seguinte. Observe o YMMV, nem todas as correções abaixo podem ser necessárias e talvez não sejam suficientes. Eu posso ter esquecido algo para ser honesto. De qualquer forma, essa é a minha configuração e funciona.

  • Use o kernel linux-ck
  • echo madvise > /sys/kernel/mm/transparent_hugepage/enabled
  • echo never > /sys/kernel/mm/transparent_hugepage/defrag
AF7
fonte
-2

Mude o cabo. Remova a oxidação da porta / cabos USB.

luis
fonte
Precisa ser um pouco mais elaborado. Consulte o FAQ
Karlson