> Полный список статей есть в [llms.txt](https://docs.f3cloud.com/llms.txt). Markdown-версия есть у каждой страницы, достаточно добавить .md к её адресу. Эта страница в Markdown: [https://docs.f3cloud.com/ru/network/iops-performance-test.md](https://docs.f3cloud.com/ru/network/iops-performance-test.md).

# Как проверить скорость диска и IOPS в Linux через fio

Что такое IOPS и как он влияет на скорость сервера. Как измерить случайный и последовательный IOPS диска в Linux с помощью fio, как прочитать результат и на что смотреть при выборе тарифа.

**IOPS** (Input/Output Operations Per Second) – это число операций чтения и записи, которые диск успевает выполнить за одну секунду. Чем выше IOPS, тем быстрее работают приложения, которые часто обращаются к диску мелкими порциями данных.

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

***

## На что влияет IOPS

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

* базы данных MySQL, PostgreSQL и MongoDB;
* нагруженные веб-серверы и интернет-магазины;
* почтовые серверы;
* системы кэширования и очередей.

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

***

## От чего зависит IOPS

На результат влияют три главных фактора.

### Тип накопителя

NVMe-диски дают в разы больше IOPS, чем обычные SATA SSD, и несопоставимо больше, чем жёсткие диски HDD. На серверах F3 Cloud используются NVMe SSD.

### Размер блока

Чем мельче блок, тем больше операций помещается в секунду. Поэтому максимальный IOPS измеряют блоком 4 КБ – это типичный размер обращения базы данных.

### Характер доступа

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

> **Два разных числа.**
>
> IOPS и линейная скорость в МБ/с измеряют разное. Диск может выдавать огромную скорость на последовательном чтении и заметно меньший IOPS на случайных мелких операциях. При выборе сервера под базу данных смотрите именно на случайный IOPS блоком 4 КБ.

***

## Как измерить IOPS в Linux

Для измерения используют утилиту **fio**. Установите её.

#### Ubuntu и Debian

```bash
apt update && apt install -y fio
```

#### AlmaLinux и CentOS

```bash
dnf install -y fio
```

> **Тест создаёт временный файл.**
>
> fio запишет на диск файл указанного размера, в примерах ниже это 2 ГБ. Убедитесь, что на диске есть свободное место, и запускайте тест в рабочей папке, например в `/root`. После теста удалите файл `fiotest`.

Измерьте случайный IOPS на чтение. Это главная цифра для баз данных.

```bash
fio --name=randread --filename=fiotest --ioengine=libaio --direct=1 \
    --rw=randread --bs=4k --iodepth=32 --numjobs=1 --size=2G \
    --runtime=60 --time_based --group_reporting
```

Разберём ключи команды:

* `--rw=randread` – случайное чтение. Для записи используйте `randwrite`, для смешанной нагрузки `randrw`;
* `--bs=4k` – размер блока 4 КБ;
* `--direct=1` – читаем мимо кэша, чтобы видеть реальную работу диска, а не память;
* `--iodepth=32` – сколько запросов держим в очереди одновременно;
* `--runtime=60 --time_based` – тест идёт ровно 60 секунд.

***

## Как прочитать результат

В выводе fio найдите строку, которая начинается со слова `read` или `write`. Первым в ней указан IOPS.

```
read: IOPS=85.2k, BW=333MiB/s (349MB/s)
```

`IOPS=85.2k` – это и есть число операций в секунду.\
`BW` – линейная скорость за то же время.\
Ниже в блоке `lat` fio покажет задержку. Чем она меньше, тем отзывчивее диск.

***

## Что ещё посмотреть

Быстро оценить текущую нагрузку на диск, не запуская тест, помогает `iostat` из пакета `sysstat`.

```bash
# Устанавливаем, если пакета ещё нет
apt install -y sysstat

# Обновляем статистику каждую секунду, колонки r/s и w/s - это операции в секунду
iostat -dx 1
```

Так вы увидите реальную нагрузку от своих приложений в колонках `r/s` и `w/s`, а в колонке `%util` – насколько диск загружен.

***

## Наши ресурсы

**Telegram-канал:** [https://t.me/f3cloud_news](https://t.me/f3cloud_news)\
**Сайт хостинга:** [https://f3cloud.com](https://f3cloud.com/ru)
