¿Por qué mi escritorio se bloquea cuando copio muchos archivos en una unidad USB?


11

Mi escritorio generalmente responde muy bien, incluso bajo una gran carga. Pero cuando copio archivos a una unidad USB, siempre se bloquea después de un tiempo. Por "encerrar" quiero decir:

  • Mover el foco de una ventana a otra puede llevar entre 10 y 20 segundos.
  • El cambio de escritorios puede demorar entre 10 y 20 segundos
  • Los videos ya no se actualizan (en YouTube, el audio continúa reproduciéndose, solo el video se congela)

La carga del sistema no es excepcionalmente alta cuando esto sucede. A veces, veo mucho blanco en xosview que indica que el kernel está ocupado en alguna parte.

A primera vista, parece que copiar archivos a la unidad USB interferiría de alguna manera con compiz, pero no puedo imaginar cuál podría ser la conexión.

Aquí está la salida de htop:

Salida de htop poco después del bloqueo

Aquí está la salida de iostat -c -z -t -x -d 1durante un bloqueo 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 puede ver, solo el disco duro externo está activo. Aquí está el registro completo: http://pastebin.com/YNWTAkh4

El bloqueo comenzó a las 20:38:01 y terminó a las 20:40:19.

Información de software:

  • openSUSE 12.1
  • KDE 4.7.x
  • Sistemas de archivos: reiserfs y btrfs en mi disco duro interno, btrfs en la unidad USB

1
¿Has intentado montar la unidad USB syncpara ver qué efecto (si alguno) tiene?
Alexios

2
Una desventaja de USB es el hecho de que depende en gran medida de la CPU para IO. ¿Qué tipo de CPU tiene su sistema? Agregue el resultado de grep name /proc/cpuinfoa su pregunta, por favor.
jippie

1
¿Arrastras y sueltas los archivos con Dolphin? Si es así, intente cpdesde la línea de comandos para excluir posibles errores de delfines.
Jari Laamanen

@JariLaamanen: estoy usando rsyncdesde la línea de comandos.
Aaron Digulla

1
@jippie: No realmente porque la IU se bloquea cuando sucede, así que no puedo hacer una captura de pantalla. Trataré de crear un registro coniostat -c -z -d 1
Aaron Digulla

Respuestas:


4

Mi primera suposición fue btrfsque los procesos de E / S de este sistema de archivos a veces se hacen cargo. Pero no explicaría por qué X se encierra.

Mirando las interrupciones, veo esto:

# 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

Bueno duh. El controlador USB utiliza el mismo IRQ que la tarjeta gráfica y es el primero en la cadena. Si se bloquea (porque el sistema de archivos hace algo costoso), la tarjeta gráfica pasa hambre (y la red también).


2

Había visto problemas similares con el núcleo linux-3.1 de openSUSE 12.1 y descubrí que deshabilitar páginas enormes transparentes ayudaba:

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

El problema subyacente es que si una aplicación asigna 4 MB o más, el kernel intentará darle una página enorme, para lo cual necesita una RAM contigua de 4 MB. Ahora, si hay muchas páginas sucias alrededor, que aún deben escribirse en un dispositivo USB lento, espera a que ese IO termine antes de continuar con la asignación de memoria.


1

Como se mencionó, esto probablemente tenga que ver con la configuración de las páginas gigantes del núcleo. Conozco a varias personas con este problema. Puede encontrar varios documentos al respecto en la web, p. Ej.

He fijado por completo el problema de mi configuración mediante el procedimiento siguiente. Tenga en cuenta YMMV, no todas las correcciones a continuación pueden ser necesarias, y tal vez no sean suficientes. Puede que haya olvidado algo para ser honesto. De todos modos, esa es mi configuración y funciona.

  • Utilice el kernel linux-ck
  • echo madvise > /sys/kernel/mm/transparent_hugepage/enabled
  • echo never > /sys/kernel/mm/transparent_hugepage/defrag

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.