mirror of
https://github.com/systemd/systemd.git
synced 2024-11-04 13:51:24 +03:00
324 lines
12 KiB
XML
324 lines
12 KiB
XML
<?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>
|