pt-diskstats man page on DragonFly

Man page or keyword search:  
man Server   44335 pages
apropos Keyword Search (all sections)
Output format
DragonFly logo
[printable version]

PT-DISKSTATS(1)	      User Contributed Perl Documentation      PT-DISKSTATS(1)

NAME
       pt-diskstats - An interactive I/O monitoring tool for GNU/Linux.

SYNOPSIS
       Usage: pt-diskstats [OPTIONS] [FILES]

       pt-diskstats prints disk I/O statistics for GNU/Linux.  It is somewhat
       similar to iostat, but it is interactive and more detailed.  It can
       analyze samples gathered from another machine.

RISKS
       Percona Toolkit is mature, proven in the real world, and well tested,
       but all database tools can pose a risk to the system and the database
       server.	Before using this tool, please:

       ·   Read the tool's documentation

       ·   Review the tool's known "BUGS"

       ·   Test the tool on a non-production server

       ·   Backup your production server and verify the backups

DESCRIPTION
       The pt-diskstats tool is similar to iostat, but has some advantages. It
       prints read and write statistics separately, and has more columns. It
       is menu-driven and interactive, with several different ways to
       aggregate the data. It integrates well with the pt-stalk tool. It also
       does the "right thing" by default, such as hiding disks that are idle.
       These properties make it very convenient for quickly drilling down into
       I/O performance and inspecting disk behavior.

       This program works in two modes. The default is to collect samples of
       /proc/diskstats and print out the formatted statistics at intervals.
       The other mode is to process a file that contains saved samples of
       /proc/diskstats; there is a shell script later in this documentation
       that shows how to collect such a file.

       In both cases, the tool is interactively controlled by keystrokes, so
       you can redisplay and slice the data flexibly and easily.  It loops
       forever, until you exit with the 'q' key.  If you press the '?' key,
       you will bring up the interactive help menu that shows which keys
       control the program.

       When the program is gathering samples of /proc/diskstats and refreshing
       its display, it prints information about the newest sample each time it
       refreshes.  When it is operating on a file of saved samples, it redraws
       the entire file's contents every time you change an option.

       The program doesn't print information about every block device on the
       system. It hides devices that it has never observed to have any
       activity.  You can enable and disable this by pressing the 'i' key.

