mirror of
https://github.com/systemd/systemd.git
synced 2024-12-16 21:53:40 +08:00
329 lines
16 KiB
XML
329 lines
16 KiB
XML
<?xml version='1.0'?> <!--*-nxml-*-->
|
|
<?xml-stylesheet type="text/xsl" href="http://docbook.sourceforge.net/release/xsl/current/xhtml/docbook.xsl"?>
|
|
<!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 commandline. 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</command>
|
|
<command>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>/sbin/init</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
|
|
commandline. 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. </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><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>-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>/sbin/init</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><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>
|