Высокая активность записи на производительность системы SSD Nukes


13

Я заметил, что когда я пишу тяжелые приложения, вся система тормозит. Чтобы проверить это дальше, я запустил это для выполнения (относительно) низкой загрузки процессора, высокой активности диска:

john -incremental > file_on_SSD

Это выкачивает десятки тысяч строк в секунду в файл на моем системном диске.

При этом мышь зависает, TTY перестают отвечать на запросы, приложения «выцветают» и, как правило, весь компьютер становится непригодным для использования. Когда я в конце концов смогу Control + C john, система вернется к полной силе через несколько секунд.

Это крайний пример, но у меня есть похожие проблемы с чуть менее интенсивными операциями записи, такими как копирование больших файлов из быстрых источников или транскодирование.

Мой основной диск с ОС - довольно быстрый SSD ( OCZ Agility 60GB ) с EXT4. Если я записываю johnвывод на механический диск с EXT4, я не испытываю такого же замедления, хотя скорость намного медленнее (SSD выполняет ~ 42 000 слов в секунду, механический - 8 000 Вт / с). Пропускная способность может быть актуальной. Механический диск также не имеет ничего общего с системой. Это просто данные.

И я использую ядро ​​2.6.35-2, но я заметил эту проблему, так как у меня был этот SSD, когда я, вероятно, использовал .31 или что-то примерно того времени.

Так что вызывает замедление? Вопрос EXT4? Проблема с ядром? Вопрос SSD? Все вышеперечисленное? Что-то другое?

Если вы считаете, что мне нужно выполнить дополнительный тест, просто оставьте комментарий, сообщающий мне, что делать, и я добавлю результат к вопросу.


Может быть, вы также должны упомянуть, какой SSD вы используете. Не все SSD одинаковы.
Кристиан Чиупиту

@ Кристиан: Добавлено. Это ловкость OCZ.
Оли

Ответы:


12

Это было известной проблемой в течение некоторого времени. Использование настроенной на SSD FS, такой как Btrfs, может помочь, но это не так.

В конечном счете, это ошибка в планировщике ввода-вывода / системах управления памятью. В последнее время появилось несколько исправлений, направленных на решение этой проблемы. См. Исправлено: проблема с отзывчивостью рабочего стола Linux?

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


2
Если я правильно понимаю, патчи для этого должны идти в Linux 2.6.37 .
JanC

1

Есть несколько вещей, которые вы можете проверить, чтобы улучшить производительность SSD под Linux.

  1. Установите точку монтирования на «noatime». Дополнительное время обновления активности обычно теряется в большинстве случаев использования. Особенно в случае непрерывной закачки отдельных строк в файл, вы вынуждены многократно обновлять файловую систему для каждого доступа.

  2. Проверьте лифт. Элеватор по умолчанию для большинства дистрибутивов настроен для вращения дисков с произвольным доступом. SSD не нуждается в дополнительной логике, поэтому установка элеватора в noop может повысить производительность, позволяя аппаратному обеспечению управлять записью.

  3. Запись через v кэширование с обратной записью. Это немного более эзотерично, но вы можете проверить метод кэширования, используемый hdparmдля устройства. Кэширование с обратной записью может оказать положительное влияние на производительность SSD по сравнению с сквозной записью.


Не могли бы вы @nzwulfin написать немного больше о настройке лифта?
Гжегож Вежовецкий

Похоже, что производительность SSD была в порядке. Это все остальное, что страдает.
Торбьерн Равн Андерсен

0

Кэширование вашего файла, вероятно, неправильно настроено для вашей рабочей нагрузки. К сожалению, ядро ​​Linux достаточно глупо, чтобы не обрабатывать это автоматически, и настройки по умолчанию довольно плохие, если у вас много оперативной памяти и достаточно медленные блочные устройства. См. Https://lonesysadmin.net/2013/12/22/better-linux-disk-caching-performance-vm-dirty_ratio/ для получения подробной информации.

Я бы предложил попробовать изменить /etc/sysctl.conf либо

vm.dirty_background_ratio = 3
vm.dirty_ratio = 6

сильно снизить нагрузку на оперативную память, вызванную кэшированием записи, чтобы ядро ​​лучше справлялось с другими задачами. Это обменивает увеличенную задержку на более низкую пропускную способность.

Другая возможность - увеличить кеширование, но если ваш процесс все время будет постоянно записывать новые данные, вы получите очень плохую задержку, если кеш когда-либо заполнится. Если вы хотите попробовать это, вы можете сделать что-то вроде

vm.dirty_background_ratio = 5
vm.dirty_ratio = 80

Обратите внимание, что *_ratioнастройки относятся к проценту доступной оперативной памяти. Если вы хотите лучшего контроля, используйте *_bytesнастройки. Я лично использую следующий конфиг для моей рабочей станции:

vm.dirty_background_bytes = 50000000
vm.dirty_bytes = 200000000

Это ограничивает кэш фоновой записи до 50 МБ и вызывает синхронную запись, если в кэше находится 200 МБ.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.