Подтвердить что ты не робот

Как сделать Linux GUI "пригодным для использования", когда происходит большая активность диска

Если я начну копировать огромное дерево файлов из одной позиции в другую или если какой-либо другой процесс начнет делать много активности на диске, приложение переднего плана (GUI) замедляется. Например, возьмите дерево файлов 2gb с файлами в 100k. Откройте консоль и сделайте cp -r bigtree bigtree2. Затем перейдите в firefox и начните просмотр. Firefox почти непригоден для использования. Даже если я установил хороший уровень firefox на действительно высокий приоритет (-20), он все же супер медленный с огромными задержками.

Я помню несколько лет назад, когда я работал в ящике Solaris, в подобных ситуациях система вела себя намного лучше.

Мой HD использует DMA, а не PIO. Это SATA. Не установлен с флагом atime.

4b9b3361

Ответ 1

Попробуйте ionice - или при помощи процесса копирования. Проблема связана с тем, что IO получает тот же приоритет, что и графический интерфейс, который для рабочего стола влияет на воспринимаемую отзывчивость.

Здесь есть Ubuntu brainstorm.

Ответ 2

У Linux уже давно возникла проблема с программами, которые выкапывают всю "грязную" кэш-память системы. Случается, что процесс копирования заполняет кэш записи данными файла, которые он копирует, и делает это очень быстро. Поэтому, когда Firefox приходит и должен писать, он должен сначала дождаться грязного пространства буфера или доступного слота для записи в очередь на диске. Во время ожидания он конкурирует с процессом копирования и потоком pdflush ядра, который перемещает данные из грязных буферов в очередь на запись на диск.

У Firefox есть еще одна проблема в этом сценарии. Он использует SQLite для хранения своих закладок, истории и других вещей. SQLite - это база данных, совместимая с ACID, и использует транзакционную систему с записью на диске , сброшенной на диск. Таким образом, он не только должен ждать буферного пространства, он должен дождаться очереди на диске, которая заполнена скопированным файлом, чтобы очистить, прежде чем он сможет подтвердить успешную запись.

Была проведена серия настройки, сделанной для системы очередей и буферизации Linux. Изменения почти в каждом выпуске ядра. Попробуйте один из новых выпусков. Вы также можете попробовать изменить значения sysctl. Я вроде как:

vm.dirty_writeback_centisecs = 100
vm.dirty_expire_centisecs = 9000
vm.dirty_background_ratio = 4
vm.dirty_ratio = 80

Вы также можете попробовать настроить количество слотов в очереди на диск. Это значение находится в /sys/block/sda/queue/nr_requests. Вам нужно заменить sda тем, что действительно на вашем диске. Больше слотов означает больше шансов объединить запросы ввода-вывода, а планировщик CFQ IO может лучше справляться с приоритетами. Меньшее количество слотов обычно означает более короткое ожидание для записи на диск для синхронных операций ввода-вывода, подобных SQLite. Меньшее количество слотов также означает более короткое ожидание, чтобы прочитать IO в очередь на диск, если процесс с большой нагрузкой полностью заполняет очередь записью IO.

Ответ 3

Вы не первый, кто заметил эту проблему. Бывший разработчик ядра [Con Kolivas] (http://en.wikipedia.org/wiki/Con_Kolivas) обнаружил, что многие компании платят за повышение производительности Linux-сервера на за счет производительности рабочего стола. У Con был впечатляющий набор исправлений, чтобы сделать настольный ПК более отзывчивым. К сожалению, была некоторая война с кодом, и в конечном итоге Con выпал.

Мне бы хотелось знать, как просить разработчиков ядра Linux для лучшей производительности рабочего стола. Тем временем, если вы захотите запустить ядро ​​2.6.22, вы можете запустить с патчем -ck.

Ответ 4

Убедитесь, что DMA включен на всех ваших дисках, которые его поддерживают. В зависимости от вашего дистрибутива это может быть не по умолчанию. Прочитайте man hdparm и посмотрите в свой механизм init.