Как сделать Linux GUI «полезным», когда происходит много дисковой активности - PullRequest
12 голосов
/ 24 декабря 2008

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

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

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

Ответы [ 4 ]

16 голосов
/ 25 декабря 2008

В 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 может лучше справляться с приоритетами. Меньшее количество слотов обычно означает более короткое время ожидания записи на диск для синхронного ввода-вывода, такого как транзакции SQLite. Меньшее количество слотов также означает более короткое время ожидания для ввода-вывода чтения в очередь на диске, если процесс с интенсивной записью полностью заполняет очередь записью ввода-вывода.

7 голосов
/ 24 декабря 2008

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

В настоящее время есть Ubuntu мозговой штурм .

2 голосов
/ 25 декабря 2008

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

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

0 голосов
/ 26 декабря 2008

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...