Я заметил, что когда я пишу тяжелые приложения, вся система тормозит. Чтобы проверить это дальше, я запустил это для выполнения (относительно) низкой загрузки процессора, высокой активности диска:
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 FS, такой как Btrfs, может помочь, но это не так.
В конечном счете, это ошибка в планировщике ввода-вывода / системах управления памятью. В последнее время появилось несколько исправлений, направленных на решение этой проблемы. См. Исправлено: проблема с отзывчивостью рабочего стола Linux?
Эти патчи могут в конечном итоге попасть в основное ядро, но сейчас вам, вероятно, придется скомпилировать собственное ядро, если вы хотите решить эту проблему.
источник
Есть несколько вещей, которые вы можете проверить, чтобы улучшить производительность SSD под Linux.
Установите точку монтирования на «noatime». Дополнительное время обновления активности обычно теряется в большинстве случаев использования. Особенно в случае непрерывной закачки отдельных строк в файл, вы вынуждены многократно обновлять файловую систему для каждого доступа.
Проверьте лифт. Элеватор по умолчанию для большинства дистрибутивов настроен для вращения дисков с произвольным доступом. SSD не нуждается в дополнительной логике, поэтому установка элеватора в noop может повысить производительность, позволяя аппаратному обеспечению управлять записью.
Запись через v кэширование с обратной записью. Это немного более эзотерично, но вы можете проверить метод кэширования, используемый
hdparm
для устройства. Кэширование с обратной записью может оказать положительное влияние на производительность SSD по сравнению с сквозной записью.источник
Кэширование вашего файла, вероятно, неправильно настроено для вашей рабочей нагрузки. К сожалению, ядро Linux достаточно глупо, чтобы не обрабатывать это автоматически, и настройки по умолчанию довольно плохие, если у вас много оперативной памяти и достаточно медленные блочные устройства. См. Https://lonesysadmin.net/2013/12/22/better-linux-disk-caching-performance-vm-dirty_ratio/ для получения подробной информации.
Я бы предложил попробовать изменить
/etc/sysctl.conf
либосильно снизить нагрузку на оперативную память, вызванную кэшированием записи, чтобы ядро лучше справлялось с другими задачами. Это обменивает увеличенную задержку на более низкую пропускную способность.
Другая возможность - увеличить кеширование, но если ваш процесс все время будет постоянно записывать новые данные, вы получите очень плохую задержку, если кеш когда-либо заполнится. Если вы хотите попробовать это, вы можете сделать что-то вроде
Обратите внимание, что
*_ratio
настройки относятся к проценту доступной оперативной памяти. Если вы хотите лучшего контроля, используйте*_bytes
настройки. Я лично использую следующий конфиг для моей рабочей станции:Это ограничивает кэш фоновой записи до 50 МБ и вызывает синхронную запись, если в кэше находится 200 МБ.
источник