OUTPUT
       In the rest of this documentation, we will try to clarify the
       distinction between block devices (/dev/sda1, for example), which the
       kernel presents to the application via a filesystem, versus the
       (usually) physical device underneath the block device, which could be a
       disk, a RAID controller, and so on.  We will sometimes refer to logical
       I/O operations, which occur at the block device, versus physical I/Os
       which are performed on the underlying device.  When we refer to the
       queue, we are speaking of the queue associated with the block device,
       which holds requests until they're issued to the physical device.

       The program's output looks like the following sample, which is too wide
       for this manual page, so we have formatted it as several samples with
       line breaks:

	 #ts device rd_s rd_avkb rd_mb_s rd_mrg rd_cnc	 rd_rt
	 {6} sda     0.9     4.2     0.0     0%	   0.0	  17.9
	 {6} sdb     0.4     4.0     0.0     0%	   0.0	  26.1
	 {6} dm-0    0.0     4.0     0.0     0%	   0.0	  13.5
	 {6} dm-1    0.8     4.0     0.0     0%	   0.0	  16.0

	     ...    wr_s wr_avkb wr_mb_s wr_mrg wr_cnc	 wr_rt
	     ...    99.7     6.2     0.6    35%	   3.7	  23.7
	     ...    14.5    15.8     0.2    75%	   0.5	   9.2
	     ...     1.0     4.0     0.0     0%	   0.0	   2.3
	     ...   117.7     4.0     0.5     0%	   4.1	  35.1

	     ...	      busy in_prg    io_s  qtime stime
	     ...		6%	0   100.6   23.3   0.4
	     ...		4%	0    14.9    8.6   0.6
	     ...		0%	0     1.1    1.5   1.2
	     ...		5%	0   118.5   34.5   0.4

       The columns are as follows:

       #ts This column's contents vary depending on the tool's aggregation
	   mode.  In the default mode, when each line contains information
	   about a single disk but possibly aggregates across several samples
	   from that disk, this column shows the number of samples that were
	   included into the line of output, in {curly braces}.	 In the
	   example shown, each line of output aggregates {10} samples of
	   /proc/diskstats.

	   In the "all" group-by mode, this column shows timestamp offsets,
	   relative to the time the tool began aggregating or the timestamp of
	   the previous lines printed, depending on the mode.  The output can
	   be confusing to explain, but it's rather intuitive when you see the
	   lines appearing on your screen periodically.

	   Similarly, in "sample" group-by mode, the number indicates the
	   total time span that is grouped into each sample.

	   If you specify "--show-timestamps", this field instead shows the
	   timestamp at which the sample was taken; if multiple timestamps are
	   present in a single line of output, then the first timestamp is
	   used.

       device
	   The device name.  If there is more than one device, then instead
	   the number of devices aggregated into the line is shown, in {curly
	   braces}.

       rd_s
	   The average number of reads per second.  This is the number of I/O
	   requests that were sent to the underlying device.  This usually is
	   a smaller number than the number of logical IO requests made by
	   applications.  More requests might have been queued to the block
	   device, but some of them usually are merged before being sent to
	   the disk.

	   This field is computed from the contents of /proc/diskstats as
	   follows.  See "KERNEL DOCUMENTATION" below for the meaning of the
	   field numbers:

	      delta[field1] / delta[time]

       rd_avkb
	   The average size of the reads, in kilobytes.	 This field is
	   computed as follows:

	      2 * delta[field3] / delta[field1]

       rd_mb_s
	   The average number of megabytes read per second.  Computed as
	   follows:

	      2 * delta[field3] / delta[time]

       rd_mrg
	   The percentage of read requests that were merged together in the
	   queue scheduler before being sent to the physical device.  The
	   field is computed as follows:

	      100 * delta[field2] / (delta[field2] + delta[field1])

       rd_cnc
	   The average concurrency of the read operations, as computed by
	   Little's Law.  This is the end-to-end concurrency on the block
	   device, not the underlying disk's concurrency. It includes time
	   spent in the queue.	The field is computed as follows:

	      delta[field4] / delta[time] / 1000 / devices-in-group

       rd_rt
	   The average response time of the read operations, in milliseconds.
	   This is the end-to-end response time, including time spent in the
	   queue.  It is the response time that the application making I/O
	   requests sees, not the response time of the physical disk
	   underlying the block device.	 It is computed as follows:

	      delta[field4] / (delta[field1] + delta[field2])

       wr_s, wr_avkb, wr_mb_s, wr_mrg, wr_cnc, wr_rt
	   These columns show write activity, and they match the corresponding
	   columns for read activity.

       busy
	   The fraction of wall-clock time that the device had at least one
	   request in progress; this is what iostat calls %util, and indeed it
	   is utilization, depending on how you define utilization, but that
	   is sometimes ambiguous in common parlance.  It may also be called
	   the residence time; the time during which at least one request was
	   resident in the system.  It is computed as follows:

	      100 * delta[field10] / (1000 * delta[time])

	   This field cannot exceed 100% unless there is a rounding error, but
	   it is a common mistake to think that a device that's busy all the
	   time is saturated.  A device such as a RAID volume should support
	   concurrency higher than 1, and solid-state drives can support very
	   high concurrency.  Concurrency can grow without bound, and is a
	   more reliable indicator of how loaded the device really is.

       in_prg
	   The number of requests that were in progress.  Unlike the read and
	   write concurrencies, which are averages that are generated from
	   reliable numbers, this number is an instantaneous sample, and you
	   can see that it might represent a spike of requests, rather than
	   the true long-term average.	If this number is large, it
	   essentially means that the device is heavily loaded.	 It is
	   computed as follows:

	      field9

       ios_s
	   The average throughput of the physical device, in I/O operations
	   per second (IOPS).  This column shows the total IOPS the underlying
	   device is handling.	It is the sum of rd_s and wr_s.

       qtime
	   The average queue time; that is, time a request spends in the
	   device scheduler queue before being sent to the physical device.
	   This is an average over reads and writes.

	   It is computed in a slightly complex way: the average response time
	   seen by the application, minus the average service time (see the
	   description of the next column).  This is derived from the queueing
	   theory formula for response time, R = W + S: response time = queue
	   time + service time.	 This is solved for W, of course, to give W =
	   R - S.  The computation follows:

	      delta[field11] / (delta[field1, 2, 5, 6] + delta[field9])
		 - delta[field10] / delta[field1, 2, 5, 6]

	   See the description for "stime" for more details and cautions.

       stime
	   The average service time; that is, the time elapsed while the
	   physical device processes the request, after the request finishes
	   waiting in the queue.  This is an average over reads and writes.
	   It is computed from the queueing theory utilization formula, U =
	   SX, solved for S.  This means that utilization divided by
	   throughput gives service time:

	      delta[field10] / (delta[field1, 2, 5, 6])

	   Note, however, that there can be some kernel bugs that cause field
	   9 in /proc/diskstats to become negative, and this can cause field
	   10 to be wrong, thus making the service time computation not wholly
	   trustworthy.

	   Note that in the above formula we use utilization very
	   specifically. It is a duration, not a percentage.

	   You can compare the stime and qtime columns to see whether the
	   response time for reads and writes is spent in the queue or on the
	   physical device.  However, you cannot see the difference between
	   reads and writes.  Changing the block device scheduler algorithm
	   might improve queue time greatly.  The default algorithm, cfq, is
	   very bad for servers, and should only be used on laptops and
	   workstations that perform tasks such as working with spreadsheets
	   and surfing the Internet.

       If you are used to using iostat, you might wonder where you can find
       the same information in pt-diskstats.  Here are two samples of output
       from both tools on the same machine at the same time, for /dev/sda,
       wrapped to fit:

	       #ts dev rd_s rd_avkb rd_mb_s rd_mrg rd_cnc   rd_rt
	  08:50:10 sda	0.0	0.0	0.0	0%    0.0     0.0
	  08:50:20 sda	0.4	4.0	0.0	0%    0.0    15.5
	  08:50:30 sda	2.1	4.4	0.0	0%    0.0    21.1
	  08:50:40 sda	2.4	4.0	0.0	0%    0.0    15.4
	  08:50:50 sda	0.1	4.0	0.0	0%    0.0    33.0

		       wr_s wr_avkb wr_mb_s wr_mrg wr_cnc   wr_rt
			7.7    25.5	0.2    84%    0.0     0.3
		       49.6	6.8	0.3    41%    2.4    28.8
		      210.1	5.6	1.1    28%    7.4    25.2
		      297.1	5.4	1.6    26%   11.4    28.3
		       11.9    11.7	0.1    66%    0.2     4.9

			       busy  in_prg   io_s  qtime   stime
				 1%	  0    7.7    0.1     0.2
				 6%	  0   50.0   28.1     0.7
				12%	  0  212.2   24.8     0.4
				16%	  0  299.5   27.8     0.4
				 1%	  0   12.0    4.7     0.3

		   Dev rrqm/s  wrqm/s	r/s    w/s  rMB/s  wMB/s
	  08:50:10 sda	 0.00	41.40  0.00   7.70   0.00   0.19
	  08:50:20 sda	 0.00	34.70  0.40  49.60   0.00   0.33
	  08:50:30 sda	 0.00	83.30  2.10 210.10   0.01   1.15
	  08:50:40 sda	 0.00  105.10  2.40 297.90   0.01   1.58
	  08:50:50 sda	 0.00	22.50  0.10  11.10   0.00   0.13

			  avgrq-sz avgqu-sz  await  svctm  %util
			     51.01     0.02   2.04   1.25   0.96
			     13.55     2.44  48.76   1.16   5.79
			     11.15     7.45  35.10   0.55  11.76
			     10.81    11.40  37.96   0.53  15.97
			     24.07     0.17  15.60   0.87   0.97

       The correspondence between the columns is not one-to-one.  In
       particular:

       rrqm/s, wrqm/s
	   These columns in iostat are replaced by rd_mrg and wr_mrg in pt-
	   diskstats.

       avgrq-sz
	   This column is in sectors in iostat, and is a combination of reads
	   and writes.	The pt-diskstats output breaks these out separately
	   and shows them in kB.  You can derive it via a weighted average of
	   rd_avkb and wr_avkb in pt-diskstats, and then multiply by 2 to get
	   sectors (each sector is 512 bytes).

       avgqu-sz
	   This column really represents concurrency at the block device
	   scheduler.  The pt-diskstats output shows concurrency for reads and
	   writes separately: rd_cnc and wr_cnc.

       await
	   This column is the average response time from the beginning to the
	   end of a request to the block device, including queue time and
	   service time, and is not shown in pt-diskstats.  Instead, pt-
	   diskstats shows individual response times at the disk level for
	   reads and writes (rd_rt and wr_rt), as well as queue time versus
	   service time for reads and writes in aggregate.

       svctm
	   This column is the average service time at the disk, and is shown
	   as stime in pt-diskstats.

       %util
	   This column is called busy in pt-diskstats.	Utilization is usually
	   defined as the portion of time during which there was at least one
	   active request, not as a percentage, which is why we chose to avoid
	   this confusing term.

