Вопрос или проблема
У моего компьютера современный процессор с 8 ядрами и NVMe SSD диском (95% свободно).
NVMe SSD подключен к материнской плате через PCIe 3.
Файловая система – ext4 с опцией discard
.
Ядро Linux – 6.6.38
echo 3 > /proc/sys/vm/drop_caches
С помощью hdparm я провожу тест скорости чтения:
hdparm -Tt /dev/nvme1n1p5
/dev/nvme1n1p5:
Время кэшированных чтений: 44518 МБ за 1.99 секунды = 22317.28 МБ/с
Время буферизированных чтений с диска: 4764 МБ за 3.00 секунды = 1587.79 МБ/с
С помощью dd я также провожу тест скорости записи:
dd if=/dev/zero of=testfile1
^C19047808+0 записей в
19047808+0 записей из
9752477696 байт (9,8 ГБ, 9,1 ГиБ) скопировано, 11,0414 с, 883 МБ/с
Если я запускаю более одной dd if=/dev/zero of=testfileN &
для записи на NVMe SSD диск, я вижу в других программах, таких как htop, что скорость записи составляет около 1800 МБ/с (N = 1 2 3 4 5)
Я пробую то же самое с random
вместо zero
, скорость та же – около 1800 МБ/с
Почему?
Как увеличить скорость записи в файл до полной скорости?
Есть ли какие-то специальные параметры ядра, которые мне нужны?
Ответ или решение
Ваша ситуация с записью на SSD NVMe под управлением Linux может быть проанализирована с разных сторон, чтобы понять, почему вы наблюдаете такие скорости записи и как можно их оптимизировать. Давайте рассмотрим ключевые факторы, влияющие на производительность записи, а также некоторые рекомендации по оптимизации.
1. Оборудование и соединение
Вы используете NVMe SSD, который подключен через интерфейс PCIe 3.0. Это обеспечивает высокую пропускную способность, однако производительность записи может зависеть от нескольких факторов:
- Тип SSD: Разные модели SSD имеют разные скорости записи в зависимости от архитектуры. Например, SLC (Single-Level Cell) обычно быстрее, чем TLC (Triple-Level Cell).
- Объем заполнения: Поскольку ваш SSD более чем на 95% свободен, это в целом хорошо, так как при заполнении накопителей скорость записи может снижаться.
- Ограничения системы: Если другие процессы активно используют ресурсы, это может влиять на скорость записи на SSD.
2. Файловая система и параметры
Вы используете файловую систему ext4 с опцией discard
. Эта опция активирует TRIM, что позволяет SSD работать более эффективно, освобождая не используемые блоки. Однако использование discard
может влиять на производительность записи:
- Опция discard: Хотя она помогает управлять свободным пространством, частые команды TRIM могут также снизить общую скорость записи, так как они требуют дополнительных операций.
3. Проведение тестов
Ваши тесты с использованием hdparm
показывают ожидаемую производительность для чтения, но результаты записи через dd
показывают, что скорость записи составляет около 883 MB/s. Это может быть связано с тем, что:
- Скорость последовательной записи: При тестировании с использованием
dd
вы, скорее всего, проверяете скорость последовательной записи, которая может зависеть от текущего состояния кеша и фрагментации. - Параллельные процессы: Запуск нескольких экземпляров программы
dd
может привести к товарообороту ресурсов, что иногда создает иллюзию улучшенной производительности из-за загрузки и распределения задач.
4. Оптимизация
Чтобы повысить скорость записи в одном тесте или приложении, вы можете рассмотреть следующие параметры:
-
Параметры ядра:
- Проверьте, включены ли параметры, такие как
noop
илиdeadline
в настройках планировщика I/O. Один из них может быть более подходящим для SSD. - Включите режим
write-back
для кэширования записи для снижения задержек.
- Проверьте, включены ли параметры, такие как
-
Настройки SSD:
- Убедитесь, что у вас установлены последние обновления прошивки для SSD, так как они могут включать улучшения производительности.
-
Обработайте тесты:
- Попробуйте различный размер блока в
dd
, например,bs=1M
, чтобы поэкспериментировать с разными размерами. - Используйте флаг
oflag=direct
вdd
, чтобы обойти кэширование ядра. Это позволяет получить более точные замеры реальной скорости записи на устройство.
- Попробуйте различный размер блока в
-
Мониторинг нагрузки:
- Используйте инструменты мониторинга, такие как
iostat
илиiotop
, чтобы увидеть, как загружены другие ресурсы во время выполнения тестов.
- Используйте инструменты мониторинга, такие как
-
Параллелизм:
- Вместо запуска нескольких процессов
dd
, попробуйте использовать инструменты, такие какfio
, которые могут оптимально управлять параллелизмом и конфигурацией ввода-вывода.
- Вместо запуска нескольких процессов
Заключение
Скорость записи на NVMe SSD может варьироваться в зависимости от множества факторов. Чтобы улучшить производительность, необходимо оптимизировать как параметры системы, так и конфигурации самой файловой системы. Следуя вышеуказанным рекомендациям, вы сможете поднять скорость записи до более высоких значений.