| <?xml version='1.0'?> <!--*-nxml-*--> |
| <!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" |
| "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"> |
| |
| <!-- |
| This file is part of systemd. |
| |
| Copyright 2012 Intel Corporation |
| |
| Authors: |
| Auke Kok <auke-jan.h.kok@intel.com> |
| William Giokas <1007380@gmail.com> |
| |
| systemd is free software; you can redistribute it and/or modify it |
| under the terms of the GNU Lesser General Public License as published by |
| the Free Software Foundation; either version 2.1 of the License, or |
| (at your option) any later version. |
| |
| systemd is distributed in the hope that it will be useful, but |
| WITHOUT ANY WARRANTY; without even the implied warranty of |
| MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
| Lesser General Public License for more details. |
| |
| You should have received a copy of the GNU Lesser General Public License |
| along with systemd; If not, see <http://www.gnu.org/licenses/>. |
| --> |
| |
| <refentry id="systemd-bootchart" conditional='ENABLE_BOOTCHART' |
| xmlns:xi="http://www.w3.org/2001/XInclude"> |
| |
| <refentryinfo> |
| <title>systemd-bootchart</title> |
| <productname>systemd</productname> |
| |
| <authorgroup> |
| <author> |
| <contrib>Developer</contrib> |
| <firstname>Auke</firstname> |
| <surname>Kok</surname> |
| <email>auke-jan.h.kok@intel.com</email> |
| </author> |
| </authorgroup> |
| </refentryinfo> |
| |
| <refmeta> |
| <refentrytitle>systemd-bootchart</refentrytitle> |
| <manvolnum>1</manvolnum> |
| </refmeta> |
| |
| <refnamediv> |
| <refname>systemd-bootchart</refname> |
| <refpurpose>Boot performance graphing tool</refpurpose> |
| </refnamediv> |
| |
| <refsect1> |
| <title>Description</title> |
| <para> |
| <command>systemd-bootchart</command> is a tool, usually run at |
| system startup, that collects the CPU load, disk load, memory |
| usage, as well as per-process information from a running system. |
| Collected results are output as an SVG graph. Normally, |
| systemd-bootchart is invoked by the kernel by passing |
| <option>init=<filename>/usr/lib/systemd/systemd-bootchart</filename></option> |
| on the kernel command line. systemd-bootchart will then fork the |
| real init off to resume normal system startup, while monitoring |
| and logging startup information in the background. |
| </para> |
| <para> |
| After collecting a certain amount of data (usually 15–30 |
| seconds, default 20 s) the logging stops and a graph is |
| generated from the logged information. This graph contains vital |
| clues as to which resources are being used, in which order, and |
| where possible problems exist in the startup sequence of the |
| system. It is essentially a more detailed version of the |
| <command>systemd-analyze plot</command> function. |
| </para> |
| <para> |
| Of course, bootchart can also be used at any moment in time to |
| collect and graph some data for an amount of time. It is |
| recommended to use the <option>--rel</option> switch in this |
| case. |
| </para> |
| <para> |
| Bootchart does not require root privileges, and will happily run |
| as a normal user. |
| </para> |
| <para> |
| Bootchart graphs are by default written time-stamped in |
| <filename>/run/log</filename> and saved to the journal with |
| <varname>MESSAGE_ID=9f26aa562cf440c2b16c773d0479b518</varname>. |
| Journal field <varname>BOOTCHART=</varname> contains the |
| bootchart in SVG format. |
| </para> |
| |
| </refsect1> |
| |
| <refsect1> |
| <title>Invocation</title> |
| |
| <para><command>systemd-bootchart</command> can be invoked in several different ways:</para> |
| |
| <variablelist> |
| |
| <varlistentry> |
| <term><emphasis>Kernel invocation</emphasis></term> |
| <listitem><para>The kernel can invoke |
| <command>systemd-bootchart</command> instead of the init |
| process. In turn, <command>systemd-bootchart</command> will |
| invoke <command>/usr/lib/systemd/systemd</command>. |
| </para></listitem> |
| </varlistentry> |
| |
| <varlistentry> |
| <term><emphasis>Started as a standalone program</emphasis></term> |
| <listitem><para>One can execute |
| <command>systemd-bootchart</command> as normal application |
| from the command line. In this mode, it is highly recommended |
| to pass the <option>-r</option> flag in order to not graph the |
| time elapsed since boot and before systemd-bootchart was |
| started, as it may result in extremely large graphs. The time |
| elapsed since boot might also include any time that the system |
| was suspended.</para></listitem> |
| </varlistentry> |
| </variablelist> |
| </refsect1> |
| |
| <refsect1> |
| <title>Options</title> |
| |
| <para>These options can also be set in the |
| <filename>/etc/systemd/bootchart.conf</filename> file. See |
| <citerefentry project='man-pages'><refentrytitle>bootchart.conf</refentrytitle><manvolnum>5</manvolnum></citerefentry>. |
| </para> |
| |
| <variablelist> |
| <xi:include href="standard-options.xml" xpointer="help" /> |
| |
| <varlistentry> |
| <term><option>-n</option></term> |
| <term><option>--sample <replaceable>N</replaceable></option></term> |
| <listitem><para>Specify the number of samples, |
| <replaceable>N</replaceable>, to record. Samples will be |
| recorded at intervals defined with <option>--freq</option>. |
| </para></listitem> |
| </varlistentry> |
| |
| <varlistentry> |
| <term><option>-f</option></term> |
| <term><option>--freq <replaceable>f</replaceable></option></term> |
| <listitem><para>Specify the sample log frequency, a positive |
| real <replaceable>f</replaceable>, in Hz. Most systems can |
| cope with values up to 25–50 without creating too much |
| overhead.</para></listitem> |
| </varlistentry> |
| |
| <varlistentry> |
| <term><option>-r</option></term> |
| <term><option>--rel</option></term> |
| <listitem><para>Use relative times instead of absolute times. |
| This is useful for using bootchart at post-boot time to |
| profile an already booted system. Without this option the |
| graph would become extremely large. If set, the horizontal |
| axis starts at the first recorded sample instead of time |
| 0.0.</para></listitem> |
| </varlistentry> |
| |
| <varlistentry> |
| <term><option>-F</option></term> |
| <term><option>--no-filter</option></term> |
| <listitem><para>Disable filtering of tasks that did not |
| contribute significantly to the boot. Processes that are too |
| short-lived (only seen in one sample) or that do not consume |
| any significant CPU time (less than 0.001 s) will not be |
| displayed in the output graph. </para></listitem> |
| </varlistentry> |
| |
| <varlistentry> |
| <term><option>-C</option></term> |
| <term><option>--cmdline</option></term> |
| <listitem><para>Display the full command line with arguments |
| of processes, instead of only the process name. |
| </para></listitem> |
| </varlistentry> |
| |
| <varlistentry> |
| <term><option>-g</option></term> |
| <term><option>--control-group</option></term> |
| <listitem><para>Display process control group |
| </para></listitem> |
| </varlistentry> |
| |
| <varlistentry> |
| <term><option>-o</option></term> |
| <term><option>--output <replaceable>path</replaceable></option></term> |
| <listitem><para>Specify the output directory for the graphs. |
| By default, bootchart writes the graphs to |
| <filename>/run/log</filename>.</para></listitem> |
| </varlistentry> |
| |
| <varlistentry> |
| <term><option>-i</option></term> |
| <term><option>--init <replaceable>path</replaceable></option></term> |
| <listitem><para>Use this init binary. Defaults to |
| <command>/usr/lib/systemd/systemd</command>. |
| </para></listitem> |
| </varlistentry> |
| |
| <varlistentry> |
| <term><option>-p</option></term> |
| <term><option>--pss</option></term> |
| <listitem><para>Enable logging and graphing of processes' PSS |
| (Proportional Set Size) memory consumption. See |
| <filename>filesystems/proc.txt</filename> in the kernel |
| documentation for an explanation of this field. |
| </para></listitem> |
| </varlistentry> |
| |
| <varlistentry> |
| <term><option>-e</option></term> |
| <term><option>--entropy</option></term> |
| <listitem><para>Enable logging and graphing of the kernel |
| random entropy pool size.</para></listitem> |
| </varlistentry> |
| |
| <varlistentry> |
| <term><option>-x</option></term> |
| <term><option>--scale-x <replaceable>N</replaceable></option></term> |
| <listitem><para>Horizontal scaling factor for all variable |
| graph components.</para></listitem> |
| </varlistentry> |
| |
| <varlistentry> |
| <term><option>-y</option></term> |
| <term><option>--scale-y <replaceable>N</replaceable></option></term> |
| <listitem><para>Vertical scaling factor for all variable graph |
| components.</para></listitem> |
| </varlistentry> |
| |
| </variablelist> |
| |
| |
| </refsect1> |
| |
| <refsect1> |
| <title>Output</title> |
| |
| <para><command>systemd-bootchart</command> generates SVG graphs. |
| In order to render those on a graphical display any SVG capable |
| viewer can be used. It should be noted that the SVG render engines |
| in most browsers (including Chrome and Firefox) are many times |
| faster than dedicated graphical applications like Gimp and |
| Inkscape. Just point your browser at |
| <ulink url="file:///run/log/" />! |
| </para> |
| </refsect1> |
| |
| <refsect1> |
| <title>History</title> |
| |
| <para>This version of bootchart was implemented from scratch, but |
| is inspired by former bootchart incantations:</para> |
| |
| <variablelist> |
| <varlistentry> |
| <term><emphasis>Original bash</emphasis></term> |
| <listitem><para>The original bash/shell code implemented |
| bootchart. This version created a compressed tarball for |
| processing with external applications. This version did not |
| graph anything, only generated data.</para></listitem> |
| </varlistentry> |
| |
| <varlistentry> |
| <term><emphasis>Ubuntu C Implementation</emphasis></term> |
| <listitem><para>This version replaced the shell version with a |
| fast and efficient data logger, but also did not graph the |
| data.</para></listitem> |
| </varlistentry> |
| |
| <varlistentry> |
| <term><emphasis>Java bootchart</emphasis></term> |
| <listitem><para>This was the original graphing application for |
| charting the data, written in java.</para></listitem> |
| </varlistentry> |
| |
| <varlistentry> |
| <term><emphasis>pybootchartgui.py</emphasis></term> |
| <listitem><para>pybootchart created a graph from the data |
| collected by either the bash or C version.</para></listitem> |
| </varlistentry> |
| </variablelist> |
| |
| <para>The version of bootchart you are using now combines both the |
| data collection and the charting into a single application, making |
| it more efficient and simpler. There are no longer any timing |
| issues with the data collector and the grapher, as the graphing |
| cannot be run until the data has been collected. Also, the data |
| kept in memory is reduced to the absolute minimum needed.</para> |
| |
| </refsect1> |
| |
| <refsect1> |
| <title>See Also</title> |
| |
| <para> |
| <citerefentry project='man-pages'><refentrytitle>bootchart.conf</refentrytitle><manvolnum>5</manvolnum></citerefentry> |
| </para> |
| </refsect1> |
| |
| <refsect1> |
| <title>Bugs</title> |
| |
| <para>systemd-bootchart does not get the model information for the |
| hard drive unless the root device is specified with |
| <code>root=/dev/sdxY</code>. Using UUIDs or PARTUUIDs will boot |
| fine, but the hard drive model will not be added to the |
| chart.</para> |
| <para>For bugs, please contact the author and current maintainer:</para> |
| <simplelist> |
| <member>Auke Kok <email>auke-jan.h.kok@intel.com</email></member> |
| </simplelist> |
| </refsect1> |
| |
| </refentry> |