COLLECTING DATA
       It is straightforward to gather a sample of data for this tool.	Files
       should have this format, with a timestamp line preceding each sample of
       statistics:

	  TS <timestamp>
	  <contents of /proc/diskstats>
	  TS <timestamp>
	  <contents of /proc/diskstats>
	  ... et cetera

       You can simply use pt-diskstats with "--save-samples" to collect this
       data for you.  If you wish to capture samples as part of some other
       tool, and use pt-diskstats to analyze them, you can include a snippet
       of shell script such as the following:

	  INTERVAL=1
	  while true; do
	     sleep=$(date +%s.%N | awk "{print $INTERVAL - (\$1 % $INTERVAL)}")
	     sleep $sleep
	     date +"TS %s.%N %F %T" >> diskstats-samples.txt
	     cat /proc/diskstats >> diskstats-samples.txt
	  done

KERNEL DOCUMENTATION
       This documentation supplements the official documentation
       <http://www.kernel.org/doc/Documentation/iostats.txt> on the contents
       of /proc/diskstats.  That documentation can sometimes be difficult to
       understand for those who are not familiar with Linux kernel internals.
       The contents of /proc/diskstats are generated by the "diskstats_show()"
       function in the kernel source file block/genhd.c.

       Here is a sample of /proc/diskstats on a recent kernel.

	  8 1 sda1 426 243 3386 2056 3 0 18 87 0 2135 2142

       The fields in this sample are as follows.  The first three fields are
       the major and minor device numbers (8, 1), and the device name (sda1).
       They are followed by 11 fields of statistics:

       1.  The number of reads completed.  This is the number of physical
	   reads done by the underlying disk, not the number of reads that
	   applications made from the block device.  This means that 426
	   actual reads have completed successfully to the disk on which
	   /dev/sda1 resides.  Reads are not counted until they complete.

       2.  The number of reads merged because they were adjacent.  In the
	   sample, 243 reads were merged. This means that /dev/sda1 actually
	   received 869 logical reads, but sent only 426 physical reads to the
	   underlying physical device.

       3.  The number of sectors read successfully.  The 426 physical reads to
	   the disk read 3386 sectors.	Sectors are 512 bytes, so a total of
	   about 1.65MB have been read from /dev/sda1.

       4.  The number of milliseconds spent reading.  This counts only reads
	   that have completed, not reads that are in progress.	 It counts the
	   time spent from when requests are placed on the queue until they
	   complete, not the time that the underlying disk spends servicing
	   the requests. That is, it measures the total response time seen by
	   applications, not disk response times.

       5.  Ditto for field 1, but for writes.

       6.  Ditto for field 2, but for writes.

       7.  Ditto for field 3, but for writes.

       8.  Ditto for field 4, but for writes.

       9.  The number of I/Os currently in progress, that is, they've been
	   scheduled by the queue scheduler and issued to the disk (submitted
	   to the underlying disk's queue), but not yet completed.  There are
	   bugs in some kernels that cause this number, and thus fields 10 and
	   11, to be wrong sometimes.

       10. The total number of milliseconds spent doing I/Os.  This is not the
	   total response time seen by the applications; it is the total
	   amount of time during which at least one I/O was in progress.  If
	   one I/O is issued at time 100, another comes in at 101, and both of
	   them complete at 102, then this field increments by 2, not 3.

       11. This field counts the total response time of all I/Os.  In contrast
	   to field 10, it counts double when two I/Os overlap.	 In our
	   previous example, this field would increment by 3, not 2.

OPTIONS
       This tool accepts additional command-line arguments.  Refer to the
       "SYNOPSIS" and usage information for details.

       --columns-regex
	   type: string; default: .

	   Print columns that match this Perl regex.

       --config
	   type: Array

	   Read this comma-separated list of config files; if specified, this
	   must be the first option on the command line.

       --devices-regex
	   type: string

	   Print devices that match this Perl regex.

       --group-by
	   type: string; default: all

	   Group-by mode: disk, sample, or all.	 In disk mode, each line of
	   output shows one disk device, with the statistics computed since
	   the tool started.  In sample mode, each line of output shows one
	   sample of statistics, with all disks averaged together.  In all
	   mode, each line of output shows one sample and one disk device.

       --headers
	   type: Hash; default: group,scroll

	   If "group" is present, each sample will be separated by a blank
	   line, unless the sample is only one line.  If "scroll" is present,
	   the tool will print the headers as often as needed to prevent them
	   from scrolling out of view. Note that you can press the space bar,
	   or the enter key, to reprint headers at will.

       --help
	   Show help and exit.

       --interval
	   type: int; default: 1

	   When in interactive mode, wait N seconds before printing to the
	   screen.  Also, how often the tool should sample /proc/diskstats.

	   The tool attempts to gather statistics exactly on even intervals of
	   clock time.	That is, if you specify a 5-second interval, it will
	   try to capture samples at 12:00:00, 12:00:05, and so on; it will
	   not gather at 12:00:01, 12:00:06 and so forth.

	   This can lead to slightly odd delays in some circumstances, because
	   the tool waits one full cycle before printing out the first set of
	   lines. (Unlike iostat and vmstat, pt-diskstats does not start with
	   a line representing the averages since the computer was booted.)
	   Therefore, the rule has an exception to avoid very long delays.
	   Suppose you specify a 10-second interval, but you start the tool at
	   12:00:00.01.	 The tool might wait until 12:00:20 to print its first
	   lines of output, and in the intervening 19.99 seconds, it would
	   appear to do nothing.

	   To alleviate this, the tool waits until the next even interval of
	   time to gather, unless more than 20% of that interval remains.
	   This means the tool will never wait more than 120% of the sampling
	   interval to produce output, e.g if you start the tool at 12:00:53
	   with a 10-second sampling interval, then the first sample will be
	   only 7 seconds long, not 10 seconds.

       --iterations
	   type: int

	   When in interactive mode, stop after N samples.  Run forever by
	   default.

       --sample-time
	   type: int; default: 1

	   In --group-by sample mode, include N seconds of samples per group.

       --save-samples
	   type: string

	   File to save diskstats samples in; these can be used for later
	   analysis.

       --show-inactive
	   Show inactive devices.

       --show-timestamps
	   Show a 'HH:MM:SS' timestamp in the "#ts" column.  If multiple
	   timestamps are aggregated into one line, the first timestamp is
	   shown.

       --version
	   Show version and exit.

       --[no]version-check
	   default: yes

	   Check for the latest version of Percona Toolkit, MySQL, and other
	   programs.

	   This is a standard "check for updates automatically" feature, with
	   two additional features.  First, the tool checks the version of
	   other programs on the local system in addition to its own version.
	   For example, it checks the version of every MySQL server it
	   connects to, Perl, and the Perl module DBD::mysql.  Second, it
	   checks for and warns about versions with known problems.  For
	   example, MySQL 5.5.25 had a critical bug and was re-released as
	   5.5.25a.

	   Any updates or known problems are printed to STDOUT before the
	   tool's normal output.  This feature should never interfere with the
	   normal operation of the tool.

	   For more information, visit
	   <https://www.percona.com/version-check>.

ENVIRONMENT
       The environment variable "PTDEBUG" enables verbose debugging output to
       STDERR.	To enable debugging and capture all output to a file, run the
       tool like:

	  PTDEBUG=1 pt-diskstats ... > FILE 2>&1

       Be careful: debugging output is voluminous and can generate several
       megabytes of output.

SYSTEM REQUIREMENTS
       This tool requires Perl v5.8.0 or newer and the /proc filesystem,
       unless reading from files.

BUGS
       For a list of known bugs, see
       <http://www.percona.com/bugs/pt-diskstats>.

       Please report bugs at <https://bugs.launchpad.net/percona-toolkit>.
       Include the following information in your bug report:

       ·   Complete command-line used to run the tool

       ·   Tool "--version"

       ·   MySQL version of all servers involved

       ·   Output from the tool including STDERR

       ·   Input files (log/dump/config files, etc.)

       If possible, include debugging output by running the tool with
       "PTDEBUG"; see "ENVIRONMENT".

DOWNLOADING
       Visit <http://www.percona.com/software/percona-toolkit/> to download
       the latest release of Percona Toolkit.  Or, get the latest release from
       the command line:

	  wget percona.com/get/percona-toolkit.tar.gz

	  wget percona.com/get/percona-toolkit.rpm

	  wget percona.com/get/percona-toolkit.deb

       You can also get individual tools from the latest release:

	  wget percona.com/get/TOOL

       Replace "TOOL" with the name of any tool.

AUTHORS
       Baron Schwartz, Brian Fraser, and Daniel Nichter

ABOUT PERCONA TOOLKIT
       This tool is part of Percona Toolkit, a collection of advanced command-
       line tools for MySQL developed by Percona.  Percona Toolkit was forked
       from two projects in June, 2011: Maatkit and Aspersa.  Those projects
       were created by Baron Schwartz and primarily developed by him and
       Daniel Nichter.	Visit <http://www.percona.com/software/> to learn
       about other free, open-source software from Percona.

COPYRIGHT, LICENSE, AND WARRANTY
       This program is copyright 2011-2015 Percona LLC and/or its affiliates,
       2010-2011 Baron Schwartz.

       THIS PROGRAM IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR IMPLIED
       WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
       MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.

       This program is free software; you can redistribute it and/or modify it
       under the terms of the GNU General Public License as published by the
       Free Software Foundation, version 2; OR the Perl Artistic License.  On
       UNIX and similar systems, you can issue `man perlgpl' or `man
       perlartistic' to read these licenses.

       You should have received a copy of the GNU General Public License along
       with this program; if not, write to the Free Software Foundation, Inc.,
       59 Temple Place, Suite 330, Boston, MA  02111-1307  USA.

VERSION
       pt-diskstats 2.2.14

perl v5.20.2			  2015-04-10		       PT-DISKSTATS(1)
[top]

List of man pages available for DragonFly

Copyright (c) for man pages and the logo by the respective OS vendor.

For those who want to learn more, the polarhome community provides shell access and support.

[legal] [privacy] [GNU] [policy] [cookies] [netiquette] [sponsors] [FAQ]
Tweet
Polarhome, production since 1999.
Member of Polarhome portal.
Based on Fawad Halim's script.
....................................................................
Vote for polarhome
Free Shell Accounts :: the biggest list on the net