User Guide


Analyze Linux Kernel I/O

Use the Input and Output analysis of
Intel® VTune™
to match user-level code to I/O operations executed by the hardware.
This collection mode uses hardware event-based sampling collection and system-wide Ftrace* collection to provide a consistent view of the storage system combined with hardware events, as well as an easy-to-use method to match user-level source code to I/O operations executed by the hardware.
This analysis actively relies on the data provided by the kernel block driver sub-system. If your platform utilizes a non-standard block driver sub-system, such as in the case of using user-space storage drivers, I/O metrics will not be available in this analysis type.
provides the following system-wide metrics for the kernel I/O analysis:
  • I/O Wait
    — this system-wide metric represents the amount of time during which the CPU cores were idle due to threads being in an I/O wait state.
  • I/O Queue Depth
    — this metric shows the number of I/O requests submitted to the storage device. If the number of requests in a queue is zero, this means that there are no requests scheduled, and the disk is not utilized at all.
  • I/O Data Transfer
    — this metric shows the number of bytes read from or written to the storage device(s).
  • Page Faults
    — this metric shows the number of page faults that have occurred on the system. It is particularly useful when analyzing access to memory-mapped files.
  • CPU Activity
    — this metric represents the portion of time the system spent in one of the following states:
    • Idle
      state — the CPU core is idle
    • Active
      state — the CPU core is executing a thread
    • I/O Wait
      — the CPU core is idle, but there is a thread that could potentially be executed on this core that is blocked by disk access.
All I/O metrics collected by
, such as
I/O Wait Time
I/O Waits
, and
I/O Queue Depth
, are collected in a system-wide mode and are not target-specific.

Analyze I/O Wait Time

To analyze
I/O Wait Time
, start with the
window. This window provides a quick overview of the target system performance and introduces the
I/O Wait Time
metric that helps you identify whether your application is I/O-bound:
I/O Wait Time
metric represents a portion of time during which the threads are in I/O wait state while the system has cores in idle state. In this case, the number of threads is not greater than the number of idling cores. This aggregated
I/O Wait Time
metric is an integral function of the
I/O Wait
metric that is available in the
pane of the
To estimate how quickly storage requests are served by the kernel sub-system, see the
Disk Input and Output Histogram
. Use the
Operation Type
drop-down menu to select the type of I/O operation you are interested in. For example, for I/O writes, 2-4 storage requests executed within 0.06 seconds or more are classified as slow by
To explore this type of I/O request in greater detail, switch to the

Analyze Slow I/O Requests

In the
window, select an area of interest on the timeline, then use the
Zoom In and Filter by Selection
context menu option. The
histogram is updated to show the data for the selected time range.
For example, in this case, there were 2-4 slow write requests executed during the 6th second of application execution:
By zooming in on an area of interest, you can get a closer look at different metrics and understand the reason behind high I/O wait time.
collects the
I/O Wait
type of context switches caused by I/O accesses from the thread, and provides a system-wide
I/O Wait
metric in the
CPU Activity
area. Use this data to identify imbalance between I/O and compute operations.
I/O Wait
shows the time during which the system cores were idle, but there were threads in a context switch due to I/O access. Use this metric to estimate the dependency of performance on the storage medium.
For example, an
I/O Wait
value of 100% means that all cores of the system are idle, but there are threads blocked by I/O requests. To solve this issue, change the logic of the application to run compute threads in parallel with I/O tasks. Alternatively, consider using faster storage.
I/O Wait
value of 0% could mean one of the following:
  • Regardless of the number of threads blocked on storage access, all CPU cores are actively executing application code.
  • No threads are blocked on storage access.
Explore the
I/O Queue Depth
area to see thee number of storage requests submitted to the storage device. Spikes correspond to the maximum number of requests. Zero-value gaps on the
I/O Queue Depth
chart correspond to points in application run when storage was not utilized at all.
To identify the exact points in time when slow I/O packets were scheduled for execution, enable the
markers for the
I/O Queue Depth
To identify points of high bandwidth, analyze the
I/O Data Transfer
area that shows thee number of bytes read from or written to the storage device.

Analyze Call Stack for I/O Functions

instruments all user-space I/O functions. This enables you to correlate slow I/O requests with instrumented user-space activities. You can do that by examining the full call stack that points to the exact API invocation.
To view a
Task Time
call stack for a particular I/O call, select the required
marker on the timeline and explore the stack in the
Call Stack

Product and Performance Information


Performance varies by use, configuration and other factors. Learn more at