Почему мой рабочий стол блокируется, когда я копирую много файлов на USB-накопитель?

11

Мой рабочий стол обычно очень отзывчив, даже при большой нагрузке. Но когда я копирую файлы на USB-накопитель, через некоторое время он всегда блокируется. Под «замком» я имею в виду:

  • Перемещение фокуса с одного окна на другое может занять 10-20 секунд
  • Переключение рабочих столов может занять 10-20 с
  • Видео больше не обновляется (на YouTube звук продолжает воспроизводиться, только видео останавливается)

Когда это происходит, нагрузка на систему не является исключительно высокой. Иногда я вижу много белого на xosview, указывающего, что ядро ​​где-то занято.

На первый взгляд кажется, что копирование файлов на USB-накопитель каким-то образом помешает работе Compiz, но я не представляю, каким может быть соединение.

Вот вывод htop:

Выход htop вскоре после зависания

Вот результат за iostat -c -z -t -x -d 12 минуты зависания:

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

Как видите, активен только внешний жесткий диск. Вот полный журнал: http://pastebin.com/YNWTAkh4

Зависание началось в 20:38:01 и закончилось в 20:40:19.

Информация о программном обеспечении:

  • openSUSE 12.1
  • KDE 4.7.x
  • Файловые системы: reiserfs и btrfs на моем внутреннем жестком диске, btrfs на USB-диске
Аарон Дигулла
источник
1
Вы пытались установить USB-накопитель, syncчтобы увидеть, какой эффект (если таковой имеется) это имеет?
Алексиос
2
Недостатком USB является тот факт, что он сильно зависит от процессора для ввода-вывода. Какой тип процессора у вашей системы? Приложите вывод grep name /proc/cpuinfoк вашему вопросу, пожалуйста.
Джиппи
1
Вы перетаскиваете файлы с помощью дельфина? Если это так, попробуйте cpиз командной строки исключить возможные ошибки дельфина.
Яри ​​Лааманен
@JariLaamanen: я использую rsyncиз командной строки.
Аарон Дигулла
1
@jippie: Не совсем, потому что пользовательский интерфейс блокируется, когда это происходит, поэтому я не могу сделать скриншот. Я постараюсь создать журнал сiostat -c -z -d 1
Аарон Дигулла

Ответы:

4

Мое первое предположение было, btrfsпоскольку процессы ввода-вывода в этой файловой системе иногда вступают во владение. Но это не объясняет, почему X блокируется.

Глядя на прерывания, я вижу это:

# 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

Ну да. Драйвер USB использует тот же IRQ, что и графическая карта, и он первый в цепочке. Если он зависает (потому что файловая система делает что-то дорогое), видеокарта голодает (и сеть тоже).

Аарон Дигулла
источник
2

Я видел похожие проблемы с ядром openSUSE 12.1 linux-3.1 и обнаружил, что отключение прозрачных огромных страниц помогло:

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

Основная проблема заключается в том, что если приложение выделяет 4 МБ или более, ядро ​​попытается предоставить ему огромную страницу, для которой ему потребуется целая 4 МБ ОЗУ. Теперь, если вокруг много грязных страниц, которые все еще нужно записать на медленное USB-устройство, он ожидает завершения ввода-вывода, прежде чем продолжить выделение памяти.

Бернхард М.
источник
1

Как уже упоминалось, это, вероятно, связано с установкой огромных страниц ядра. Я знаю несколько человек с этой проблемой. Вы можете найти несколько документов об этом в Интернете, например,

Я полностью устранил проблему в моей настройке, выполнив следующие действия. Обратите внимание, YMMV, не все исправления, приведенные ниже, могут быть необходимы, и, возможно, их будет недостаточно. Возможно, я забыл что-то, чтобы быть честным. Во всяком случае, это моя установка, и она работает.

  • Используйте ядро ​​linux-ck
  • echo madvise > /sys/kernel/mm/transparent_hugepage/enabled
  • echo never > /sys/kernel/mm/transparent_hugepage/defrag
AF7
источник
-2

Поменяй кабель. Удалите оксид с USB-порта / кабелей.

луис
источник
Это должно быть немного более сложным. Пожалуйста, смотрите FAQ
Карлсон