Top 15 tools to monitor disk IO performance with examples
Related searches: Linux Disk Usage. Top Storage monitoring tools. How to monitor Disk IO performance with examples. How to check disk read write usage on Linux. Check and monitor disk IO statistics and disk stats in Linux using iostat, vmstat and other tools. How to monitor disk IO by process ID for specific process in Linux. Storage monitoring tools. Get disk read write operation details in Linux with examples.
In my earlier article I gave you an overview of different disk types (HDD, SSD, Optical Disks) and disk interface types (SATA, IDE, SAS, SCSI..) in details with pros and cons. Now in this article I will show you various tools along with examples to monitor disk IO performance in Linux environment.
1. iostat — Report Disk IO Statistics
isotat is part of sysstat rpm. You can install sysstat using yum or any other tool depending upon your environment.
iostat summarises per-disk I/O statistics, providing metrics for IOPS, throughput, I/O request times, and utilization. It can be executed by any user, and is typically the first command used to monitor disk io performance and investigate disk IO statistics and issues at the command line.
iostat provides many options for customizing the output. A useful combination is -dxz 1 , to show disk utilization only ( -d ), extended columns ( -x ), skipping devices with zero metrics ( -z ), and per-second output.
These columns summarize the workload applied. You can check iostat man page to understand the meaning of each column.
2. vmstat — Report virtual memory statistics
vmstat is another monitoring tool which is part of procps-ng rpm. It is most likely possible that procps-ng is installed by default on your Linux node or else you can also install it manually using yum
vmstat reports information about processes, memory, paging, block IO, traps, disks and cpu activity. Here we will use vmstat to monitor disk IO performance in Linux using -d for 1 second with 1 second interval.
To get summary disk IO statistics about disk activity
Follow man page of vmstat to get the complete list of supported arguments using which you can monitor your system resource.
3. iotop — Monitor disk IO Speed
iotop specialises in getting disk stats and is part of iotop rpm. You can install iotop using yum or any other tool depending upon your environment.
iotop watches disk I/O usage information output by the Linux kernel (requires 2.6.20 or later) and displays a table of current I/O usage by processes or threads on the system.
With —only iotop will only show processes or threads actually doing I/O, instead of showing all processes or threads so you can check and monitor disk IO performance.
4. nmon — Monitor System Stats
nmon is not available in the default repository of RHEL/CentOS. You can install if from the EPEL repository. To install the entire EPEL repo on RHEL/CentOS 7
and to install EPEL repo on CentOS/RHEL 8
Next you can install nmon using yum command
Alternatively you can also install nmon tool manually
nmon can display the CPU, memory, network, disks (mini graphs or numbers), file systems, NFS, top processes, resources (Linux version & processors) and on Power micro-partition information.
Execute nmon from the terminal
To only display disk usage statistics press D
To display disk usage statistics with graph press d
5. atop — Advanced System & Process Monitor
You can again install atop using yum (assuming you had installed EPEL repo) or alternatively you can manually install atop to check and monitor disk IO performance in Linux.
The program atop is an interactive monitor to view the load on a Linux system. You can use atop to monitor disk IO by process. It shows the occupation of the most critical hardware resources (from a performance point of view) on system level, i.e. cpu, memory, disk and network.
Now press shift + d for disk activity
Then press c for full command name..
6. collectl — Collects data that describes the current system status
collectl is not available in the internal repo of CentOS/RHEL, so either you can install EPEL repo itself and then use yum to install collectl or manually install it.
collectl will collect data that describes the current system status. We can use collectl to check and monitor disk IO performance in Linux. The following command reports CPU and disk IO statistics. Here c and d represent CPU and Disk.
Follow man page of collectl to see all the supported options.
7. sar — Monitor Disk IO Performance
sar is another famous and widely used too and is part of sysstat rpm. You can install sysstat using yum or any other tool depending upon your environment.
sar is a powerful tool which can be used to monitor all the system resources. But to stick to this article’s topic, we will use -d to monitor disk IO performance for 1 second with an interval of 1 second.
You can check this article to understand about all these columns and other options supported with sar and ksar .
8. blktrace — generate traces of the Disk I/O
blktrace is part of blktrace rpm which should be available in your default repository. You can install it using yum command or other tools based on your environment.
blktrace is a specialized utility for tracing block I/O events
Multiple event lines are printed for each I/O. You can also monitor disk IO by process. The columns are:
- Device major, minor number
- CPU ID
- Sequence number
- Action time, in seconds
- Process ID
- Action identifier (see blkparse(1)): Q == queued, G == get request, P == plug, M == merge, D == issued, C == completed, etc.
- RWBS description (see the “rwbs” section earlier in this chapter): W == write, S == synchronous, etc.
- Address + size [device]
At the end of execution you will get a summary of disk statswith throughput details of read and write operations.
Perf tools are performance analysis tools based on Linux perf_events (aka perf) and ftrace .
9. perf-tools: iolatency
iolatency — summarize block device I/O latency as a histogram and is part of perf-tools , you can download iolatency script from below location
Provide executable permission to the downloaded script
Next execute the script with -Q option which enables queued time. The -Q option includes the block I/O queued time, by tracing based on block_rq_insert instead of block_rq_issue :
Here the disk latency is between 16 — 32 milliseconds.
You can get some more examples on iolatency on the official github page
10. perf-tools: iosnoop — monitor disk IO by process
iosnoop is another tool from perf-tools . You can download iosnoop script from the below path
Provide executable permission to the downloaded script
It will trace disk I/O with details including latency. Here using -p I have provided the PID of cp command for which ionoop will show the latency value to monitor disk IO by process ID.
For more examples and list of supported options you can check the official github page
11. BPF Tools
Traditional Performance tools provide some insight for storage I/O, including IOPS rates, average latency and queue lengths, and I/O by process.
BPF tracing tools can provide additional insight for disk stats and can be used for disk IO performance in Linux.
Credits: BPF Performance Tools
11.1 BPF Pre-requisite
You must install below rpms to be able to use BPF
- bcc
- bpftool
- bpftrace
Here bcc can be installed from the system repository. Make sure bcc rpm version matches the loaded kernel version. So you can install both rpms together
Next install bpftools and bpftrace to be able to monitor disk IO performance
This will download the repo file and place at /etc/yum.repos.d/bpftools.repo . Now you can install bpftrace and bpftools using yum
11.2 biolatency
biolatency is a BCC and bpftrace tool to show disk IO statistics with latency as a histogram. The term device latency refers to the time from issuing a request to the device, to when it completes, including time spent queued in the operating system. We can use biolatency to check disk stats and monitor disk IO performance.
The -D option in biolatency shows histograms for disks stats separately, helping you see how each type performs.
This output shows disk IO statistics for /dev/sda , an internal disk, with I/O latency often between 128 and 4095 microseconds
11.3 biosnoop
biosnoop is a BCC and bpftrace tool that prints a one-line summary for each disk IO statistics.
It prints a line of output for each disk IO statistics, with details including latency (time from device issue to completion).
This allows you to examine disk IO performance in more detail:
The biosnoop columns are:
- TIME(s): I/O completion time in seconds
- COMM: Process name, if cached
- PID: Process ID, if cached
- DISK: Storage device name
- T: Type: R == reads, W == writes
- SECTOR: Address on disk in units of 512-byte sectors
- BYTES: Size of the I/O
- LAT(ms): Duration of the I/O from device issue to device completion
11.4 biotop
biotop is a BCC tool that is similar to top but to get disk stats and disk IO statistics in Linux.
- -C: Don’t clear the screen
- -r ROWS: Number of rows to print
Top of the list are kworker threads initiating writes: this is background write flushing, and the real process that dirtied the pages is not known at this point
11.5 bitesize
bitesize is a BCC and bpftrace tool to show the size of disk IO statistics.
This output shows the disk stats that both the kworker thread and jbd2 are calling I/O mostly in the 0 to 1 Kbyte range.
11.6 ext4slower
ext4slower traces the ext4 file system and checks disk IO performance for ext4 file system, and then only prints those disk stats that exceed a threshold.
Similar tools exist in bcc for other file systems: btrfsslower , xfsslower , and zfsslower . There is also fileslower , which works at the VFS layer and traces everything (although at some higher overhead).
Here I have a dd command running on another terminal to simulate artificial disk IO statistics
Conclusion
In this tutorial we learned about various Linux tools which can be used to check disk usage by different processes and monitor disk IO Performance. Disk read write plays very important role in how application data is processed between RAM and Disk so it is very important that you have disk with good I/O speed and RPM. I would recommend reading about different available disk types and disk interface types
This would give you an idea on choosing the type of drive which suits your requirement. In production environment we mostly prefer HDD over SSD due to cost and many other factors but for laptops and desktops mostly SSD are used. But now a days even in production environment is starting to move to SSD to support cloud environment.
Lastly I hope the steps from the article to monitor disk IO performance, disk stats and disk IO statistics in Linux was helpful. So, let me know your suggestions and feedback using the comment section.
References
I have used below external references for this tutorial guide
BPF Performance Tools
Didn’t find what you were looking for? Perform a quick search across GoLinuxCloud
If my articles on GoLinuxCloud has helped you, kindly consider buying me a coffee as a token of appreciation.
For any other feedbacks or questions you can either use the comments section or contact me form.
Выявляем процессы с дисковой активностью в Linux
TL;DR: статья рассказывает об удобном, быстром и надежном способе определения Linux-программ, записывающих данные на диск, что помогает в выявлении большой или аномально частой нагрузки на дисковую подсистему, а также позволяет оценить накладные расходы файловой системы. Это особенно актуально для SSD в ПК, EMMC и Flash-памяти в одноплатных компьютерах.
В ходе написания статьи обнаружилось, что запись нескольких килобайт данных на файловую систему BTRFS приводит к записи 3 мегабайт реальных данных на диск.
Введение
После 7 месяцев использования нового SSD я решил проверить количество записанных данных, как их сообщает сам диск через SMART.
19.7 ТБ.
Всего за 7 месяцев я использовал 13% от гарантированного количества записанных данных, притом, что он настроен в соответствии с рекомендациями по выравниваю разделов и настройке ФС, swap у меня почти не используется, диски виртуальных машин размещены на HDD!
Это аномально большая цифра, такими темпами гарантийный TBW будет превышен раньше достижения 5-летнего срока гарантии диска. Да и не может мой компьютер писать по 93 гигабайта в сутки! Нужно проверить, сколько данных пишется на диск за 10 минут…
Определение количества записанных данных на дисковое устройство
Мой SSD хранит количество записанных данных в параметре 241 Total_LBAs_Written, в логических блоках (LBA), а не в байтах. Размер логического блока в моём случае — 512 байт (его можно увидеть в выводе smartctl, в Sector Size). Чтобы получить байты, нужно умножить значение параметра на 512.
Программа skdump на моём SSD пытается интерпретировать значение Total_LBAs_Written как-то по-своему, из-за чего выводит 1296217.695 TB , что, очевидно, некорректно.
Чтобы узнать количество записываемой информации на уровне устройства, воспользуемся программой btrace из состава пакета blktrace . Она показывает как общую статистику за всё время работы программы, так и отдельные процессы и потоки (в т.ч. ядра), которые выполняли запись.
Запустите следующую команду, чтобы собрать информацию за 10 минут, где /dev/sdb — ваш диск:
btrace позволяет наглядно посмотреть реальное количество записанных данных, но понять, какие именно программы совершают запись, из её вывода сложно.
Определение программ, производящих запись на накопитель
Программа iotop покажет процессы, пишущие на диск, и размер записанных данных.
Наиболее удобный вывод обеспечивают следующие параметры:
В глаза бросается Firefox, записавший 283 мегабайта за несколько минут работы iotop.
Определение файлов, в которые производится запись
Информация о процессе, насилующим диск — хорошо, а пути, по которым производится запись — еще лучше.
Воспользуемся программой fatrace , которая отслеживает изменения файловой системы.
Fatrace не умеет показывать количество записанных данных вследствие использования довольно простого отслеживания факта обращения к файлам через inotify.
Из вывода видно, как хабр сохраняет мою статью в local storage браузера, пока я её пишу, а также расширение Group Speed Dial, которое, как удалось обнаружить именно с помощью fatrace, читает свои данные каждые 30 секунд. Именно читает, а не записывает: CW перед файлом говорит о том, что файл открывается на чтение и запись, с одновременным созданием файла, если он отсутствует (вызывается openat с флагом O_RDWR|O_CREAT), но не говорит, что в файл действительно писалась какая-либо информация.
На всякий случай, чтобы удостовериться в этом, воспользуемся strace, с фильтром на файловые системные вызовы:
Нет ни одного вызова write() , что говорит об отсутствии записи в файл.
Определение накладных расходов файловой системы
Большая разница в показаниях iotop и btrace натолкнула на мысль протестировать файловую систему путем ручной записи данных в файл и отслеживания показаний btrace.
Если полностью исключить запись на диск, загрузившись в emergency-режим systemd, и записать вручную пару байт данных в существующий файл, btrace на SSD с btrfs сообщает о записи 3 мегабайт реальных данных. Свежесозданная файловая система флешке размером в 8 ГБ записывает минимум 264 КиБ при записи одного байта.
Для сравнения, запись пары байт в файл на ext4 оканчивается записью 24 килобайтов данных на диск.
В 2017 году Jayashree Mohan, Rohan Kadekodi и Vijay Chidambaram провели исследование усиления записи разных файловых систем, их результаты для btrfs и ext4 при записи 4 КБ соотносятся с моими.
How to monitor disk activity?
How do I view my Disk Activity on Ubuntu? For example, How can I monitor what is being written and read from disk as well as the percentage of disk usage?
I am looking for an application similar to the Resource Monitor in Windows.
6 Answers 6
You can use iotop. To install, open a terminal and execute the following command:
To use iotop, open a terminal and type the following command:
iotop features real-time display of all disk activity and also displays the command responsible for the activity and the user behind the command just like Resource Monitor.
Also similar to resource monitor is htop in it’s ability to identify and kill processes:
and to run htop in monitor mode:
or, for more features and permissions to fully debug and kill individual processes etc.:
Linux как посмотреть нагрузку на диск с
Статистику по операциям ввода-вывода для дисков можно посмотреть при помощи команд iostat и pidstat. Это поможет понять какие процессы создают набольшую нагрузку на диск в Linux.
Для работы с этими утилитами придется установить дополнительные пакеты. Инструкция по установка:
1) Debian\Ubuntu:
Команда iostat
Просмотр общей статистики ввода-вывода по дискам можно осуществить командой:
Пример вывода команды:
Важными столбцами являются:
- r/s Число операций чтения с диска в секунду
- w/s Число операций записи на диск в секунду
- rkB/s Число прочитанных килобайт за секунду
- wkB/s Число записанных килобайт за секунду
Команда pidstat
Просмотр статистики в разрезе процессов можно посмотреть в интерактивном режиме при помощи команды: