Поиск по сайту:

Как проверить скорость диска и оперативной памяти вашего Linux-сервера


Если вы регулярно записываете или читаете файлы, скорость вашего диска может повлиять на производительность вашего сервера. Мы покажем вам, как измерить скорость вашего сервера и как понять, насколько он эффективен по сравнению с конкурентами.

Как измеряется производительность ввода-вывода?

Существует множество различных способов чтения и записи на диски, поэтому не существует единого числа для «скорости», которое вы можете измерить.

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

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

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

Однако производительность диска может не иметь большого значения для определенных рабочих нагрузок. Многие приложения кэшируют объекты в памяти (если у вас достаточно оперативной памяти), поэтому в следующий раз, когда вы захотите прочитать этот объект, он будет считан из памяти (что быстрее). Тем не менее, для рабочих нагрузок с большим количеством операций записи к диску по-прежнему необходимо обращаться.

Скорость часто измеряется в МБ/с, но некоторые провайдеры могут измерять ее в IOPS (количество операций ввода-вывода в секунду). Это просто большее число, означающее то же самое; вы можете найти, что IOPS из МБ/с с этой формулой:

IOPS = (MBps / Block Size) * 1024

Тем не менее, некоторые провайдеры могут не рассказать вам, какой тест они используют для измерения IOPS, поэтому полезно провести тестирование самостоятельно.

Установите fio для случайных тестов чтения/записи

Хотя в Linux есть встроенная команда dd , которую можно использовать для измерения производительности последовательной записи, она не показывает, как она будет вести себя в реальных условиях. Вместо этого вы захотите проверить скорость случайного чтения и записи.

fio – это утилита, которая может справиться с этим. Установите его из менеджера пакетов вашего дистрибутива:

sudo apt-get install fio

Затем запустите базовый тест, используя следующую команду:

fio --randrepeat=1 --ioengine=libaio --direct=1 --gtod_reduce=1 --name=test --filename=random_read_write.fio --bs=4k --iodepth=64 --size=250M --readwrite=randrw --rwmixread=80

Это запускает тесты произвольного чтения и записи с использованием 250 МБ данных с соотношением 80% операций чтения и 20% операций записи. Результаты будут отображаться в IOPS и в МБ/с:

Приведенный выше тест был проведен на твердотельном накопителе AWS gp2 – довольно среднем твердотельном накопителе, который показывает довольно среднюю производительность. Производительность записи всегда будет ниже при любом типе ввода-вывода; многие твердотельные накопители и жесткие диски имеют встроенный кэш для использования контроллером накопителя, что делает многие чтения довольно быстрыми. Однако всякий раз, когда вы записываете, вы должны вносить физические изменения в диск, что медленнее.

Выполнение теста на жестком диске показывает низкую производительность произвольного смешанного ввода-вывода, что является распространенной проблемой для жестких дисков:

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

  • Последовательное чтение: seqread
  • Последовательная запись:seqwrite
  • Случайное чтение: случайное чтение
  • Случайная запись: случайная запись
  • Случайный смешанный ввод-вывод: randrw

Кроме того, вы можете изменить размер блока с помощью аргумента --bs. Мы установили его на 4K, что довольно стандартно для случайных тестов, но последовательное чтение и запись могут показать лучшую или худшую производительность с большими размерами блоков. Размеры от 16 КБ до 32 КБ могут быть ближе к тому, с чем вы столкнетесь при реальной нагрузке.

Тестирование производительности памяти

fio не может тестировать скорость оперативной памяти, поэтому, если вы хотите протестировать оперативную память вашего сервера, вам необходимо установить sysbench из диспетчера пакетов вашего дистрибутива:

sudo apt-get install sysbench

Этот пакет может измерять множество показателей производительности, но мы сосредоточены только на тесте памяти. Следующая команда выделяет 1 МБ ОЗУ, а затем выполняет операции записи до тех пор, пока не будет записано 10 ГБ данных (не волнуйтесь, для выполнения этого теста вам не нужно 10 ГБ ОЗУ).

sysbench --test=memory --memory-block-size=1M --memory-total-size=10G run

Это отобразит скорость памяти в МиБ/с, а также связанную с ней задержку доступа.

Этот тест измеряет скорость записи, но вы можете добавить --memory-oper=read для измерения скорости чтения, которая в большинстве случаев должна быть немного выше. Вы также можете протестировать с меньшими размерами блоков, что увеличивает нагрузку на память.

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