diff options
Diffstat (limited to 'man/html')
153 files changed, 16081 insertions, 0 deletions
diff --git a/man/html/GNUmakefile b/man/html/GNUmakefile new file mode 100644 index 0000000..4f1d0f2 --- /dev/null +++ b/man/html/GNUmakefile @@ -0,0 +1,36 @@ +# +# Copyright (c) 2000,2004 Silicon Graphics, Inc. All Rights Reserved. +# +# 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; either version 2 of the License, or (at your +# option) any later version. +# +# This program 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 General Public License +# for more details. +# + +TOPDIR = ../.. +include $(TOPDIR)/src/include/builddefs + +CSSFILES = $(shell echo *.css) +HTMLFILES = $(shell echo *.html) +LSRCFILES = $(HTMLFILES) $(CSSFILES) + +SUBDIRS = images cpuperf diskmodel diskperf importdata pmie pmview + +default :: default_pcp + +default_pcp : $(SUBDIRS) + $(SUBDIRS_MAKERULE) + +install :: default_pcp install_pcp + +install_pcp : $(SUBDIRS) + $(INSTALL) -m 755 -d $(PCP_BOOKS_DIR)/html + $(INSTALL) -m 644 $(HTMLFILES) $(CSSFILES) $(PCP_BOOKS_DIR)/html + $(SUBDIRS_MAKERULE) + +include $(BUILDRULES) diff --git a/man/html/cclicense.html b/man/html/cclicense.html new file mode 100644 index 0000000..cba93b6 --- /dev/null +++ b/man/html/cclicense.html @@ -0,0 +1,288 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> +<HTML> +<HEAD> + <meta http-equiv="content-type" content="text/html; charset=utf-8"> + <meta http-equiv="content-style-type" content="text/css"> + <link href="pcpdoc.css" rel="stylesheet" type="text/css"> + <link href="images/pcp.ico" rel="icon" type="image/ico"> + <TITLE>PCP Manual</TITLE> +</HEAD> +<BODY LANG="en-AU" TEXT="#000060" DIR="LTR"> +<TABLE WIDTH=100% BORDER=0 CELLPADDING=0 CELLSPACING=0 STYLE="page-break-before: always"> + <TR> <TD WIDTH=64 HEIGHT=64><A HREF="http://pcp.io/"><IMG SRC="images/pmcharticon.png" NAME="pmcharticon" ALIGN=TOP WIDTH=64 HEIGHT=64 BORDER=0></A></TD> + <TD WIDTH=1><P> </P></TD> + <TD WIDTH=500><P VALIGN=MIDDLE ALIGN=LEFT><A HREF="index.html"><FONT COLOR="#cc0000">Home</FONT></A> · <A HREF="lab.pmchart.html"><FONT COLOR="#cc0000">Charts</FONT></A> · <A HREF="timecontrol.html"><FONT COLOR="#cc0000">Time Control</FONT></A></P></TD> + </TR> +</TABLE> +<H1 ALIGN=CENTER STYLE="margin-top: 0.48cm; margin-bottom: 0.32cm"><FONT SIZE=7>Creative Commons License</FONT></H1> +</TABLE> +<P>A number of the icons used in pmchart were originally sourced from the <A HREF="http://tango.freedesktop.org/">Tango Desktop Project</A>. +<P>You may use, distribute and copy those icons under the terms of the Creative Commons License, version 2.5, which is displayed below. The remaining icons, which are completely original works created specifically for pmchart, are distributed under the terms of the GNU General Public License (<A HREF="gpl.html">GPL</A>). The Scalable Vector Graphics (SVG) file associated with each icon explicitly lists which license is appropriate for each icon. +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> Creative Commons Attribution-ShareAlike 2.5 License Agreement</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> PROVIDE LEGAL SERVICES. DISTRIBUTION OF THIS LICENSE DOES NOT</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> CREATE AN ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> THIS INFORMATION ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> NO WARRANTIES REGARDING THE INFORMATION PROVIDED, AND DISCLAIMS</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> LIABILITY FOR DAMAGES RESULTING FROM ITS USE.</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> License</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> THE WORK (AS DEFINED BELOW) IS PROVIDED UNDER THE TERMS OF THIS</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> CREATIVE COMMONS PUBLIC LICENSE ("CCPL" OR "LICENSE"). THE WORK IS</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> PROTECTED BY COPYRIGHT AND/OR OTHER APPLICABLE LAW. ANY USE OF THE</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> WORK OTHER THAN AS AUTHORIZED UNDER THIS LICENSE OR COPYRIGHT LAW</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> IS PROHIBITED.</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> BY EXERCISING ANY RIGHTS TO THE WORK PROVIDED HERE, YOU ACCEPT AND</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> AGREE TO BE BOUND BY THE TERMS OF THIS LICENSE. THE LICENSOR GRANTS</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> YOU THE RIGHTS CONTAINED HERE IN CONSIDERATION OF YOUR ACCEPTANCE</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> OF SUCH TERMS AND CONDITIONS.</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> 1. Definitions</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> 1. "Collective Work" means a work, such as a periodical issue,</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> anthology or encyclopedia, in which the Work in its entirety in</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> unmodified form, along with a number of other contributions,</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> constituting separate and independent works in themselves,</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> are assembled into a collective whole. A work that constitutes</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> a Collective Work will not be considered a Derivative Work (as</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> defined below) for the purposes of this License. 2. "Derivative</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> Work" means a work based upon the Work or upon the Work and other</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> pre-existing works, such as a translation, musical arrangement,</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> dramatization, fictionalization, motion picture version,</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> sound recording, art reproduction, abridgment, condensation,</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> or any other form in which the Work may be recast, transformed,</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> or adapted, except that a work that constitutes a Collective</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> Work will not be considered a Derivative Work for the purpose</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> of this License. For the avoidance of doubt, where the Work is</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> a musical composition or sound recording, the synchronization of</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> the Work in timed-relation with a moving image ("synching") will</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> be considered a Derivative Work for the purpose of this License.</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> 3. "Licensor" means the individual or entity that offers the</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> Work under the terms of this License. 4. "Original Author"</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> means the individual or entity who created the Work. 5. "Work"</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> means the copyrightable work of authorship offered under the</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> terms of this License. 6. "You" means an individual or entity</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> exercising rights under this License who has not previously</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> violated the terms of this License with respect to the Work,</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> or who has received express permission from the Licensor to</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> exercise rights under this License despite a previous violation.</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> 7. "License Elements" means the following high-level license</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> attributes as selected by Licensor and indicated in the title</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> of this License: Attribution, ShareAlike.</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> 2. Fair Use Rights. Nothing in this license is intended to reduce,</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> limit, or restrict any rights arising from fair use, first sale or</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> other limitations on the exclusive rights of the copyright owner</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> under copyright law or other applicable laws.</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> 3. License Grant. Subject to the terms and conditions of this</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> License, Licensor hereby grants You a worldwide, royalty-free,</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> non-exclusive, perpetual (for the duration of the applicable</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> copyright) license to exercise the rights in the Work as stated</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> below:</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> 1. to reproduce the Work, to incorporate the Work into one or</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> more Collective Works, and to reproduce the Work as incorporated</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> in the Collective Works; 2. to create and reproduce Derivative</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> Works; 3. to distribute copies or phonorecords of, display</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> publicly, perform publicly, and perform publicly by means of a</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> digital audio transmission the Work including as incorporated in</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> Collective Works; 4. to distribute copies or phonorecords of,</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> display publicly, perform publicly, and perform publicly by</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> means of a digital audio transmission Derivative Works. 5.</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> For the avoidance of doubt, where the work is a musical</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> composition:</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> 1. Performance Royalties Under Blanket Licenses. Licensor</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> waives the exclusive right to collect, whether individually</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> or via a performance rights society (e.g. ASCAP,</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> BMI, SESAC), royalties for the public performance or</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> public digital performance (e.g. webcast) of the Work.</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> 2. Mechanical Rights and Statutory Royalties. Licensor</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> waives the exclusive right to collect, whether individually</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> or via a music rights society or designated agent</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> (e.g. Harry Fox Agency), royalties for any phonorecord</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> You create from the Work ("cover version") and distribute,</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> subject to the compulsory license created by 17 USC Section</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> 115 of the US Copyright Act (or the equivalent in other</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> jurisdictions).</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> 6. Webcasting Rights and Statutory Royalties. For the avoidance</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> of doubt, where the Work is a sound recording, Licensor waives</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> the exclusive right to collect, whether individually or via</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> a performance-rights society (e.g. SoundExchange), royalties</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> for the public digital performance (e.g. webcast) of the Work,</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> subject to the compulsory license created by 17 USC Section 114 of</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> the US Copyright Act (or the equivalent in other jurisdictions).</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> The above rights may be exercised in all media and formats whether</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> now known or hereafter devised. The above rights include the right</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> to make such modifications as are technically necessary to exercise</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> the rights in other media and formats. All rights not expressly</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> granted by Licensor are hereby reserved.</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> 4. Restrictions.The license granted in Section 3 above is expressly</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> made subject to and limited by the following restrictions:</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> 1. You may distribute, publicly display, publicly perform, or</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> publicly digitally perform the Work only under the terms of this</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> License, and You must include a copy of, or the Uniform Resource</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> Identifier for, this License with every copy or phonorecord of</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> the Work You distribute, publicly display, publicly perform, or</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> publicly digitally perform. You may not offer or impose any terms</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> on the Work that alter or restrict the terms of this License or</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> the recipients' exercise of the rights granted hereunder. You may</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> not sublicense the Work. You must keep intact all notices that</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> refer to this License and to the disclaimer of warranties. You</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> may not distribute, publicly display, publicly perform, or</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> publicly digitally perform the Work with any technological</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> measures that control access or use of the Work in a manner</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> inconsistent with the terms of this License Agreement. The above</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> applies to the Work as incorporated in a Collective Work, but</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> this does not require the Collective Work apart from the Work</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> itself to be made subject to the terms of this License. If You</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> create a Collective Work, upon notice from any Licensor You must,</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> to the extent practicable, remove from the Collective Work any</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> credit as required by clause 4(c), as requested. If You create</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> a Derivative Work, upon notice from any Licensor You must,</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> to the extent practicable, remove from the Derivative Work any</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> credit as required by clause 4(c), as requested. 2. You may</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> distribute, publicly display, publicly perform, or publicly</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> digitally perform a Derivative Work only under the terms of</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> this License, a later version of this License with the same</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> License Elements as this License, or a Creative Commons iCommons</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> license that contains the same License Elements as this License</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> (e.g. Attribution-ShareAlike 2.5 Japan). You must include a copy</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> of, or the Uniform Resource Identifier for, this License or other</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> license specified in the previous sentence with every copy or</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> phonorecord of each Derivative Work You distribute, publicly</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> display, publicly perform, or publicly digitally perform. You</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> may not offer or impose any terms on the Derivative Works that</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> alter or restrict the terms of this License or the recipients'</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> exercise of the rights granted hereunder, and You must keep intact</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> all notices that refer to this License and to the disclaimer of</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> warranties. You may not distribute, publicly display, publicly</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> perform, or publicly digitally perform the Derivative Work</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> with any technological measures that control access or use</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> of the Work in a manner inconsistent with the terms of this</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> License Agreement. The above applies to the Derivative Work as</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> incorporated in a Collective Work, but this does not require</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> the Collective Work apart from the Derivative Work itself to be</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> made subject to the terms of this License. 3. If you distribute,</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> publicly display, publicly perform, or publicly digitally perform</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> the Work or any Derivative Works or Collective Works, You must</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> keep intact all copyright notices for the Work and provide,</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> reasonable to the medium or means You are utilizing: (i) the name</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> of the Original Author (or pseudonym, if applicable) if supplied,</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> and/or (ii) if the Original Author and/or Licensor designate</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> another party or parties (e.g. a sponsor institute, publishing</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> entity, journal) for attribution in Licensor's copyright notice,</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> terms of service or by other reasonable means, the name of such</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> party or parties; the title of the Work if supplied; to the extent</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> reasonably practicable, the Uniform Resource Identifier, if any,</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> that Licensor specifies to be associated with the Work, unless</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> such URI does not refer to the copyright notice or licensing</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> information for the Work; and in the case of a Derivative Work,</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> a credit identifying the use of the Work in the Derivative Work</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> (e.g., "French translation of the Work by Original Author," or</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> "Screenplay based on original Work by Original Author"). Such</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> credit may be implemented in any reasonable manner; provided,</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> however, that in the case of a Derivative Work or Collective Work,</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> at a minimum such credit will appear where any other comparable</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> authorship credit appears and in a manner at least as prominent</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> as such other comparable authorship credit.</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> 5. Representations, Warranties and Disclaimer</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> UNLESS OTHERWISE AGREED TO BY THE PARTIES IN WRITING, LICENSOR</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> OFFERS THE WORK AS-IS AND MAKES NO REPRESENTATIONS OR WARRANTIES</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> OF ANY KIND CONCERNING THE MATERIALS, EXPRESS, IMPLIED, STATUTORY</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> OR OTHERWISE, INCLUDING, WITHOUT LIMITATION, WARRANTIES OF TITLE,</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> MERCHANTIBILITY, FITNESS FOR A PARTICULAR PURPOSE, NONINFRINGEMENT,</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> OR THE ABSENCE OF LATENT OR OTHER DEFECTS, ACCURACY, OR THE PRESENCE</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> OF ABSENCE OF ERRORS, WHETHER OR NOT DISCOVERABLE. SOME JURISDICTIONS</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> DO NOT ALLOW THE EXCLUSION OF IMPLIED WARRANTIES, SO SUCH EXCLUSION</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> MAY NOT APPLY TO YOU.</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> 6. Limitation on Liability. EXCEPT TO THE EXTENT REQUIRED BY</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> APPLICABLE LAW, IN NO EVENT WILL LICENSOR BE LIABLE TO YOU ON ANY</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> LEGAL THEORY FOR ANY SPECIAL, INCIDENTAL, CONSEQUENTIAL, PUNITIVE OR</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> EXEMPLARY DAMAGES ARISING OUT OF THIS LICENSE OR THE USE OF THE WORK,</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> EVEN IF LICENSOR HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> 7. Termination</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> 1. This License and the rights granted hereunder will terminate</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> automatically upon any breach by You of the terms of this</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> License. Individuals or entities who have received Derivative</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> Works or Collective Works from You under this License,</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> however, will not have their licenses terminated provided</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> such individuals or entities remain in full compliance with</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> those licenses. Sections 1, 2, 5, 6, 7, and 8 will survive any</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> termination of this License. 2. Subject to the above terms</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> and conditions, the license granted here is perpetual (for the</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> duration of the applicable copyright in the Work). Notwithstanding</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> the above, Licensor reserves the right to release the Work under</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> different license terms or to stop distributing the Work at any</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> time; provided, however that any such election will not serve</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> to withdraw this License (or any other license that has been,</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> or is required to be, granted under the terms of this License),</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> and this License will continue in full force and effect unless</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> terminated as stated above.</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> 8. Miscellaneous</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> 1. Each time You distribute or publicly digitally perform the</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> Work or a Collective Work, the Licensor offers to the recipient</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> a license to the Work on the same terms and conditions as the</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> license granted to You under this License. 2. Each time You</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> distribute or publicly digitally perform a Derivative Work,</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> Licensor offers to the recipient a license to the original</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> Work on the same terms and conditions as the license granted</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> to You under this License. 3. If any provision of this License</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> is invalid or unenforceable under applicable law, it shall not</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> affect the validity or enforceability of the remainder of the</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> terms of this License, and without further action by the parties</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> to this agreement, such provision shall be reformed to the minimum</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> extent necessary to make such provision valid and enforceable.</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> 4. No term or provision of this License shall be deemed waived and</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> no breach consented to unless such waiver or consent shall be in</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> writing and signed by the party to be charged with such waiver</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> or consent. 5. This License constitutes the entire agreement</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> between the parties with respect to the Work licensed here. There</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> are no understandings, agreements or representations with respect</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> to the Work not specified here. Licensor shall not be bound by</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> any additional provisions that may appear in any communication</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> from You. This License may not be modified without the mutual</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> written agreement of the Licensor and You.</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> Creative Commons is not a party to this License, and makes no</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> warranty whatsoever in connection with the Work. Creative Commons</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> will not be liable to You or any party on any legal theory for</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> any damages whatsoever, including without limitation any general,</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> special, incidental or consequential damages arising in connection</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> to this license. Notwithstanding the foregoing two (2) sentences,</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> if Creative Commons has expressly identified itself as the Licensor</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> hereunder, it shall have all rights and obligations of Licensor.</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> Except for the limited purpose of indicating to the public that</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> the Work is licensed under the CCPL, neither party will use the</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> trademark "Creative Commons" or any related trademark or logo of</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> Creative Commons without the prior written consent of Creative</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> Commons. Any permitted use will be in compliance with Creative</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> Commons' then-current trademark usage guidelines, as may be published</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> on its website or otherwise made available upon request from time</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> to time.</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> Creative Commons may be contacted at http://creativecommons.org/.</pre> +<HR> +<CENTER> +<TABLE WIDTH=100% BORDER=0 CELLPADDING=0 CELLSPACING=0> + <TR> <TD WIDTH=50%><P>Copyright © 2007-2010 <A HREF="http://www.aconex.com/"><FONT COLOR="#000060">Aconex</FONT></A><BR>Copyright © 2000-2004 <A HREF="http://www.sgi.com/"><FONT COLOR="#000060">Silicon Graphics Inc</FONT></P></TD> + <TD WIDTH=50%><P ALIGN=RIGHT><A HREF="http://pcp.io/"><FONT COLOR="#000060">PCP Site</FONT></A><BR>Copyright © 2012-2014 <A HREF="http://www.redhat.com/"><FONT COLOR="#000060">Red Hat</FONT></P></TD> </TR> +</TABLE> +</CENTER> +</BODY> +</HTML> diff --git a/man/html/contacts.html b/man/html/contacts.html new file mode 100644 index 0000000..a53fed9 --- /dev/null +++ b/man/html/contacts.html @@ -0,0 +1,39 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> +<HTML> +<HEAD> + <meta http-equiv="content-type" content="text/html; charset=utf-8"> + <meta http-equiv="content-style-type" content="text/css"> + <link href="pcpdoc.css" rel="stylesheet" type="text/css"> + <link href="images/pcp.ico" rel="icon" type="image/ico"> + <TITLE>PCP Contacts</TITLE> +</HEAD> +<BODY LANG="en-AU" TEXT="#000060" DIR="LTR"> +<TABLE WIDTH=100% BORDER=0 CELLPADDING=0 CELLSPACING=0 STYLE="page-break-before: always"> + <TR> <TD WIDTH=64 HEIGHT=64><A HREF="http://pcp.io/"><IMG SRC="images/pcpicon.png" NAME="pcpicon" ALIGN=TOP WIDTH=64 HEIGHT=64 BORDER=0></A></TD> + <TD WIDTH=1><P> </P></TD> + <TD WIDTH=500><P VALIGN=MIDDLE ALIGN=LEFT><A HREF="index.html"><FONT COLOR="#cc0000">Home</FONT></A> · <A HREF="lab.pmchart.html"><FONT COLOR="#cc0000">Charts</FONT></A> · <A HREF="timecontrol.html"><FONT COLOR="#cc0000">Time Control</FONT></A></P></TD> + </TR> +</TABLE> +<H1 ALIGN=CENTER STYLE="margin-top: 0.48cm; margin-bottom: 0.32cm"><FONT SIZE=7>Contacts</FONT></H1> +<BR><P><I>Mailing List</I> +<P> Questions and discussion about the toolkit should be directed to the PCP mailing list, <A HREF="http://pcp.io/mail.html">http://pcp.io/mail.html</A>. +<BR><P><I>IRC Channel</I> +<P> Several PCP developers and fellow users can be contacted via the <B>#pcp</B> channel on the OFTC network. +<BR><P><I>Web pages</I> +<P> The PCP web pages at <A HREF="http://pcp.io/">http://pcp.io/</A> cover PCP, PCP GUI and PCP Glider (the native Windows distribution of PCP). +<BR><P><I>Binaries</I> +<P> Pre-built packages for Redhat/SuSE, Debian/Ubuntu, Windows, MacOSX and Solaris can be downloaded from the PCP website at <A HREF="ftp://ftp.pcp.io/projects/pcp/download/">ftp://ftp.pcp.io/projects/pcp/download/</A>. +<BR><P><I>Source Code</I> +<P> GIT: git://git.pcp.io/pcp.git. +<P> GIT web: <A HREF="http://git.pcp.io/cgi-bin/gitweb.cgi?p=pcp.git">http://git.pcp.io/cgi-bin/gitweb.cgi?p=pcp.git</A>. +<P> Compressed source tarballs can be found alongside the binary packages above. +<P> +<HR> +<CENTER> +<TABLE WIDTH=100% BORDER=0 CELLPADDING=0 CELLSPACING=0> + <TR> <TD WIDTH=50%><P>Copyright © 2007-2010 <A HREF="http://www.aconex.com/"><FONT COLOR="#000060">Aconex</FONT></A><BR>Copyright © 2000-2004 <A HREF="http://www.sgi.com/"><FONT COLOR="#000060">Silicon Graphics Inc</FONT></P></TD> + <TD WIDTH=50%><P ALIGN=RIGHT><A HREF="http://pcp.io/"><FONT COLOR="#000060">PCP Site</FONT></A><BR>Copyright © 2012-2014 <A HREF="http://www.redhat.com/"><FONT COLOR="#000060">Red Hat</FONT></P></TD> </TR> +</TABLE> +</CENTER> +</BODY> +</HTML> diff --git a/man/html/cpuperf/GNUmakefile b/man/html/cpuperf/GNUmakefile new file mode 100644 index 0000000..76c7ab5 --- /dev/null +++ b/man/html/cpuperf/GNUmakefile @@ -0,0 +1,29 @@ +TOPDIR = ../../.. +include $(TOPDIR)/src/include/builddefs + +BUNDLE = cpuperf +BINTAR = $(BUNDLE).tar.gz +PCPLOGS = $(shell echo *.0 *.meta *.index) +CONFIGS = +LSRCFILES = $(PCPLOGS) $(CONFIGS) +LDIRT = $(BINTAR) manifest + +default: $(BINTAR) + +$(BINTAR): $(PCPLOGS) $(CONFIGS) + @ CDIR=`pwd`; cd ..; rm -f manifest; \ + for f in `echo $^`; do \ + echo $(BUNDLE)/$$f >> $$CDIR/manifest; \ + done; \ + $(TAR) -T $$CDIR/manifest -cf - | $(ZIP) --best > $$CDIR/$(BINTAR); \ + echo "Created $(BINTAR)" + +include $(BUILDRULES) + +install install-dev: default + $(INSTALL) -m 755 -d $(PCP_DEMOS_DIR)/tutorials + $(INSTALL) -m 644 $(BINTAR) $(PCP_DEMOS_DIR)/tutorials/$(BINTAR) + +default_pcp : default + +install_pcp : install diff --git a/man/html/cpuperf/babylon.percpu.0 b/man/html/cpuperf/babylon.percpu.0 Binary files differnew file mode 100644 index 0000000..6c5fddd --- /dev/null +++ b/man/html/cpuperf/babylon.percpu.0 diff --git a/man/html/cpuperf/babylon.percpu.index b/man/html/cpuperf/babylon.percpu.index Binary files differnew file mode 100644 index 0000000..938e63d --- /dev/null +++ b/man/html/cpuperf/babylon.percpu.index diff --git a/man/html/cpuperf/babylon.percpu.meta b/man/html/cpuperf/babylon.percpu.meta Binary files differnew file mode 100644 index 0000000..2eed638 --- /dev/null +++ b/man/html/cpuperf/babylon.percpu.meta diff --git a/man/html/cpuperf/moomba.pmkstat.0 b/man/html/cpuperf/moomba.pmkstat.0 Binary files differnew file mode 100644 index 0000000..e9ac65c --- /dev/null +++ b/man/html/cpuperf/moomba.pmkstat.0 diff --git a/man/html/cpuperf/moomba.pmkstat.index b/man/html/cpuperf/moomba.pmkstat.index Binary files differnew file mode 100644 index 0000000..5f165fd --- /dev/null +++ b/man/html/cpuperf/moomba.pmkstat.index diff --git a/man/html/cpuperf/moomba.pmkstat.meta b/man/html/cpuperf/moomba.pmkstat.meta Binary files differnew file mode 100644 index 0000000..457b35a --- /dev/null +++ b/man/html/cpuperf/moomba.pmkstat.meta diff --git a/man/html/credits.html b/man/html/credits.html new file mode 100644 index 0000000..f29780d --- /dev/null +++ b/man/html/credits.html @@ -0,0 +1,43 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> +<HTML> +<HEAD> + <meta http-equiv="content-type" content="text/html; charset=utf-8"> + <meta http-equiv="content-style-type" content="text/css"> + <link href="pcpdoc.css" rel="stylesheet" type="text/css"> + <link href="images/pcp.ico" rel="icon" type="image/ico"> + <TITLE>PCP Credits</TITLE> +</HEAD> +<BODY LANG="en-AU" TEXT="#000060" DIR="LTR"> +<TABLE WIDTH=100% BORDER=0 CELLPADDING=0 CELLSPACING=0 STYLE="page-break-before: always"> + <TR> <TD WIDTH=64 HEIGHT=64><A HREF="http://pcp.io/"><IMG SRC="images/pcpicon.png" NAME="pcpicon" ALIGN=TOP WIDTH=64 HEIGHT=64 BORDER=0></A></TD> + <TD WIDTH=1><P> </P></TD> + <TD WIDTH=500><P VALIGN=MIDDLE ALIGN=LEFT><A HREF="index.html"><FONT COLOR="#cc0000">Home</FONT></A> · <A HREF="lab.pmchart.html"><FONT COLOR="#cc0000">Charts</FONT></A> · <A HREF="timecontrol.html"><FONT COLOR="#cc0000">Time Control</FONT></A></P></TD> + </TR> +</TABLE> +<H1 ALIGN=CENTER STYLE="margin-top: 0.48cm; margin-bottom: 0.32cm"><FONT SIZE=7>Credits</FONT></H1> +<TABLE WIDTH=100% BORDER=0 CELLPADDING=0 CELLSPACING=0 BGCOLOR="#e2e2e2"> + <TR><TD WIDTH=100% BGCOLOR="#081c59"><P ALIGN=LEFT><FONT SIZE=5 COLOR="#ffffff"><B>PCP Development</B></FONT></P></TD></TR> +</TABLE> +<P>PCP originated on the SGI IRIX platform, with an initial team of developers of the early years working on the proprietary version of PCP. Thanks to these folk for the early years and what largely remains the core architecture of PCP.</P> +<P>Since PCP was open sourced, there have been many contributors from many individuals, organisations and companies (Aconex, Debian, IBM, Intel, Red Hat, SuSE, to name just a few).</P> + +<P>The pmchart graphical display also makes extensive use of the services offered by two excellent software libraries.<UL><LI><A HREF="http://www.trolltech.com/qt/">Qt</A>: Cross-Platform Rich Client Development Framework +<LI><A HREF="http://qwt.sourceforge.net/">QWT</A>: Qt Widgets for Technical Applications</UL> + +<P><BR></P> +<TABLE WIDTH=100% BORDER=0 CELLPADDING=0 CELLSPACING=0 BGCOLOR="#e2e2e2"> + <TR><TD WIDTH=100% BGCOLOR="#081c59"><P ALIGN=LEFT><FONT SIZE=5 COLOR="#ffffff"><B>PCP Glider Development</B></FONT></P></TD></TR> +</TABLE> +<P>The PCP Glider project, the native PCP toolkit for Windows, exists thanks to the efforts of several individuals and groups.</P> +<P>The initial port of PCP to Windows used the Cygwin POSIX emulation layer. This was (several years) later abandoned for a number of practical reasons, and replaced with a version that builds on the efforts of the <A HREF="http://strawberryperl.com/">Strawberry Perl</A> and <A HREF="http://mingw.org/">MinGW</A> communities.</P> +<P>Many thanks to Curtis Jewell from the Strawberry Perl crew for his aid many times in helping with and improving this distribution which forms the base of PCP Glider.</P> +<P><BR></P> +<HR> +<CENTER> +<TABLE WIDTH=100% BORDER=0 CELLPADDING=0 CELLSPACING=0> + <TR> <TD WIDTH=50%><P>Copyright © 2007-2010 <A HREF="http://www.aconex.com/"><FONT COLOR="#000060">Aconex</FONT></A><BR>Copyright © 2000-2004 <A HREF="http://www.sgi.com/"><FONT COLOR="#000060">Silicon Graphics Inc</FONT></P></TD> + <TD WIDTH=50%><P ALIGN=RIGHT><A HREF="http://pcp.io/"><FONT COLOR="#000060">PCP Site</FONT></A><BR>Copyright © 2012-2014 <A HREF="http://www.redhat.com/"><FONT COLOR="#000060">Red Hat</FONT></P></TD> </TR> +</TABLE> +</CENTER> +</BODY> +</HTML> diff --git a/man/html/diskmodel/GNUmakefile b/man/html/diskmodel/GNUmakefile new file mode 100644 index 0000000..1378937 --- /dev/null +++ b/man/html/diskmodel/GNUmakefile @@ -0,0 +1,32 @@ +TOPDIR = ../../.. +include $(TOPDIR)/src/include/builddefs + +BUNDLE = diskmodel +BINTAR = $(BUNDLE).tar.gz +PCPLOGS = $(shell echo *.0 *.meta *.index) +CONFIGS = model.fio model.folio model.view +MODELS = model.pl model.xls nasread.out naswrite.out +LSRCFILES = $(PCPLOGS) $(CONFIGS) $(MODELS) +LDIRT = $(BINTAR) manifest + +default: $(BINTAR) + +$(BINTAR): $(PCPLOGS) $(CONFIGS) $(MODELS) + @ CDIR=`pwd`; cd ..; rm -f manifest; \ + for f in `echo $^`; do \ + echo $(BUNDLE)/$$f >> $$CDIR/manifest; \ + done; \ + $(TAR) -T $$CDIR/manifest -cf - | $(ZIP) --best > $$CDIR/$(BINTAR); \ + echo "Created $(BINTAR)" + +include $(BUILDRULES) + +install install-dev: default + $(INSTALL) -m 755 -d $(PCP_DEMOS_DIR)/tutorials + $(INSTALL) -m 644 $(BINTAR) $(PCP_DEMOS_DIR)/tutorials/$(BINTAR) + $(INSTALL) -m 755 -d $(PCP_BOOKS_DIR)/html/$(BUNDLE) + $(INSTALL) -m 644 $(MODELS) $(CONFIGS) $(PCP_BOOKS_DIR)/html/$(BUNDLE) + +default_pcp : default + +install_pcp : install diff --git a/man/html/diskmodel/dbdata.0 b/man/html/diskmodel/dbdata.0 Binary files differnew file mode 100644 index 0000000..a0bbce9 --- /dev/null +++ b/man/html/diskmodel/dbdata.0 diff --git a/man/html/diskmodel/dbdata.index b/man/html/diskmodel/dbdata.index Binary files differnew file mode 100644 index 0000000..7e72345 --- /dev/null +++ b/man/html/diskmodel/dbdata.index diff --git a/man/html/diskmodel/dbdata.meta b/man/html/diskmodel/dbdata.meta Binary files differnew file mode 100644 index 0000000..ce13ca7 --- /dev/null +++ b/man/html/diskmodel/dbdata.meta diff --git a/man/html/diskmodel/model.fio b/man/html/diskmodel/model.fio new file mode 100644 index 0000000..00a32b9 --- /dev/null +++ b/man/html/diskmodel/model.fio @@ -0,0 +1,96 @@ +# fio job file - modeling NAS/DB I/O patterns based on a number +# of PCP disk metrics (iops, throughput, queuelen) from our mel +# production storage on 2010/07/14. +# +# Basic usage: +# [ args="--latency-log --bandwidth-log" ] +# fio $args --output=nas_read_analysis.log --section=nas_read_load model.fio & +# fio $args --output=nas_write_analysis.log --section=nas_write_load model.fio & +# wait +# fio $args --output=db_log_analysis.log --section=db_log_analysis model.fio & +# fio $args --output=db_analysis.log --section=db_load model.fio & +# wait +# fio $args --output=bi_log_analysis.log --section=bi_log_analysis model.fio & +# fio $args --output=bi_analysis.log --section=bi_load model.fio & +# wait +# + +[global] +directory=/iscsi +size=2G +numjobs=4 +runtime=300 +time_based + +[nas_read_load] +description=NAS reads workload model +ioscheduler=deadline +readwrite=read +filesize=150M +rate=2521k +bssplit=4k/5:8k/5:30k/80:60k/5:64k/5 +ioengine=psync # make sure we do no seeks, NFS wont be +direct=1 +iodepth=4 +openfiles=4 # model using number of active nfsd threads +nrfiles=4 + +[nas_write_load] +description=NAS writes workload model +ioscheduler=deadline +readwrite=write +filesize=150M +rate=1233k +bssplit=4k/5:8k/5:30k/80:60k/5:64k/5 +fsync_on_close=1 # application doing per-file (rename+)fsync +ioengine=psync # make sure we do no seeks, NFS wont be +direct=1 +iodepth=4 +openfiles=4 # model using number of active nfsd threads +nrfiles=4 + +[db_load] +description=Database (interactive) workload model +ioscheduler=noop +overwrite=1 +readwrite=rw # mixed sequential reads and writes +rwmixread=64 # 64% read, 36% write ratio based on averages +direct=1 +iodepth=2 # based on average queuelen +filesize=150M +rate_iops=145,82 +bssplit=4k/5,4k/5:8k/90,8k/90:16k/5,16k/5 +ioengine=psync +iodepth=2 +openfiles=1 +nrfiles=1 + +[bi_load] +description=Database (business intelligence) workload model +ioscheduler=noop +overwrite=1 +readwrite=rw # mixed sequential reads and writes +rwmixread=93 # 93% read, 7% write ratio based on averages +direct=1 +filesize=150M +rate_iops=864,67 +bssplit=4k/4,4k/4:48k/90,8k/96:64k/5,:128k/1, +ioengine=psync +iodepth=8 +openfiles=1 +nrfiles=1 + +[log_load] +description=Database log writes (background) workload model +ioscheduler=noop +overwrite=1 +readwrite=write # only writes in this load +direct=1 +ioengine=psync +iodepth=4 +filesize=100M +bs=64k +thinktime=10000000 +thinktime_blocks=150 +nrfiles=1 +numjobs=1 diff --git a/man/html/diskmodel/model.folio b/man/html/diskmodel/model.folio new file mode 100644 index 0000000..6da60ab --- /dev/null +++ b/man/html/diskmodel/model.folio @@ -0,0 +1,10 @@ +PCPFolio +Version: 1 +# use pmafm(1) to process this PCP archive folio +# +Created: on verge at Wed Jul 28 12:36:42 EST 2010 +Creator: pmchart model.view +# Host Basename +# +Archive: db2 ./dbdata +Archive: nas2 ./nasdata diff --git a/man/html/diskmodel/model.pl b/man/html/diskmodel/model.pl new file mode 100644 index 0000000..58f2f20 --- /dev/null +++ b/man/html/diskmodel/model.pl @@ -0,0 +1,164 @@ +# +# Script generating a summary spreadsheet from production data +# +use strict; +use warnings; +use PCP::LogSummary; +use Spreadsheet::WriteExcel; + +my $workbook = Spreadsheet::WriteExcel->new('model.xls'); +my $naslog = "nasdata"; # PCP archive for NAS host +my $dblog = "dbdata"; # PCP archive for database host + +# Setup some spreadsheet metadata - fonts, colors, etc +# +my $heading = $workbook->add_format(); +$heading->set_bold(); +$heading->set_italic(); +my $subheading = $workbook->add_format(); +$subheading->set_italic(); +$subheading->set_bg_color('silver'); +my $centercolumn = $workbook->add_format(); +$centercolumn->set_align('center'); +my $centerboldcolumn = $workbook->add_format(); +$centerboldcolumn->set_align('center'); +$centerboldcolumn->set_bold(); + +# Create a worksheet, configure a few columns +# +my $sheet = $workbook->add_worksheet(); +$sheet->set_column('A:A', 28); # metric names column +$sheet->set_column('B:B', 6); # instances column +$sheet->set_column('C:C', 14); # column for raw values +$sheet->set_column('D:D', 12); # metrics units column +$sheet->set_column('E:E', 18); # average size column +$sheet->set_column('F:F', 14); # read/write ratio column + +sub iops_ratio +{ + my ( $reads, $writes ) = @_; + my $total = $writes + $reads; + $writes /= $total; + $writes *= 100; + $writes = int($writes + 0.5); + $reads /= $total; + $reads *= 100; + $reads = int($reads + 0.5); + return "$reads:$writes"; +} + +# Write data - starting at row 0 and column 0, moving across and down +# +my $row = 0; +$sheet->write($row, 0, 'NAS (NFS) Workload Modelling', $heading); +$row++; +$sheet->write($row, 0, 'Metrics', $subheading); +$sheet->write($row, 1, '', $subheading); +$sheet->write($row, 2, '', $subheading); +$sheet->write($row, 3, '', $subheading); +$sheet->write($row, 4, 'Average I/O Size', $subheading); +$sheet->write($row, 5, 'I/O Ratio', $subheading); + +my @nas = ('disk.dev.read', 'disk.dev.read_bytes', 'disk.dev.write', + 'disk.dev.write_bytes', 'disk.dev.avactive'); +my $nasIO = PCP::LogSummary->new($naslog, \@nas, '@11:00', '@12:00'); + +foreach my $m ( @nas ) { + my $device = 'sdi'; + my $metric = metric_instance($m, $device); + $row++; + $sheet->write($row, 0, $m); + $sheet->write($row, 1, "[$device]"); + $sheet->write($row, 2, $$nasIO{$metric}{'average'}, $centercolumn); + $sheet->write($row, 3, $$nasIO{$metric}{'units'}); + if ($m eq 'disk.dev.read') { + my $thruput = metric_instance('disk.dev.read_bytes', $device); + my $result = $$nasIO{$thruput}{'average'} / $$nasIO{$metric}{'average'}; + $sheet->write($row, 4, $result, $centerboldcolumn); + + my $writers = metric_instance('disk.dev.write', $device); + my $writes = $$nasIO{$writers}{'average'}; + my $reads = $$nasIO{$metric}{'average'}; + $sheet->write($row, 5, iops_ratio($reads, $writes), $centerboldcolumn); + } + if ($m eq 'disk.dev.write') { + my $thruput = metric_instance('disk.dev.write_bytes', $device); + my $result = $$nasIO{$thruput}{'average'} / $$nasIO{$metric}{'average'}; + $sheet->write($row, 4, $result, $centerboldcolumn); + } +} +$row += 2; + +$sheet->write($row, 0, 'DB (Interactive) Workload Modelling', $heading); +$row++; +$sheet->write($row, 0, 'Metrics', $subheading); +$sheet->write($row, 1, '', $subheading); +$sheet->write($row, 2, '', $subheading); +$sheet->write($row, 3, '', $subheading); +$sheet->write($row, 4, 'Average I/O Size', $subheading); +$sheet->write($row, 5, 'I/O Ratio', $subheading); + +my @db = ('disk.dev.read', 'disk.dev.read_bytes', 'disk.dev.write', + 'disk.dev.write_bytes', 'disk.dev.queue_len', 'disk.dev.idle'); +my $dbIO = PCP::LogSummary->new($dblog, \@db, '@11:10', '@11:55'); + +foreach my $m ( @db ) { + my $device = 'F:'; + my $metric = metric_instance($m, $device); + $row++; + $sheet->write($row, 0, $m); + $sheet->write($row, 1, "[$device]"); + $sheet->write($row, 2, $$dbIO{$metric}{'average'}, $centercolumn); + $sheet->write($row, 3, $$dbIO{$metric}{'units'}); + if ($m eq 'disk.dev.read') { + my $thruput = metric_instance('disk.dev.read_bytes', $device); + my $result = $$dbIO{$thruput}{'average'} / $$dbIO{$metric}{'average'}; + $sheet->write($row, 4, $result, $centerboldcolumn); + + my $writers = metric_instance('disk.dev.write', $device); + my $writes = $$dbIO{$writers}{'average'}; + my $reads = $$dbIO{$metric}{'average'}; + $sheet->write($row, 5, iops_ratio($reads, $writes), $centerboldcolumn); + } + if ($m eq 'disk.dev.write') { + my $thruput = metric_instance('disk.dev.write_bytes', $device); + my $result = $$dbIO{$thruput}{'average'} / $$dbIO{$metric}{'average'}; + $sheet->write($row, 4, $result, $centerboldcolumn); + } +} +$row += 2; + +$sheet->write($row, 0, 'DB (Business Intel) Workload Modelling', $heading); +$row++; +$sheet->write($row, 0, 'Metrics', $subheading); +$sheet->write($row, 1, '', $subheading); +$sheet->write($row, 2, '', $subheading); +$sheet->write($row, 3, '', $subheading); +$sheet->write($row, 4, 'Average I/O Size', $subheading); +$sheet->write($row, 5, 'I/O Ratio', $subheading); + +my $dbBI = PCP::LogSummary->new($dblog, \@db, '@11:00', '@11:05'); + +foreach my $m ( @db ) { + my $device = 'F:'; + my $metric = metric_instance($m, $device); + $row++; + $sheet->write($row, 0, $m); + $sheet->write($row, 1, "[$device]"); + $sheet->write($row, 2, $$dbBI{$metric}{'average'}, $centercolumn); + $sheet->write($row, 3, $$dbBI{$metric}{'units'}); + if ($m eq 'disk.dev.read') { + my $thruput = metric_instance('disk.dev.read_bytes', $device); + my $result = $$dbBI{$thruput}{'average'} / $$dbBI{$metric}{'average'}; + $sheet->write($row, 4, $result, $centerboldcolumn); + my $writers = metric_instance('disk.dev.write', $device); + my $writes = $$dbBI{$writers}{'average'}; + my $reads = $$dbBI{$metric}{'average'}; + $sheet->write($row, 5, iops_ratio($reads, $writes), $centerboldcolumn); + } + if ($m eq 'disk.dev.write') { + my $thruput = metric_instance('disk.dev.write_bytes', $device); + my $result = $$dbBI{$thruput}{'average'} / $$dbBI{$metric}{'average'}; + $sheet->write($row, 4, $result, $centerboldcolumn); + } +} diff --git a/man/html/diskmodel/model.view b/man/html/diskmodel/model.view new file mode 100644 index 0000000..f46e38e --- /dev/null +++ b/man/html/diskmodel/model.view @@ -0,0 +1,23 @@ +#kmchart +version 1 + +view "Database" + +chart title "Data Device IOPs [db2]" style stacking + plot legend "Reads" color yellow host db2 metric disk.dev.read instance F: + plot legend "Writes" color blue host db2 metric disk.dev.write instance F: + +chart title "Data Device Throughput [db2]" style stacking + plot legend "Read rate" color yellow host db2 metric disk.dev.read_bytes instance F: + plot legend "Write rate" color blue host db2 metric disk.dev.write_bytes instance F: + +view "Filestore" + +chart title "Filestore Device IOPs [nas2]" style stacking + plot legend "Reads" color yellow host nas2 metric disk.dev.read instance sdi + plot legend "Writes" color blue host nas2 metric disk.dev.write instance sdi + +chart title "Filestore Device Throughput [nas2]" style stacking + plot legend "Read rate" color yellow host nas2 metric disk.dev.read_bytes instance sdi + plot legend "Write rate" color blue host nas2 metric disk.dev.write_bytes instance sdi + diff --git a/man/html/diskmodel/model.xls b/man/html/diskmodel/model.xls Binary files differnew file mode 100644 index 0000000..83c4d80 --- /dev/null +++ b/man/html/diskmodel/model.xls diff --git a/man/html/diskmodel/nasdata.0 b/man/html/diskmodel/nasdata.0 Binary files differnew file mode 100644 index 0000000..56da9de --- /dev/null +++ b/man/html/diskmodel/nasdata.0 diff --git a/man/html/diskmodel/nasdata.index b/man/html/diskmodel/nasdata.index Binary files differnew file mode 100644 index 0000000..fcf001d --- /dev/null +++ b/man/html/diskmodel/nasdata.index diff --git a/man/html/diskmodel/nasdata.meta b/man/html/diskmodel/nasdata.meta Binary files differnew file mode 100644 index 0000000..cc6a0cd --- /dev/null +++ b/man/html/diskmodel/nasdata.meta diff --git a/man/html/diskmodel/nasread.out b/man/html/diskmodel/nasread.out new file mode 100644 index 0000000..37bec93 --- /dev/null +++ b/man/html/diskmodel/nasread.out @@ -0,0 +1,62 @@ +nas_read_load: (groupid=0, jobs=1): err= 0: pid=4109 + Description : [NAS reads workload model] + read : io=739MB, bw=2,523KB/s, iops=78, runt=300003msec + clat (usec): min=190, max=176K, avg=3343.45, stdev=2480.24 + lat (usec): min=191, max=176K, avg=3344.00, stdev=2480.24 + bw (KB/s) : min= 2301, max= 2808, per=25.02%, avg=2525.62, stdev=40.32 + cpu : usr=0.45%, sys=0.23%, ctx=45630, majf=0, minf=59 + IO depths : 1=100.0%, 2=0.0%, 4=0.0%, 8=0.0%, 16=0.0%, 32=0.0%, >=64=0.0% + submit : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0% + complete : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0% + issued r/w: total=23441/0, short=0/0 + lat (usec): 250=0.20%, 500=2.01%, 750=7.90%, 1000=7.59% + lat (msec): 2=9.44%, 4=35.22%, 10=36.87%, 20=0.56%, 50=0.20% + lat (msec): 250=0.01% +nas_read_load: (groupid=0, jobs=1): err= 0: pid=4110 + Description : [NAS reads workload model] + read : io=739MB, bw=2,523KB/s, iops=78, runt=300009msec + clat (usec): min=180, max=133K, avg=3369.74, stdev=2422.27 + lat (usec): min=180, max=133K, avg=3370.26, stdev=2422.26 + bw (KB/s) : min= 2125, max= 2984, per=25.02%, avg=2525.62, stdev=46.79 + cpu : usr=0.43%, sys=0.23%, ctx=45893, majf=0, minf=58 + IO depths : 1=100.0%, 2=0.0%, 4=0.0%, 8=0.0%, 16=0.0%, 32=0.0%, >=64=0.0% + submit : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0% + complete : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0% + issued r/w: total=23434/0, short=0/0 + lat (usec): 250=0.16%, 500=2.11%, 750=7.41%, 1000=7.53% + lat (msec): 2=9.76%, 4=34.88%, 10=37.32%, 20=0.61%, 50=0.21% + lat (msec): 100=0.01%, 250=0.01% +nas_read_load: (groupid=0, jobs=1): err= 0: pid=4111 + Description : [NAS reads workload model] + read : io=739MB, bw=2,524KB/s, iops=78, runt=300001msec + clat (usec): min=185, max=65,061, avg=3316.17, stdev=2339.06 + lat (usec): min=185, max=65,062, avg=3316.69, stdev=2339.06 + bw (KB/s) : min= 2335, max= 2765, per=25.02%, avg=2525.66, stdev=39.46 + cpu : usr=0.45%, sys=0.22%, ctx=45733, majf=0, minf=58 + IO depths : 1=100.0%, 2=0.0%, 4=0.0%, 8=0.0%, 16=0.0%, 32=0.0%, >=64=0.0% + submit : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0% + complete : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0% + issued r/w: total=23414/0, short=0/0 + lat (usec): 250=0.15%, 500=2.08%, 750=8.24%, 1000=8.01% + lat (msec): 2=10.06%, 4=34.33%, 10=36.27%, 20=0.61%, 50=0.23% + lat (msec): 100=0.01% +nas_read_load: (groupid=0, jobs=1): err= 0: pid=4112 + Description : [NAS reads workload model] + read : io=739MB, bw=2,523KB/s, iops=77, runt=300008msec + clat (usec): min=177, max=180K, avg=3341.21, stdev=2583.65 + lat (usec): min=177, max=180K, avg=3341.75, stdev=2583.65 + bw (KB/s) : min= 2330, max= 2730, per=25.02%, avg=2525.71, stdev=41.97 + cpu : usr=0.45%, sys=0.23%, ctx=45816, majf=0, minf=58 + IO depths : 1=100.0%, 2=0.0%, 4=0.0%, 8=0.0%, 16=0.0%, 32=0.0%, >=64=0.0% + submit : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0% + complete : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0% + issued r/w: total=23393/0, short=0/0 + lat (usec): 250=0.17%, 500=2.10%, 750=8.34%, 1000=7.81% + lat (msec): 2=9.65%, 4=34.22%, 10=36.91%, 20=0.56%, 50=0.23% + lat (msec): 100=0.01%, 250=0.01% + +Run status group 0 (all jobs): + READ: io=2,957MB, aggrb=10,094KB/s, minb=2,584KB/s, maxb=2,584KB/s, mint=300001msec, maxt=300009msec + +Disk stats (read/write): + sdh: ios=96851/85786, merge=580/357, ticks=315854/1940893, in_queue=2256741, util=73.11% diff --git a/man/html/diskmodel/naswrite.out b/man/html/diskmodel/naswrite.out new file mode 100644 index 0000000..b72b4c6 --- /dev/null +++ b/man/html/diskmodel/naswrite.out @@ -0,0 +1,62 @@ +nas_write_load: (groupid=0, jobs=1): err= 0: pid=4103 + Description : [NAS writes workload model] + write: io=361MB, bw=1,233KB/s, iops=37, runt=300026msec + clat (usec): min=276, max=1,325K, avg=2721.65, stdev=47070.32 + lat (usec): min=277, max=1,325K, avg=2722.20, stdev=47070.32 + bw (KB/s) : min= 34, max= 4486, per=25.12%, avg=1239.08, stdev=178.78 + cpu : usr=0.07%, sys=0.08%, ctx=22911, majf=0, minf=35 + IO depths : 1=100.0%, 2=0.0%, 4=0.0%, 8=0.0%, 16=0.0%, 32=0.0%, >=64=0.0% + submit : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0% + complete : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0% + issued r/w: total=0/11386, short=0/0 + lat (usec): 500=7.47%, 750=37.05%, 1000=38.94% + lat (msec): 2=15.25%, 4=0.40%, 10=0.40%, 20=0.23%, 50=0.02% + lat (msec): 100=0.07%, 250=0.02%, 500=0.01%, 1000=0.01%, 2000=0.13% +nas_write_load: (groupid=0, jobs=1): err= 0: pid=4104 + Description : [NAS writes workload model] + write: io=361MB, bw=1,233KB/s, iops=37, runt=300019msec + clat (usec): min=246, max=1,339K, avg=2744.08, stdev=47828.98 + lat (usec): min=247, max=1,339K, avg=2744.61, stdev=47828.99 + bw (KB/s) : min= 159, max= 4390, per=25.09%, avg=1237.54, stdev=145.93 + cpu : usr=0.08%, sys=0.09%, ctx=22978, majf=0, minf=36 + IO depths : 1=100.0%, 2=0.0%, 4=0.0%, 8=0.0%, 16=0.0%, 32=0.0%, >=64=0.0% + submit : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0% + complete : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0% + issued r/w: total=0/11375, short=0/0 + lat (usec): 250=0.01%, 500=6.45%, 750=36.13%, 1000=38.38% + lat (msec): 2=17.59%, 4=0.66%, 10=0.37%, 20=0.16%, 50=0.02% + lat (msec): 100=0.07%, 250=0.02%, 2000=0.14% +nas_write_load: (groupid=0, jobs=1): err= 0: pid=4105 + Description : [NAS writes workload model] + write: io=361MB, bw=1,233KB/s, iops=38, runt=300003msec + clat (usec): min=236, max=1,341K, avg=2719.56, stdev=46987.83 + lat (usec): min=236, max=1,341K, avg=2720.10, stdev=46987.83 + bw (KB/s) : min= 4, max= 4525, per=25.11%, avg=1238.19, stdev=173.06 + cpu : usr=0.08%, sys=0.08%, ctx=22919, majf=0, minf=36 + IO depths : 1=100.0%, 2=0.0%, 4=0.0%, 8=0.0%, 16=0.0%, 32=0.0%, >=64=0.0% + submit : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0% + complete : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0% + issued r/w: total=0/11429, short=0/0 + lat (usec): 250=0.02%, 500=7.89%, 750=37.06%, 1000=40.38% + lat (msec): 2=13.08%, 4=0.63%, 10=0.41%, 20=0.27%, 50=0.02% + lat (msec): 100=0.07%, 250=0.02%, 500=0.01%, 1000=0.01%, 2000=0.13% +nas_write_load: (groupid=0, jobs=1): err= 0: pid=4106 + Description : [NAS writes workload model] + write: io=361MB, bw=1,233KB/s, iops=38, runt=300013msec + clat (usec): min=244, max=1,326K, avg=2723.53, stdev=46927.49 + lat (usec): min=245, max=1,326K, avg=2724.08, stdev=46927.49 + bw (KB/s) : min= 177, max= 4412, per=25.09%, avg=1237.60, stdev=146.61 + cpu : usr=0.08%, sys=0.09%, ctx=22951, majf=0, minf=36 + IO depths : 1=100.0%, 2=0.0%, 4=0.0%, 8=0.0%, 16=0.0%, 32=0.0%, >=64=0.0% + submit : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0% + complete : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0% + issued r/w: total=0/11451, short=0/0 + lat (usec): 250=0.02%, 500=7.13%, 750=38.34%, 1000=37.93% + lat (msec): 2=15.12%, 4=0.61%, 10=0.38%, 20=0.21%, 50=0.02% + lat (msec): 100=0.07%, 250=0.04%, 2000=0.14% + +Run status group 0 (all jobs): + WRITE: io=1,445MB, aggrb=4,932KB/s, minb=1,262KB/s, maxb=1,262KB/s, mint=300003msec, maxt=300026msec + +Disk stats (read/write): + sdh: ios=88419/89190, merge=530/442, ticks=290558/2570922, in_queue=2861475, util=73.81% diff --git a/man/html/diskperf/GNUmakefile b/man/html/diskperf/GNUmakefile new file mode 100644 index 0000000..e30070d --- /dev/null +++ b/man/html/diskperf/GNUmakefile @@ -0,0 +1,29 @@ +TOPDIR = ../../.. +include $(TOPDIR)/src/include/builddefs + +BUNDLE = diskperf +BINTAR = $(BUNDLE).tar.gz +PCPLOGS = $(shell echo *.0 *.meta *.index) +CONFIGS = waitio.view +LSRCFILES = $(PCPLOGS) $(CONFIGS) +LDIRT = $(BINTAR) manifest + +default: $(BINTAR) + +$(BINTAR): $(PCPLOGS) $(CONFIGS) + @ CDIR=`pwd`; cd ..; rm -f manifest; \ + for f in `echo $^`; do \ + echo $(BUNDLE)/$$f >> $$CDIR/manifest; \ + done; \ + $(TAR) -T $$CDIR/manifest -cf - | $(ZIP) --best > $$CDIR/$(BINTAR); \ + echo "Created $(BINTAR)" + +include $(BUILDRULES) + +install install-dev: default + $(INSTALL) -m 755 -d $(PCP_DEMOS_DIR)/tutorials + $(INSTALL) -m 644 $(BINTAR) $(PCP_DEMOS_DIR)/tutorials/$(BINTAR) + +default_pcp : default + +install_pcp : install diff --git a/man/html/diskperf/waitio.0 b/man/html/diskperf/waitio.0 Binary files differnew file mode 100644 index 0000000..5c5cc7f --- /dev/null +++ b/man/html/diskperf/waitio.0 diff --git a/man/html/diskperf/waitio.index b/man/html/diskperf/waitio.index Binary files differnew file mode 100644 index 0000000..00c8f6f --- /dev/null +++ b/man/html/diskperf/waitio.index diff --git a/man/html/diskperf/waitio.meta b/man/html/diskperf/waitio.meta Binary files differnew file mode 100644 index 0000000..b577d23 --- /dev/null +++ b/man/html/diskperf/waitio.meta diff --git a/man/html/diskperf/waitio.view b/man/html/diskperf/waitio.view new file mode 100644 index 0000000..d06c1a9 --- /dev/null +++ b/man/html/diskperf/waitio.view @@ -0,0 +1,18 @@ +#pmchart +Version 2.0 host dynamic + +Global width 758 +Global height 470 +Global points 90 + +Chart Title "CPU Utilization" Style utilization + Plot Color #3f3f3f3fbfbf Host * Metric kernel.all.cpu.user + Plot Color #fefe00000000 Host * Metric kernel.all.cpu.sys + Plot Color #ffff3f3fbfbf Host * Metric kernel.all.cpu.sxbrk + Plot Color #e3e3e3e30000 Host * Metric kernel.all.cpu.intr + Plot Color #0000bfbfffff Host * Metric kernel.all.cpu.wait.total + Plot Color #0000ffff0000 Host * Metric kernel.all.cpu.idle +Chart Title "Disk Activity" Style stacking + Plot Color #-cycle Host * Metric disk.all.read + Plot Color #-cycle Host * Metric disk.all.write + diff --git a/man/html/glossary.html b/man/html/glossary.html new file mode 100644 index 0000000..7f015da --- /dev/null +++ b/man/html/glossary.html @@ -0,0 +1,48 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> +<HTML> +<HEAD> + <meta http-equiv="content-type" content="text/html; charset=utf-8"> + <meta http-equiv="content-style-type" content="text/css"> + <link href="pcpdoc.css" rel="stylesheet" type="text/css"> + <link href="images/pcp.ico" rel="icon" type="image/ico"> + <TITLE>PCP Glossary</TITLE> +</HEAD> +<BODY LANG="en-AU" TEXT="#000060" DIR="LTR"> +<TABLE WIDTH=100% BORDER=0 CELLPADDING=0 CELLSPACING=0 STYLE="page-break-before: always"> + <TR> <TD WIDTH=64 HEIGHT=64><FONT COLOR="#000080"><A HREF="http://pcp.io/"><IMG SRC="images/pcpicon.png" NAME="pmcharticon" ALIGN=TOP WIDTH=64 HEIGHT=64 BORDER=0></A></FONT></TD> + <TD WIDTH=1><P> </P></TD> + <TD WIDTH=500><P VALIGN=MIDDLE ALIGN=LEFT><A HREF="index.html"><FONT COLOR="#cc0000">Home</FONT></A> · <A HREF="lab.pmchart.html"><FONT COLOR="#cc0000">Charts</FONT></A> · <A HREF="timecontrol.html"><FONT COLOR="#cc0000">Time Control</FONT></A></P></TD> + </TR> +</TABLE> +<H1 ALIGN=CENTER STYLE="margin-top: 0.48cm; margin-bottom: 0.32cm"><FONT SIZE=7>PCP Glossary</FONT></H1> + +<P><B>archive folio</B> - a collection of PCP <A HREF="#archive">archive logs</A> that can be processed as a group using <I>pmafm</I>.</P> +<P><B><A NAME="archive">archive log</B></A> - a set of physical files containing a collection of <A HREF="#metric">performance metrics</A> from a single <A HREF="#collector">collector system</A>. Archive logs are created by the program <I>pmlogger</I> and may be used with any PCP tools to provide retrospective performance +analysis.</P> +<P><B><A NAME="domain">domain</A> number</B> - each <A HREF="#PMDA">PMDA</A> is assigned a unique identifier (or domain number) that differentiates PMDAs on a collector system. For global consistency, a particular PMDA will be assigned the same domain number for <B>all</B> <A HREF="#collector">collector systems</A> on which it is installed.</P> +<P><B><A NAME="collector">collector system</B></A> - a host upon which a <A HREF="#PMCD">PMCD</A> is running to collect and export <A HREF="#metric">performance metrics</A> using the locally configured <A HREF="#PMDA">PMDAs</A>.</P> +<P><B><A NAME="instance identifiers">instance</B></A> <B>identifiers</B>- some <A HREF="#metric">performance metrics</A> have an associated <B>set</B> of values, e.g. the number of I/O disk operations is a metric, that has a set of values, one per disk spindle on any particular system. Each value is associated with an instance identifier that may be used to differentiate between the values that particular performance metric. Instance identifiers have both an internal (integer) encoding and an external (textual) name.</P> +<P><B>instance domain </B>- the set of <A HREF="#instance">instance identifiers</A> for a single <A HREF="#metric">performance metric</A>. Note that many metrics may share the same instance domain, e.g. per CPU, or per network interface, or per Web server, and the members of an instance domain are likely to be different on different hosts.</P> +<P><B><A NAME="monitor">monitor system</B></A> - a host upon which the PCP monitor tools are installed to support the display, plotting, visualization and automated reasoning, using <A HREF="#metric">performance metrics</A> fetched from a <A HREF="#PMDA">PMDA</A>, or from a PCP archive log.</P> +<P><B><A NAME="PCP">PCP</B></A> - the Performance Co-Pilot toolkit, a suite of tools useful for system level performance management.</P> +<P><B>PCP GUI</B> - utilities that build on the base PCP software providing additional <A HREF="#monitor">monitor</A> functionality, graphical user interface (GUI) tools in particular.</P> +<P><B>PCP Glider</B> - a distribution of software that provides PCP and PCP GUI, along with essential supporting tools and libraries for the Microsoft Windows platform.</P> +<P><B><A NAME="metric">performance metric</B></A> - any performance-related measurement of activity or resource utilization.</P> +<P><B>PDU</B> - Protocol Data Unit. In the PCP context this relates to the encoding of PCP requests into messages for transmission via TCP/IP. PDUs are used to implement all communication between the PCP monitor tools and a <A HREF="#PMCD">PMCD</A>, and between a PMCD and those <A HREF="#PMDA">PMDAs</A> that execute as separate processes.</P> +<P><B><A NAME="PMAPI">PMAPI</B></A> - Performance Metrics Application Programming Interface. The interface by which an application developer gains access to PCP services that relate to the fetching of <A HREF="#metric">performance metrics</A>.</P> +<P><B><A NAME="PMCD">PMCD</B></A> - Performance Metrics Collection Daemon. On each host configured as a PCP <A HREF="#collector">collector</A>, the PMCD services in-coming requests and controls the operation of the <A HREF="#PMDA">PMDAs</A>.</P> +<P><B><A NAME="PMDA">PMDA</B></A> - Performance Metrics Domain Agent. Each PMDA includes the methods necessary to instantiate <A HREF="#metric">performance metrics</A> from a particular subsystem, e.g. the kernel or a RDBMS or an application, and is launched by the <A HREF="#PMCD">PMCD</A>. It is expected that customized PMDAs will be developed for applications with critical performance impacts.</P> +<P><B>PMCS</B> - Performance Metrics Collection System. The infrastructure used to collect, export and transport <A HREF="#metric">performance metrics</A>, usually the combination of <A HREF="#PMCD">PMCD</A>, <A HREF="#PMDA">PMDAs</A> and <A HREF="#PMAPI">PMAPI</A> services.</P> +<P><B>PMNS</B> - Performance Metrics Name Space. A user-visible mapping between external names and PMIDs for <A HREF="#metric">performance metrics</A>. The PMNS is managed by <A HREF="#pmcd">PMCD</A> and its <A HREF="#PMDA">PMDAs</A>.</P> +<P><B>PMID</B> - Performance Metrics Identifier. Every <A HREF="#metric">performance metric</A> has an associated unique identifier. The high-order bits of the PMID encode the corresponding <A HREF="#PMDA">PMDA</A>'s <A HREF="#domain">domain</A> number.</P> + +<P><BR></P> +<HR> +<CENTER> +<TABLE WIDTH=100% BORDER=0 CELLPADDING=0 CELLSPACING=0> + <TR> <TD WIDTH=50%><P>Copyright © 2007-2010 <A HREF="http://www.aconex.com/"><FONT COLOR="#000060">Aconex</FONT></A><BR>Copyright © 2000-2004 <A HREF="http://www.sgi.com/"><FONT COLOR="#000060">Silicon Graphics Inc</FONT></P></TD> + <TD WIDTH=50%><P ALIGN=RIGHT><A HREF="http://pcp.io/"><FONT COLOR="#000060">PCP Site</FONT></A><BR>Copyright © 2012-2014 <A HREF="http://www.redhat.com/"><FONT COLOR="#000060">Red Hat</FONT></P></TD> </TR> +</TABLE> +</CENTER> +</BODY> +</HTML> diff --git a/man/html/gpl.html b/man/html/gpl.html new file mode 100644 index 0000000..c95a9a8 --- /dev/null +++ b/man/html/gpl.html @@ -0,0 +1,372 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> +<HTML> +<HEAD> + <meta http-equiv="content-type" content="text/html; charset=utf-8"> + <meta http-equiv="content-style-type" content="text/css"> + <link href="pcpdoc.css" rel="stylesheet" type="text/css"> + <link href="images/pcp.ico" rel="icon" type="image/ico"> + <TITLE>PCP Manual</TITLE> +</HEAD> +<BODY LANG="en-AU" TEXT="#000060" DIR="LTR"> +<TABLE WIDTH=100% BORDER=0 CELLPADDING=0 CELLSPACING=0 STYLE="page-break-before: always"> + <TR> <TD WIDTH=64 HEIGHT=64><A HREF="http://pcp.io/"><IMG SRC="images/pcpicon.png" NAME="pcpicon" ALIGN=TOP WIDTH=64 HEIGHT=64 BORDER=0></A></TD> + <TD WIDTH=1><P> </P></TD> + <TD WIDTH=500><P VALIGN=MIDDLE ALIGN=LEFT><A HREF="index.html"><FONT COLOR="#cc0000">Home</FONT></A> · <A HREF="lab.pmchart.html"><FONT COLOR="#cc0000">Charts</FONT></A> · <A HREF="timecontrol.html"><FONT COLOR="#cc0000">Time Control</FONT></A></P></TD> + </TR> +</TABLE> +<H1 ALIGN=CENTER STYLE="margin-top: 0.48cm; margin-bottom: 0.32cm"><FONT SIZE=7>GNU General Public License (GPL)</FONT></H1> +<P>The PCP software is copyright SGI, and many portions are copyright by other companies and individuals, including IBM, Aconex, Evostor, Redhat and Ken McDonell, amongst others.</P> +<P>Several libraries in PCP are licensed under the GNU Lesser General Public License (LGPL).</P> +<P>The PCP GUI software is copyright Aconex, with portions copyright Ken McDonell.</P> +<P>The terms of the GNU General Public License version 2 follow.</P> + +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> GNU GENERAL PUBLIC LICENSE</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> Version 2, June 1991</pre> +<pre style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"></pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> Copyright (C) 1989, 1991 Free Software Foundation, Inc.</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> Everyone is permitted to copy and distribute verbatim copies</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> of this license document, but changing it is not allowed.</pre> +<pre style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"></pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> Preamble</pre> +<pre style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"></pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> The licenses for most software are designed to take away your</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> freedom to share and change it. By contrast, the GNU General Public</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> License is intended to guarantee your freedom to share and change free</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> software--to make sure the software is free for all its users. This</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> General Public License applies to most of the Free Software</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> Foundation's software and to any other program whose authors commit to</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> using it. (Some other Free Software Foundation software is covered by</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> the GNU Library General Public License instead.) You can apply it to</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> your programs, too.</pre> +<pre style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"></pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> When we speak of free software, we are referring to freedom, not</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> price. Our General Public Licenses are designed to make sure that you</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> have the freedom to distribute copies of free software (and charge for</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> this service if you wish), that you receive source code or can get it</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> if you want it, that you can change the software or use pieces of it</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> in new free programs; and that you know you can do these things.</pre> +<pre style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"></pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> To protect your rights, we need to make restrictions that forbid</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> anyone to deny you these rights or to ask you to surrender the rights.</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> These restrictions translate to certain responsibilities for you if you</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> distribute copies of the software, or if you modify it.</pre> +<pre style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"></pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> For example, if you distribute copies of such a program, whether</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> gratis or for a fee, you must give the recipients all the rights that</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> you have. You must make sure that they, too, receive or can get the</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> source code. And you must show them these terms so they know their</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> rights.</pre> +<pre style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"></pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> We protect your rights with two steps: (1) copyright the software, and</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> (2) offer you this license which gives you legal permission to copy,</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> distribute and/or modify the software.</pre> +<pre style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"></pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> Also, for each author's protection and ours, we want to make certain</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> that everyone understands that there is no warranty for this free</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> software. If the software is modified by someone else and passed on, we</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> want its recipients to know that what they have is not the original, so</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> that any problems introduced by others will not reflect on the original</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> authors' reputations.</pre> +<pre style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"></pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> Finally, any free program is threatened constantly by software</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> patents. We wish to avoid the danger that redistributors of a free</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> program will individually obtain patent licenses, in effect making the</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> program proprietary. To prevent this, we have made it clear that any</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> patent must be licensed for everyone's free use or not licensed at all.</pre> +<pre style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"></pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> The precise terms and conditions for copying, distribution and</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> modification follow.</pre> +<pre style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"></pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> GNU GENERAL PUBLIC LICENSE</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION</pre> +<pre style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"></pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> 0. This License applies to any program or other work which contains</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> a notice placed by the copyright holder saying it may be distributed</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> under the terms of this General Public License. The "Program", below,</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> refers to any such program or work, and a "work based on the Program"</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> means either the Program or any derivative work under copyright law:</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> that is to say, a work containing the Program or a portion of it,</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> either verbatim or with modifications and/or translated into another</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> language. (Hereinafter, translation is included without limitation in</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> the term "modification".) Each licensee is addressed as "you".</pre> +<pre style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"></pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> Activities other than copying, distribution and modification are not</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> covered by this License; they are outside its scope. The act of</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> running the Program is not restricted, and the output from the Program</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> is covered only if its contents constitute a work based on the</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> Program (independent of having been made by running the Program).</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> Whether that is true depends on what the Program does.</pre> +<pre style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"></pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> 1. You may copy and distribute verbatim copies of the Program's</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> source code as you receive it, in any medium, provided that you</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> conspicuously and appropriately publish on each copy an appropriate</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> copyright notice and disclaimer of warranty; keep intact all the</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> notices that refer to this License and to the absence of any warranty;</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> and give any other recipients of the Program a copy of this License</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> along with the Program.</pre> +<pre style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"></pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> You may charge a fee for the physical act of transferring a copy, and</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> you may at your option offer warranty protection in exchange for a fee.</pre> +<pre style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"></pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> 2. You may modify your copy or copies of the Program or any portion</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> of it, thus forming a work based on the Program, and copy and</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> distribute such modifications or work under the terms of Section 1</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> above, provided that you also meet all of these conditions:</pre> +<pre style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"></pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> a) You must cause the modified files to carry prominent notices</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> stating that you changed the files and the date of any change.</pre> +<pre style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"></pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> b) You must cause any work that you distribute or publish, that in</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> whole or in part contains or is derived from the Program or any</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> part thereof, to be licensed as a whole at no charge to all third</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> parties under the terms of this License.</pre> +<pre style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"></pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> c) If the modified program normally reads commands interactively</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> when run, you must cause it, when started running for such</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> interactive use in the most ordinary way, to print or display an</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> announcement including an appropriate copyright notice and a</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> notice that there is no warranty (or else, saying that you provide</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> a warranty) and that users may redistribute the program under</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> these conditions, and telling the user how to view a copy of this</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> License. (Exception: if the Program itself is interactive but</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> does not normally print such an announcement, your work based on</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> the Program is not required to print an announcement.)</pre> +<pre style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"></pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> These requirements apply to the modified work as a whole. If</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> identifiable sections of that work are not derived from the Program,</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> and can be reasonably considered independent and separate works in</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> themselves, then this License, and its terms, do not apply to those</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> sections when you distribute them as separate works. But when you</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> distribute the same sections as part of a whole which is a work based</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> on the Program, the distribution of the whole must be on the terms of</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> this License, whose permissions for other licensees extend to the</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> entire whole, and thus to each and every part regardless of who wrote it.</pre> +<pre style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"></pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> Thus, it is not the intent of this section to claim rights or contest</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> your rights to work written entirely by you; rather, the intent is to</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> exercise the right to control the distribution of derivative or</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> collective works based on the Program.</pre> +<pre style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"></pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> In addition, mere aggregation of another work not based on the Program</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> with the Program (or with a work based on the Program) on a volume of</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> a storage or distribution medium does not bring the other work under</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> the scope of this License.</pre> +<pre style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"></pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> 3. You may copy and distribute the Program (or a work based on it,</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> under Section 2) in object code or executable form under the terms of</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> Sections 1 and 2 above provided that you also do one of the following:</pre> +<pre style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"></pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> a) Accompany it with the complete corresponding machine-readable</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> source code, which must be distributed under the terms of Sections</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> 1 and 2 above on a medium customarily used for software interchange; or,</pre> +<pre style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"></pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> b) Accompany it with a written offer, valid for at least three</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> years, to give any third party, for a charge no more than your</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> cost of physically performing source distribution, a complete</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> machine-readable copy of the corresponding source code, to be</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> distributed under the terms of Sections 1 and 2 above on a medium</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> customarily used for software interchange; or,</pre> +<pre style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"></pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> c) Accompany it with the information you received as to the offer</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> to distribute corresponding source code. (This alternative is</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> allowed only for noncommercial distribution and only if you</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> received the program in object code or executable form with such</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> an offer, in accord with Subsection b above.)</pre> +<pre style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"></pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> The source code for a work means the preferred form of the work for</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> making modifications to it. For an executable work, complete source</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> code means all the source code for all modules it contains, plus any</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> associated interface definition files, plus the scripts used to</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> control compilation and installation of the executable. However, as a</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> special exception, the source code distributed need not include</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> anything that is normally distributed (in either source or binary</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> form) with the major components (compiler, kernel, and so on) of the</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> operating system on which the executable runs, unless that component</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> itself accompanies the executable.</pre> +<pre style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"></pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> If distribution of executable or object code is made by offering</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> access to copy from a designated place, then offering equivalent</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> access to copy the source code from the same place counts as</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> distribution of the source code, even though third parties are not</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> compelled to copy the source along with the object code.</pre> +<pre style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"></pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> 4. You may not copy, modify, sublicense, or distribute the Program</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> except as expressly provided under this License. Any attempt</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> otherwise to copy, modify, sublicense or distribute the Program is</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> void, and will automatically terminate your rights under this License.</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> However, parties who have received copies, or rights, from you under</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> this License will not have their licenses terminated so long as such</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> parties remain in full compliance.</pre> +<pre style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"></pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> 5. You are not required to accept this License, since you have not</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> signed it. However, nothing else grants you permission to modify or</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> distribute the Program or its derivative works. These actions are</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> prohibited by law if you do not accept this License. Therefore, by</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> modifying or distributing the Program (or any work based on the</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> Program), you indicate your acceptance of this License to do so, and</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> all its terms and conditions for copying, distributing or modifying</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> the Program or works based on it.</pre> +<pre style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"></pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> 6. Each time you redistribute the Program (or any work based on the</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> Program), the recipient automatically receives a license from the</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> original licensor to copy, distribute or modify the Program subject to</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> these terms and conditions. You may not impose any further</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> restrictions on the recipients' exercise of the rights granted herein.</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> You are not responsible for enforcing compliance by third parties to</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> this License.</pre> +<pre style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"></pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> 7. If, as a consequence of a court judgment or allegation of patent</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> infringement or for any other reason (not limited to patent issues),</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> conditions are imposed on you (whether by court order, agreement or</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> otherwise) that contradict the conditions of this License, they do not</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> excuse you from the conditions of this License. If you cannot</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> distribute so as to satisfy simultaneously your obligations under this</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> License and any other pertinent obligations, then as a consequence you</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> may not distribute the Program at all. For example, if a patent</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> license would not permit royalty-free redistribution of the Program by</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> all those who receive copies directly or indirectly through you, then</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> the only way you could satisfy both it and this License would be to</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> refrain entirely from distribution of the Program.</pre> +<pre style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"></pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> If any portion of this section is held invalid or unenforceable under</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> any particular circumstance, the balance of the section is intended to</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> apply and the section as a whole is intended to apply in other</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> circumstances.</pre> +<pre style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"></pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> It is not the purpose of this section to induce you to infringe any</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> patents or other property right claims or to contest validity of any</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> such claims; this section has the sole purpose of protecting the</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> integrity of the free software distribution system, which is</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> implemented by public license practices. Many people have made</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> generous contributions to the wide range of software distributed</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> through that system in reliance on consistent application of that</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> system; it is up to the author/donor to decide if he or she is willing</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> to distribute software through any other system and a licensee cannot</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> impose that choice.</pre> +<pre style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"></pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> This section is intended to make thoroughly clear what is believed to</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> be a consequence of the rest of this License.</pre> +<pre style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"></pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> 8. If the distribution and/or use of the Program is restricted in</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> certain countries either by patents or by copyrighted interfaces, the</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> original copyright holder who places the Program under this License</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> may add an explicit geographical distribution limitation excluding</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> those countries, so that distribution is permitted only in or among</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> countries not thus excluded. In such case, this License incorporates</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> the limitation as if written in the body of this License.</pre> +<pre style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"></pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> 9. The Free Software Foundation may publish revised and/or new versions</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> of the General Public License from time to time. Such new versions will</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> be similar in spirit to the present version, but may differ in detail to</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> address new problems or concerns.</pre> +<pre style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"></pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> Each version is given a distinguishing version number. If the Program</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> specifies a version number of this License which applies to it and "any</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> later version", you have the option of following the terms and conditions</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> either of that version or of any later version published by the Free</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> Software Foundation. If the Program does not specify a version number of</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> this License, you may choose any version ever published by the Free Software</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> Foundation.</pre> +<pre style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"></pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> 10. If you wish to incorporate parts of the Program into other free</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> programs whose distribution conditions are different, write to the author</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> to ask for permission. For software which is copyrighted by the Free</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> Software Foundation, write to the Free Software Foundation; we sometimes</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> make exceptions for this. Our decision will be guided by the two goals</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> of preserving the free status of all derivatives of our free software and</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> of promoting the sharing and reuse of software generally.</pre> +<pre style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"></pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> NO WARRANTY</pre> +<pre style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"></pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> REPAIR OR CORRECTION.</pre> +<pre style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"></pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> POSSIBILITY OF SUCH DAMAGES.</pre> +<pre style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"></pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> END OF TERMS AND CONDITIONS</pre> +<pre style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"></pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> Appendix: How to Apply These Terms to Your New Programs</pre> +<pre style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"></pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> If you develop a new program, and you want it to be of the greatest</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> possible use to the public, the best way to achieve this is to make it</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> free software which everyone can redistribute and change under these terms.</pre> +<pre style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"></pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> To do so, attach the following notices to the program. It is safest</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> to attach them to the start of each source file to most effectively</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> convey the exclusion of warranty; and each file should have at least</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> the "copyright" line and a pointer to where the full notice is found.</pre> +<pre style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"></pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> <one line to give the program's name and a brief idea of what it does.></pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> Copyright (C) 19yy <name of author></pre> +<pre style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"></pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> This program is free software; you can redistribute it and/or modify</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> it under the terms of the GNU General Public License as published by</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> the Free Software Foundation; either version 2 of the License, or</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> (at your option) any later version.</pre> +<pre style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"></pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> This program is distributed in the hope that it will be useful,</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> but WITHOUT ANY WARRANTY; without even the implied warranty of</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> GNU General Public License for more details.</pre> +<pre style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"></pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> You should have received a copy of the GNU General Public License</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> along with this program; if not, write to the Free Software</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA</pre> +<pre style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"></pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> Also add information on how to contact you by electronic and paper mail.</pre> +<pre style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"></pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> If the program is interactive, make it output a short notice like this</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> when it starts in an interactive mode:</pre> +<pre style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"></pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> Gnomovision version 69, Copyright (C) 19yy name of author</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> This is free software, and you are welcome to redistribute it</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> under certain conditions; type `show c' for details.</pre> +<pre style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"></pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> The hypothetical commands `show w' and `show c' should show the appropriate</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> parts of the General Public License. Of course, the commands you use may</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> be called something other than `show w' and `show c'; they could even be</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> mouse-clicks or menu items--whatever suits your program.</pre> +<pre style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"></pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> You should also get your employer (if you work as a programmer) or your</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> school, if any, to sign a "copyright disclaimer" for the program, if</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> necessary. Here is a sample; alter the names:</pre> +<pre style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"></pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> Yoyodyne, Inc., hereby disclaims all copyright interest in the program</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> `Gnomovision' (which makes passes at compilers) written by James Hacker.</pre> +<pre style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"></pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> <signature of Ty Coon>, 1 April 1989</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> Ty Coon, President of Vice</pre> +<pre style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"></pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> This General Public License does not permit incorporating your program into</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> proprietary programs. If your program is a subroutine library, you may</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> consider it more useful to permit linking proprietary applications with the</pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> library. If this is what you want to do, use the GNU Library General</pre> +<pre style=" margin-top:0px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> Public License instead of this License.</pre> + +<P><BR></P> +<HR> +<CENTER> +<TABLE WIDTH=100% BORDER=0 CELLPADDING=0 CELLSPACING=0> + <TR> <TD WIDTH=50%><P>Copyright © 2007-2010 <A HREF="http://www.aconex.com/"><FONT COLOR="#000060">Aconex</FONT></A><BR>Copyright © 2000-2004 <A HREF="http://www.sgi.com/"><FONT COLOR="#000060">Silicon Graphics Inc</FONT></P></TD> + <TD WIDTH=50%><P ALIGN=RIGHT><A HREF="http://pcp.io/"><FONT COLOR="#000060">PCP Site</FONT></A><BR>Copyright © 2012-2014 <A HREF="http://www.redhat.com/"><FONT COLOR="#000060">Red Hat</FONT></P></TD> </TR> +</TABLE> +</CENTER> +</BODY> +</HTML> diff --git a/man/html/guide.redhat.html b/man/html/guide.redhat.html new file mode 100644 index 0000000..70420eb --- /dev/null +++ b/man/html/guide.redhat.html @@ -0,0 +1,522 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> +<HTML> +<HEAD> + <meta http-equiv="content-type" content="text/html; charset=utf-8"> + <meta http-equiv="content-style-type" content="text/css"> + <link href="pcpdoc.css" rel="stylesheet" type="text/css"> + <link href="images/pcp.ico" rel="icon" type="image/ico"> + <TITLE>Red Hat Quick Reference Guide</TITLE> +</HEAD> +<BODY LANG="en-AU" TEXT="#000060" DIR="LTR"> +<TABLE WIDTH=100% BORDER=0 CELLPADDING=0 CELLSPACING=0 STYLE="page-break-before: always"> + <TR> <TD WIDTH=64 HEIGHT=64><FONT COLOR="#000080"><A HREF="http://pcp.io/"><IMG SRC="images/pcpicon.png" NAME="pcpicon" ALIGN=TOP WIDTH=64 HEIGHT=64 BORDER=0></A></FONT></TD> + <TD WIDTH=1><P> </P></TD> + <TD WIDTH=500><P VALIGN=MIDDLE ALIGN=LEFT><A HREF="index.html"><FONT COLOR="#cc0000">Home</FONT></A> · <A HREF="lab.pmchart.html"><FONT COLOR="#cc0000">Charts</FONT></A> · <A HREF="timecontrol.html"><FONT COLOR="#cc0000">Time Control</FONT></A></P></TD> + </TR> +</TABLE> +<H1 ALIGN=CENTER STYLE="margin-top: 0.48cm; margin-bottom: 0.32cm"><FONT SIZE=7>Red Hat Quick Reference Guide</FONT></H1> +<UL> + <LI><A HREF="#intro">Introduction</A> + <LI><A HREF="#install">Installation</A> + <UL> + <LI><A HREF="#collectors">Installing Collector Hosts</A> + <LI><A HREF="#monitors">Installing Monitor Hosts</A> + <LI><A HREF="#discovery">Dynamic Host Discovery</A> + <LI><A HREF="#healthcheck">Installation Health Check</A> + </UL> + <LI><A HREF="#systemlevel">System Level Performance Monitoring</A> + <UL> + <LI><A HREF="#live">Monitoring Live Performance Metrics</A> + <LI><A HREF="#retro">Retrospective Performance Analysis</A> + <LI><A HREF="#visual">Visualizing iostat and sar Data</A> + </UL> + <LI><A HREF="#processes">Process Level Performance Monitoring</A> + <UL> + <LI><A HREF="#processmon">Live and Retrospective Process Monitoring</A> + <LI><A HREF="#instrument">Application Instrumentation</A> + </UL> + <LI><A HREF="#pmie">Performance Metrics Inference</A> + <LI><A HREF="#web">Web Services</A> + <UL> + <LI><A HREF="#pmwebd">Performance Metrics Web Daemon</A> + <LI><A HREF="#browse">Web Interface for Performance Metrics</A> + </UL> + <LI><A HREF="#custom">Customizing and Extending PCP</A> + <LI><A HREF="#next">Additional Information</A> +</UL> + +<a name="intro"></a> +<H1>Introduction</H1> + +<P><A HREF="http://www.pcp.io/>Performance Co-Pilot</A> (PCP) is an open source framework and toolkit for monitoring, analyzing, and responding to details of live and historical system performance. PCP has a fully distributed, plug-in based architecture making it particularly well suited to centralized analysis of complex environments and systems. Custom performance metrics can be added using the C, C++, Perl, and Python interfaces. + +<P>This page provides quick instructions how to install and use PCP on a set of RHEL hosts of which one (a monitor host) will be used for monitoring and analyzing itself and other hosts (collector hosts). + +<a name="install"></a> +<H1>Installation</H1> + +<P>PCP is supported on RHEL 6.6+ and RHEL 7+ and is available from the <A HREF="http://fedoraproject.org/wiki/EPEL">EPEL</A> repositories for earlier versions. + +<P>For older releases, either enable EPEL with Yum (see <A HREF="http://fedoraproject.org/wiki/EPEL/FAQ#How_can_I_install_the_packages_from_the_EPEL_software_repository.3F">this page</A> for details - but be careful not to overwrite any RHEL packages with EPEL packages) or you can grab the latest PCP packages manually from the <A HREF="http://dl.fedoraproject.org/pub/epel/">EPEL repositories</A>. + +<a name="collectors"></a> +<H3>Installing Collector Hosts</H3> + +<TABLE WIDTH=100% BORDER=0 CELLPADDING=10 CELLSPACING=20> + <TR><TD BGCOLOR="#e2e2e2" WIDTH=70%><BR><IMG SRC="images/stepfwd_on.png" WIDTH=16 HEIGHT=16 BORDER=0> To install basic PCP tools and services and enable collecting performance data, simply run:<br><B> +<br> # yum install pcp +<br> # chkconfig pmcd on +<br> # service pmcd start +<br> # chkconfig pmlogger on +<br> # service pmlogger start +</B></TD></TR> +</TABLE> + +<P>This will enable the Performance Metrics Collector Daemon (pmcd) on the host which then in turn will control and request metrics on behalf of clients from various Performance Metrics Domain Agents (PMDAs). The PMDAs provide the actual data from different components (domains) in the system, for example from the Linux Kernel PMDA or the NFS Client PMDA. The default configuration includes over 1000 metrics with negligible overall overhead. Local PCP archive logs will also be enabled on the host for convenience with pmlogger (<A HREF="https://access.redhat.com/articles/1146283">RHKB 1146283</A> contains some additional logging related considerations). + +<TABLE WIDTH=100% BORDER=0 CELLPADDING=10 CELLSPACING=20> + <TR><TD BGCOLOR="#e2e2e2" WIDTH=70%><BR><IMG SRC="images/stepfwd_on.png" WIDTH=16 HEIGHT=16 BORDER=0> To enable PMDAs which are not enabled by default, for example the NFS Client PMDA, run the corresponding Install script:<br><B> +<br> # cd /var/lib/pcp/pmdas/nfsclient +<BR> # ./Install +</B></TD></TR> +</TABLE> + +<P>The client tools will contact local or remote PMCDs as needed, communication with PMCD over the network uses TCP port 44321 by default. + + +<a name="monitors"></a> +<H3>Installing Monitor Host</H3> + +<P>The following additional packages can be optionally installed on the monitoring host to extend the set of monitoring tools from the base pcp package. + +<TABLE WIDTH=100% BORDER=0 CELLPADDING=10 CELLSPACING=20> + <TR><TD BGCOLOR="#e2e2e2" WIDTH=70%><BR><IMG SRC="images/stepfwd_on.png" WIDTH=16 HEIGHT=16 BORDER=0> Install graphical analysis tools and documentation:<BR><B> +<BR># yum install pcp-doc pcp-gui +</B></TD></TR> +</TABLE> + +<P>To enable centralized archive log collection on the monitoring host, its pmlogger is configured to fetch performance metrics from collector hosts. Add each collector host to the pmlogger configuration file /etc/pcp/pmlogger/control and then restart the pmlogger service on the monitoring host. + +<TABLE WIDTH=100% BORDER=0 CELLPADDING=10 CELLSPACING=20> + <TR><TD BGCOLOR="#e2e2e2" WIDTH=70%><BR><IMG SRC="images/stepfwd_on.png" WIDTH=16 HEIGHT=16 BORDER=0> Enable recording of metrics from remote host <B><FONT COLOR="#cc0000">acme.com</FONT></B>:<B><BR> +<BR> # echo <FONT COLOR="#cc0000">acme.com</FONT> n n PCP_LOG_DIR/pmlogger/<FONT COLOR="#cc0000">acme.com</FONT> -r -T24h10m -c config.<FONT COLOR="#cc0000">acme.com</FONT> >> /etc/pcp/pmlogger/control +<BR> +<BR> # service pmlogger restart +</B></TD></TR> +</TABLE> + +<P>Checks for remote log collection will be done every half an hour. You may also wish to run /usr/libexec/pcp/bin/pmlogger_check -V -C manually (the service restart above issues this command internally). + +<P>Note that a default configuration file (config.acme.com above) will be generated if it does not exist already. This process is optional (a custom configuration for each host can be provided instead), see the pmlogconf manual page for details on this. + +<a name="discovery"></a> +<H3>Dynamic Host Discovery</H3> + +<P>In dynamic environments manually configuring every host is not feasible, perhaps even impossible. PCP Manager (PMMGR, from the pcp-manager RPM package) can be used instead of directly invoking PMLOGGER and PMIE to auto-discover and auto-configure new collector hosts. + +<TABLE WIDTH=100% BORDER=0 CELLPADDING=10 CELLSPACING=20> + <TR><TD BGCOLOR="#e2e2e2" WIDTH=70%><BR><IMG SRC="images/stepfwd_on.png" WIDTH=16 HEIGHT=16 BORDER=0> To install the PMMGR daemon and begin monitoring either statically or dynamically configured hosts, run:<br><B> +<br> # yum install pcp-manager +<br> # echo <FONT COLOR="#cc0000">acme.com</FONT> >> /etc/pcp/pmmgr/target-host +<br> # echo avahi >> /etc/pcp/pmmgr/target-discover +<br> # echo probe=<FONT COLOR="#cc0000">ip.addr.tup.le/netmask</FONT> >> /etc/pcp/pmmgr/target-discover +<br> # chkconfig pmmgr on +<br> # service pmmgr start +<br> # find /var/log/pcp/pmmgr +</B></TD></TR> +</TABLE> + +<TABLE WIDTH=100% BORDER=0 CELLPADDING=10 CELLSPACING=20> + <TR><TD BGCOLOR="#e2e2e2" WIDTH=70%><BR><IMG SRC="images/stepfwd_on.png" WIDTH=16 HEIGHT=16 BORDER=0> +Discover use of the PCP pmcd service on the local network:<BR><B> +<BR> $ pmfind -s pmcd</B> +</TD></TR> +</TABLE> + +<a name="healthcheck"></a> +<H3>Installation Health Check</H3> + +<P>Basic installation health check for running services, network connectivity between hosts, and enabled PMDAs can be done simply as follows. + +<TABLE WIDTH=100% BORDER=0 CELLPADDING=10 CELLSPACING=20> + <TR><TD BGCOLOR="#e2e2e2" WIDTH=70%><BR><IMG SRC="images/stepfwd_on.png" WIDTH=16 HEIGHT=16 BORDER=0> Check PCP services on remote host <B><FONT COLOR="#cc0000">munch</FONT></B> and historically, from a local archive for host <B><FONT COLOR="#cc0000">smash</FONT></B>:<BR><B> +<BR> $ pcp -h <FONT COLOR="#cc0000">munch</FONT></B><PRE> +Performance Co-Pilot configuration on munch: + platform: SunOS munch 5.11 oi_151a8 i86pc + hardware: 4 cpus, 3 disks, 4087MB RAM + timezone: EST-10 + pmcd: Version 3.8.9-1, 3 agents + pmda: pmcd mmv solaris +</PRE> +<B> +<BR> $ pcp -a /var/log/pcp/pmlogger/<FONT COLOR="#cc0000">smash</FONT>/20140729</B><PRE> +Performance Co-Pilot configuration on smash: + archive: /var/log/pcp/pmlogger/smash/20140729 + platform: Linux smash 2.6.32-279.46.1.el6.x86_64 #1 SMP Mon May 19 16:16:00 EDT 2014 x86_64 + hardware: 8 cpus, 2 disks, 1 node, 23960MB RAM + timezone: EST-10 + services: pmcd pmwebd + pmcd: Version 3.9.8-1, 13 agents + pmda: pmcd proc trace xfs sample sampledso linux mmv nvidia jbd2 + rpm dmcache simple + pmlogger: primary logger: smash/20140729.00.10 +</PRE></TD></TR> +</TABLE> + +<a name="systemlevel"></a> +<H1>System Level Performance Monitoring</H1> + +<P>PCP comes with a wide range of command line utilities for accessing live performance metrics via PMCDs or historical data using archive logs. The following examples illustrate some of the most useful use cases, please see the corresponding manual pages for each command for additional information. In the below examples -h <host> is always optional, the default is the local host. + +<a name="live"></a> +<H3>Monitoring Live Performance Metrics</H3> + +<TABLE WIDTH=100% BORDER=0 CELLPADDING=10 CELLSPACING=20> + <TR><TD BGCOLOR="#e2e2e2" WIDTH=70%><BR><IMG SRC="images/stepfwd_on.png" WIDTH=16 HEIGHT=16 BORDER=0> +Display all the enabled performance metrics on a host (use with -t to include a short description for each):<BR><B> +<BR> $ pminfo -h <FONT COLOR="#cc0000">acme.com</FONT></B> +</TD></TR> +</TABLE> + +<TABLE WIDTH=100% BORDER=0 CELLPADDING=10 CELLSPACING=20> + <TR><TD BGCOLOR="#e2e2e2" WIDTH=70%><BR><IMG SRC="images/stepfwd_on.png" WIDTH=16 HEIGHT=16 BORDER=0> +Display detailed information about a performance metric and its current values:<BR><B> +<BR> $ pminfo -dfmtT disk.partitions.read -h <FONT COLOR="#cc0000">acme.com</FONT></B> +</TD></TR> +</TABLE> + +<TABLE WIDTH=100% BORDER=0 CELLPADDING=10 CELLSPACING=20> + <TR><TD BGCOLOR="#e2e2e2" WIDTH=70%><BR><IMG SRC="images/stepfwd_on.png" WIDTH=16 HEIGHT=16 BORDER=0> +Monitor live disk write operations per partition with two second interval using fixed point notation (use -i instance to list only certain metrics and -r for raw values):<BR><B> +<BR> $ pmval -t 2sec -f 3 disk.partitions.write -h <FONT COLOR="#cc0000">acme.com</FONT></B> +</TD></TR> +</TABLE> + +<TABLE WIDTH=100% BORDER=0 CELLPADDING=10 CELLSPACING=20> + <TR><TD BGCOLOR="#e2e2e2" WIDTH=70%><BR><IMG SRC="images/stepfwd_on.png" WIDTH=16 HEIGHT=16 BORDER=0> +Monitor live CPU load, memory usage, and disk write operations per partition with two second interval using fixed width columns:<BR><B> +<BR> $ pmdumptext -i -l 'kernel.all.load[1]' mem.util.used disk.partitions.write -h <FONT COLOR="#cc0000">acme.com</FONT></B> +</TD></TR> +</TABLE> + +<TABLE WIDTH=100% BORDER=0 CELLPADDING=10 CELLSPACING=20> + <TR><TD BGCOLOR="#e2e2e2" WIDTH=70%><BR><IMG SRC="images/stepfwd_on.png" WIDTH=16 HEIGHT=16 BORDER=0> +Monitor system metrics in a top like window (this needs a large terminal):<BR><B> +<BR> $ pmatop -h <FONT COLOR="#cc0000">acme.com</FONT></B> +</TD></TR> +</TABLE> + +<TABLE WIDTH=100% BORDER=0 CELLPADDING=10 CELLSPACING=20> + <TR><TD BGCOLOR="#e2e2e2" WIDTH=70%><BR><IMG SRC="images/stepfwd_on.png" WIDTH=16 HEIGHT=16 BORDER=0> +Monitor system metrics in a sar like fashion with two second interval from two different hosts:<BR><B> +<BR> $ pmstat -t 2sec -h <FONT COLOR="#cc0000">acme1.com</FONT> -h <FONT COLOR="#cc0000">acme2.com</FONT></B> +</TD></TR> +</TABLE> + +<TABLE WIDTH=100% BORDER=0 CELLPADDING=10 CELLSPACING=20> + <TR><TD BGCOLOR="#e2e2e2" WIDTH=70%><BR><IMG SRC="images/stepfwd_on.png" WIDTH=16 HEIGHT=16 BORDER=0> +Monitor system metrics in an iostat like fashion with two second interval:<BR><B> +<BR> $ pmiostat -t 2sec -h <FONT COLOR="#cc0000">acme.com</FONT></B> +</TD></TR> +</TABLE> + +<TABLE WIDTH=100% BORDER=0 CELLPADDING=10 CELLSPACING=20> + <TR><TD BGCOLOR="#e2e2e2" WIDTH=70%><BR><IMG SRC="images/stepfwd_on.png" WIDTH=16 HEIGHT=16 BORDER=0> +Monitor performance metrics with a GUI application with two second default interval from two different hosts. Use File->New Chart to select metrics to be included in a new view and use File->Open View to use a predefined view:<BR><B> +<BR> $ pmchart -t 2sec -h <FONT COLOR="#cc0000">acme1.com</FONT> -h <FONT COLOR="#cc0000">acme2.com</FONT></B> +</TD></TR> +</TABLE> + +<a name="retro"></a> +<H3>Retrospective Performance Analysis</H3> + +<P>PCP archive logs are located under /var/log/pcp/pmlogger/<B><FONT COLOR="#cc0000">hostname</FONT></B>, and the archive names indicate the date they cover. Archives are self-contained, and machine-independent so can be transfered to any machine for offline analysis. + +<TABLE WIDTH=100% BORDER=0 CELLPADDING=10 CELLSPACING=20> + <TR><TD BGCOLOR="#e2e2e2" WIDTH=70%><BR><IMG SRC="images/stepfwd_on.png" WIDTH=16 HEIGHT=16 BORDER=0> +Check the host and the time period an archive covers:<BR><B> +<BR> $ pmdumplog -l <FONT COLOR="#cc0000">acme.com</FONT>/20140902</B> +</TD></TR> +</TABLE> + +<TABLE WIDTH=100% BORDER=0 CELLPADDING=10 CELLSPACING=20> + <TR><TD BGCOLOR="#e2e2e2" WIDTH=70%><BR><IMG SRC="images/stepfwd_on.png" WIDTH=16 HEIGHT=16 BORDER=0> +Check PCP configuration at the time when an archive was created:<BR><B> +<BR> $ pcp -a <FONT COLOR="#cc0000">acme.com</FONT>/20140902</B> +</TD></TR> +</TABLE> + +<TABLE WIDTH=100% BORDER=0 CELLPADDING=10 CELLSPACING=20> + <TR><TD BGCOLOR="#e2e2e2" WIDTH=70%><BR><IMG SRC="images/stepfwd_on.png" WIDTH=16 HEIGHT=16 BORDER=0> +Display all enabled performance metrics at the time when an archive was created:<BR><B> +<BR> $ pminfo -a <FONT COLOR="#cc0000">acme.com</FONT>/20140902</B> +</TD></TR> +</TABLE> + +<TABLE WIDTH=100% BORDER=0 CELLPADDING=10 CELLSPACING=20> + <TR><TD BGCOLOR="#e2e2e2" WIDTH=70%><BR><IMG SRC="images/stepfwd_on.png" WIDTH=16 HEIGHT=16 BORDER=0> +Display detailed information about a performance metric at the time when an archive was created:<BR><B> +<BR> $ pminfo -df mem.freemem -a <FONT COLOR="#cc0000">acme.com</FONT>/20140902</B> +</TD></TR> +</TABLE> + +<TABLE WIDTH=100% BORDER=0 CELLPADDING=10 CELLSPACING=20> + <TR><TD BGCOLOR="#e2e2e2" WIDTH=70%><BR><IMG SRC="images/stepfwd_on.png" WIDTH=16 HEIGHT=16 BORDER=0> +Dump past disk write operations per partition in an archive using fixed point notation (use -i instance to list only certain metrics and -r for raw values):<BR><B> +<BR> $ pmval -f 3 disk.partitions.write -a <FONT COLOR="#cc0000">acme.com</FONT>/20140902</B> +</TD></TR> +</TABLE> + +<TABLE WIDTH=100% BORDER=0 CELLPADDING=10 CELLSPACING=20> + <TR><TD BGCOLOR="#e2e2e2" WIDTH=70%><BR><IMG SRC="images/stepfwd_on.png" WIDTH=16 HEIGHT=16 BORDER=0> +Replay past disk write operations per partition in an archive with two second interval using fixed point notation between 9 AM and 10 AM (use full dates with syntax like @"2014-08-20 14:00:00"):<BR><B> +<BR> $ pmval -d -t 2sec -f 3 disk.partitions.write -S @09:00 -T @10:00 -a <FONT COLOR="#cc0000">acme.com</FONT>/20140902</B> +</TD></TR> +</TABLE> + +<TABLE WIDTH=100% BORDER=0 CELLPADDING=10 CELLSPACING=20> + <TR><TD BGCOLOR="#e2e2e2" WIDTH=70%><BR><IMG SRC="images/stepfwd_on.png" WIDTH=16 HEIGHT=16 BORDER=0> +Calculate average values of performance metrics in an archive between 9 AM / 10 AM using table like formatting including the time of minimum/maximum value and the actual minimum/maximum value:<BR><B> +<BR> $ pmlogsummary -HlfiImM -S @09:00 -T @10:00 <FONT COLOR="#cc0000">acme.com</FONT>/20140902 disk.partitions.write mem.freemem</B> +</TD></TR> +</TABLE> + +<TABLE WIDTH=100% BORDER=0 CELLPADDING=10 CELLSPACING=20> + <TR><TD BGCOLOR="#e2e2e2" WIDTH=70%><BR><IMG SRC="images/stepfwd_on.png" WIDTH=16 HEIGHT=16 BORDER=0> +Dump past CPU load, memory usage, and disk write operations per partition in an archive averaged over 10 minute interval with fixed columns between 9 AM and 10 AM:<BR><B> +<BR> $ pmdumptext -t 10m -i -l -S @09:00 -T @10:00 'kernel.all.load[1]' 'mem.util.used' 'disk.partitions.write' -a <FONT COLOR="#cc0000">acme.com</FONT>/20140902</B> +</TD></TR> +</TABLE> + +<TABLE WIDTH=100% BORDER=0 CELLPADDING=10 CELLSPACING=20> + <TR><TD BGCOLOR="#e2e2e2" WIDTH=70%><BR><IMG SRC="images/stepfwd_on.png" WIDTH=16 HEIGHT=16 BORDER=0> +Summarize differences in past performance metrics between two archives, comparing 2 AM / 3 AM in the first archive to 9 AM / 10 AM in the second archive (grep for '+' to quickly see values which were zero during the first period):<BR><B> +<BR> $ pmdiff -S @02:00 -T @03:00 -B @09:00 -E @10:00 <FONT COLOR="#cc0000">acme.com</FONT>/20140902 <FONT COLOR="#cc0000">acme.com</FONT>/20140901</B> +</TD></TR> +</TABLE> + +<TABLE WIDTH=100% BORDER=0 CELLPADDING=10 CELLSPACING=20> + <TR><TD BGCOLOR="#e2e2e2" WIDTH=70%><BR><IMG SRC="images/stepfwd_on.png" WIDTH=16 HEIGHT=16 BORDER=0> +Replay past system metrics in an archive in a top like window starting 9 AM (this needs a large window):<BR><B> +<BR> $ pmatop -S @09:00 -a <FONT COLOR="#cc0000">acme.com</FONT>/20140902</B> +</TD></TR> +</TABLE> + +<TABLE WIDTH=100% BORDER=0 CELLPADDING=10 CELLSPACING=20> + <TR><TD BGCOLOR="#e2e2e2" WIDTH=70%><BR><IMG SRC="images/stepfwd_on.png" WIDTH=16 HEIGHT=16 BORDER=0> +Dump past system metrics in a sar like fashion averaged over 10 minute interval in an archive between 9 AM and 10 AM:<BR><B> +<BR> $ pmstat -t 10m -S @09:00 -T @10:00 -a <FONT COLOR="#cc0000">acme.com</FONT>/20140902</B> +</TD></TR> +</TABLE> + +<TABLE WIDTH=100% BORDER=0 CELLPADDING=10 CELLSPACING=20> + <TR><TD BGCOLOR="#e2e2e2" WIDTH=70%><BR><IMG SRC="images/stepfwd_on.png" WIDTH=16 HEIGHT=16 BORDER=0> +Dump past system metrics in an iostat(1) like fashion averaged over one hour interval in an archive:<BR><B> +<BR> $ pmiostat -t 1h -a <FONT COLOR="#cc0000">acme.com</FONT>/20140902</B> +</TD></TR> +</TABLE> + +<TABLE WIDTH=100% BORDER=0 CELLPADDING=10 CELLSPACING=20> + <TR><TD BGCOLOR="#e2e2e2" WIDTH=70%><BR><IMG SRC="images/stepfwd_on.png" WIDTH=16 HEIGHT=16 BORDER=0> +Dump past system metrics in a free(1) like fashion at a specific historical time offset:<BR><B> +<BR> $ pcp -a <FONT COLOR="#cc0000">acme.com</FONT>/20140902 -O @10:02 free</B> +</TD></TR> +</TABLE> + +<TABLE WIDTH=100% BORDER=0 CELLPADDING=10 CELLSPACING=20> + <TR><TD BGCOLOR="#e2e2e2" WIDTH=70%><BR><IMG SRC="images/stepfwd_on.png" WIDTH=16 HEIGHT=16 BORDER=0> +Replay performance metrics with a GUI application with two second default interval in an archive between 9 AM and 10 AM. Use File->New Chart to select metrics to be included in a new view and use File->Open View to use a predefined view:<BR><B> +<BR> $ pmchart -t 2sec -S @09:00 -T @10:00 -a <FONT COLOR="#cc0000">acme.com</FONT>/20140902 -O @10:02 free</B> +</TD></TR> +</TABLE> + +<TABLE WIDTH=100% BORDER=0 CELLPADDING=10 CELLSPACING=20> + <TR><TD BGCOLOR="#e2e2e2" WIDTH=70%><BR><IMG SRC="images/stepfwd_on.png" WIDTH=16 HEIGHT=16 BORDER=0> +Merge several archives as a new combined archive (see the manual page how to write configuration file to collect only certain metrics):<BR><B> +<BR> $ pmlogextract <archive1> <archive2> <newarchive></B> +</TD></TR> +</TABLE> + +<a name="visual"></a> +<H3>Visualizing iostat and sar Data</H3> + +<P>iostat and sar data can be imported as PCP archives which then allows inspecting and visualizing the data with PCP tools. The iostat2pcp importer is in the pcp-import-iostat2pcp package and the sar2pcp importer is in the pcp-import-sar2pcp package. + +<TABLE WIDTH=100% BORDER=0 CELLPADDING=10 CELLSPACING=20> + <TR><TD BGCOLOR="#e2e2e2" WIDTH=70%><BR><IMG SRC="images/stepfwd_on.png" WIDTH=16 HEIGHT=16 BORDER=0> +Import iostat data to a new PCP archive and visualize it:<BR><B> +<BR> $ iostat -t -x 2 > iostat.out +<BR> $ iostat2pcp iostat.out iostat.pcp +<BR> $ pmchart -t 2sec -a iostat.pcp </B> +</TD></TR> +</TABLE> + +<TABLE WIDTH=100% BORDER=0 CELLPADDING=10 CELLSPACING=20> + <TR><TD BGCOLOR="#e2e2e2" WIDTH=70%><BR><IMG SRC="images/stepfwd_on.png" WIDTH=16 HEIGHT=16 BORDER=0> +Import sar data from an existing sar archive to a new PCP archive and visualize it:<BR><B> +<BR> $ sar2pcp /var/log/sa/sa15 sar.pcp +<BR> $ pmchart -2 2sec -a sar.pcp </B> +</TD></TR> +</TABLE> + +<a name="processes"></a> +<H1>Process Level Performance Monitoring</H1> + +<P>PCP provides details of each running process via the standard PCP interfaces and tools on the localhost but due to security and performance considerations, most of the process related information is not stored in archive logs by default. +<P>Custom application instrumentation is possible with the Memory Mapped Value (MMV) PMDA. + +<a name="processmon"></a> +<H3>Live and Retrospective Process Monitoring</H3> + +<TABLE WIDTH=100% BORDER=0 CELLPADDING=10 CELLSPACING=20> + <TR><TD BGCOLOR="#e2e2e2" WIDTH=70%><BR><IMG SRC="images/stepfwd_on.png" WIDTH=16 HEIGHT=16 BORDER=0> +Display all the available process related metrics:<BR><B> +<BR> $ pminfo proc</B> +</TD></TR> +</TABLE> + +<TABLE WIDTH=100% BORDER=0 CELLPADDING=10 CELLSPACING=20> + <TR><TD BGCOLOR="#e2e2e2" WIDTH=70%><BR><IMG SRC="images/stepfwd_on.png" WIDTH=16 HEIGHT=16 BORDER=0> +Monitor the number of open file descriptors of the process 1234:<BR><B> +<BR> $ pmval -t 2sec 'proc.fd.count[1234]'</B> +</TD></TR> +</TABLE> + +<TABLE WIDTH=100% BORDER=0 CELLPADDING=10 CELLSPACING=20> + <TR><TD BGCOLOR="#e2e2e2" WIDTH=70%><BR><IMG SRC="images/stepfwd_on.png" WIDTH=16 HEIGHT=16 BORDER=0> +Monitor the CPU time, memory usage (RSS), and the number of threads of the process 1234 (-host local: is a workaround needed for the time being):<BR><B> +<BR> $ pmdumptext -h local: -t 2sec 'proc.psinfo.utime[1234]' 'proc.memory.rss[1234]' 'proc.psinfo.threads[1234]'</B> +</TD></TR> +</TABLE> + +<TABLE WIDTH=100% BORDER=0 CELLPADDING=10 CELLSPACING=20> + <TR><TD BGCOLOR="#e2e2e2" WIDTH=70%><BR><IMG SRC="images/stepfwd_on.png" WIDTH=16 HEIGHT=16 BORDER=0> +Display all the available process related metrics in an archive:<BR><B> +<BR> $ pminfo proc -a <FONT COLOR="#cc0000">acme.com</FONT>/20140902</B> +</TD></TR> +</TABLE> + +<TABLE WIDTH=100% BORDER=0 CELLPADDING=10 CELLSPACING=20> + <TR><TD BGCOLOR="#e2e2e2" WIDTH=70%><BR><IMG SRC="images/stepfwd_on.png" WIDTH=16 HEIGHT=16 BORDER=0> +Display the number of running processes on 2014-08-20 14:00:<BR><B> +<BR> $ pmval -s 1 -S @"2014-08-20 14:00" proc.nprocs -a <FONT COLOR="#cc0000">acme.com</FONT>/20140820</B> +</TD></TR> +</TABLE> + +<a name="instrument"></a> +<H3>Application Instrumentation</H3> + +<P>Applications can be instrumented in the PCP world by using Memory Mapped Values (MMVs). pmdammv is a PMDA which exports application level performance metrics using memory mapped files. It offers an extremely low overhead instrumentation facility that is well-suited to long running, mission critical applications where it is desirable to have performance metrics and availability information permanently enabled. + +<P>Application to be instrumented with MMV need to be PCP MMV aware, APIs are available for several languages including C, C++, Perl, and Python. Java applications may use the separate <A HREF="https://code.google.com/p/parfait/">Parfait</A> class library for enabling MMV. + +<P>Instrumentation of unaltered Java applications is a known feature request and is planned for a not-too-distant release. + +<P>See the <A HREF="http://www.pcp.io/doc/pcp-programmers-guide.pdf">Performance Co-Pilot Programmer's Guide PDF</A> for more information about application instrumentation. + +<a name="pmie"></a> +<H1>Performance Metrics Inference</H1> + +<P>Performance Metrics Inference Engine (PMIE) can evaluate rules and generate alarms, run scripts, or automate system management tasks based on live or past performance metrics. + +<TABLE WIDTH=100% BORDER=0 CELLPADDING=10 CELLSPACING=20> + <TR><TD BGCOLOR="#e2e2e2" WIDTH=70%><BR><IMG SRC="images/stepfwd_on.png" WIDTH=16 HEIGHT=16 BORDER=0> To enable PMIE, just enable and start the service:<br><B> +<br> # chkconfig pmie on +<br> # service pmie start +</B></TD></TR> +</TABLE> + +<P>To enable the monitoring host to run PMIE for collector hosts, add each host to the /etc/pcp/pmie/control configuration file. + +<TABLE WIDTH=100% BORDER=0 CELLPADDING=10 CELLSPACING=20> + <TR><TD BGCOLOR="#e2e2e2" WIDTH=70%><BR><IMG SRC="images/stepfwd_on.png" WIDTH=16 HEIGHT=16 BORDER=0> Enable monitoring of metrics from remote host <B>acme.com</B>:<B> +<BR> # echo <FONT COLOR="#cc0000">acme.com</FONT> n PCP_LOG_DIR/pmie/<FONT COLOR="#cc0000">acme.com</FONT> -c config.<FONT COLOR="#cc0000">acme.com</FONT> +<BR> +<BR> # service pmie restart +</B></TD></TR> +</TABLE> + +<P>Some examples in plain English describing what could be done with PMIE: +<UL> +<LI>If the number of IP received packets exceeds a threshold run a script to adjust firewall rules to limit the incoming traffic +<LI>If 3 out of 4 consecutive samples taken every minute of disk operations exceeds a threshold between 9 AM and 5 PM send an email and write a system log message +<LI>If all hosts in a group have CPU load over a threshold for more than 10 minutes or they have more application processes running than a threshold limit generate an alarm and run a script to tune the application +</UL> + +<TABLE WIDTH=100% BORDER=0 CELLPADDING=10 CELLSPACING=20> + <TR><TD BGCOLOR="#e2e2e2" WIDTH=70%><BR><IMG SRC="images/stepfwd_on.png" WIDTH=16 HEIGHT=16 BORDER=0> +This example shows a PMIE script, checks its syntax, runs it against an archive, and prints a simple message if more than 5 GB of memory was in use between 9 AM and 10 AM using one minute sampling interval:<BR><B> +<BR> $ cat pmie.ex +<PRE> + bloated = ( mem.util.used > 5 Gbyte ) + + -> print "%v memory used on %h!"</PRE> +<BR> $ pmie -C pmie.ex +<BR> $ pmie -t 1min -c pmie.ex -S @09:00 -T @10:00 -a <FONT COLOR="#cc0000">acme.com</FONT>/20140820</B> +</TD></TR> +</TABLE> + + +<a name="web"></a> +<H1>PCP Web Services</H1> + +<P>A daemon for exporting PCP metrics using a REST web service (over HTTP/JSON) is also available. Use this for viewing or monitoring PCP metrics in a web browser - several web interfaces are becoming available (also via the pcp-webapi package) to make this a reality. + +<TABLE WIDTH=100% BORDER=0 CELLPADDING=10 CELLSPACING=20> + <TR><TD BGCOLOR="#e2e2e2" WIDTH=70%><BR><IMG SRC="images/stepfwd_on.png" WIDTH=16 HEIGHT=16 BORDER=0> To install the PCP web service, simply run:<br><B> +<br> # yum install pcp-webapi +<br> # chkconfig pmwebd on +<br> # service pmwebd start +</B></TD></TR> +</TABLE> + +<a name="pmwebd"></a> +<H3>Performance Metrics Web Daemon</H3> + +<P>Performance Metrics Web Daemon (PMWEBD) is a front-end to both PMCD and PCP archives, providing a JSON interface suitable for use by web-based tools wishing to access performance data over HTTP. Custom applications can access all the available PCP information using this method, including possible data generated by custom PMDAs. + +<a name="browse"></a> +<H3>Web Interface for Performance Metrics</H3> + +<P>A web browser interface for accessing PCP performance metrics is currently a work in progress. These web interfaces make PCP metrics available via your choice of <A HREF="http://grafana.org/">Grafana</A> or <A HREF="http://graphite.wikidot.com/">Graphite</A>. + +<P>Further details will be added here once this feature is available. + +<a name="custom"></a> +<H1>Customizing and Extending PCP</H1> + +<P>PCP PMDAs offer a way for administrators and developers to customize and extend the default PCP installation. The pcp-libs-devel package contains all the needed development related examples, headers, and libraries. New PMDAs can easily be added, below is a quick list of references for starting development: + +<UL> +<LI>Some examples exist below /var/lib/pcp/pmdas/ - the simple, sample, and txmon PMDAs are easy to read PMDAs.</LI> + <UL> + <LI>The simple PMDA provides implementations in C, Perl and Python.</LI> + </UL> +<LI>A simple command line monitor tool is /usr/share/pcp/demos/pmclient (C language).</LI> +<LI>Good initial Python monitor examples are /usr/libexec/pcp/bin/pcp/pcp-*.</LI> + <UL> + <LI>Slightly more complex examples are the pmiostat, pmatop, pmcollectl commands.</LI> + </UL> +<LI>The examples in the source tree under src/pmwebapi/jsdemos are helpful when developing a web application.</LI> +</UL> + +<a name="next"></a> +<H1>Additional Information</H1> + +<UL> +<LI><A HREF="http://pcp.io/">http://pcp.io/</A> - PCP home page +<LI><A HREF="http://pcp.io/presentations.html">http://pcp.io/presentations.html</A> - PCP Presentations +<LI><A HREF="http://pcp.io/doc/pcp-users-and-administrators-guide.pdf">http://pcp.io/doc/pcp-users-and-administrators-guide.pdf</A> - Performance Co-Pilot User's and Administrator's Guide PDF +<LI><A HREF="http://pcp.io/doc/pcp-programmers-guide.pdf">http://pcp.io/doc/pcp-programmers-guide.pdf</A> - Performance Co-Pilot Programmer's Guide PDF +</UL> + +<P><BR></P> +<HR> +<CENTER> +<TABLE WIDTH=100% BORDER=0 CELLPADDING=0 CELLSPACING=0> + <TR> <TD WIDTH=50%><P>Copyright © 2007-2010 <A HREF="http://www.aconex.com/"><FONT COLOR="#000060">Aconex</FONT></A><BR>Copyright © 2000-2004 <A HREF="http://www.sgi.com/"><FONT COLOR="#000060">Silicon Graphics Inc</FONT></P></TD> + <TD WIDTH=50%><P ALIGN=RIGHT><A HREF="http://pcp.io/"><FONT COLOR="#000060">PCP Site</FONT></A><BR>Copyright © 2012-2014 <A HREF="http://www.redhat.com/"><FONT COLOR="#000060">Red Hat</FONT></P></TD> </TR> +</TABLE> +</CENTER> +</BODY> +</HTML> diff --git a/man/html/howto.cpuperf.html b/man/html/howto.cpuperf.html new file mode 100644 index 0000000..31fc5d3 --- /dev/null +++ b/man/html/howto.cpuperf.html @@ -0,0 +1,430 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> +<!-- + (c) Copyright 2000-2004 Silicon Graphics Inc. All rights reserved. + Permission is granted to copy, distribute, and/or modify this document + under the terms of the Creative Commons Attribution-Share Alike, Version + 3.0 or any later version published by the Creative Commons Corp. A copy + of the license is available at + http://creativecommons.org/licenses/by-sa/3.0/us/ . +--> +<HTML> +<HEAD> + <meta http-equiv="content-type" content="text/html; charset=utf-8"> + <meta http-equiv="content-style-type" content="text/css"> + <link href="pcpdoc.css" rel="stylesheet" type="text/css"> + <link href="images/pcp.ico" rel="icon" type="image/ico"> + <TITLE>Understanding system-level processor performance</TITLE> +</HEAD> +<BODY LANG="en-AU" TEXT="#000060" DIR="LTR"> +<TABLE WIDTH=100% BORDER=0 CELLPADDING=0 CELLSPACING=0 STYLE="page-break-before: always"> + <TR> <TD WIDTH=64 HEIGHT=64><FONT COLOR="#000080"><A HREF="http://pcp.io/"><IMG SRC="images/pcpicon.png" NAME="pmcharticon" ALIGN=TOP WIDTH=64 HEIGHT=64 BORDER=0></A></FONT></TD> + <TD WIDTH=1><P> </P></TD> + <TD WIDTH=500><P VALIGN=MIDDLE ALIGN=LEFT><A HREF="index.html"><FONT COLOR="#cc0000">Home</FONT></A> · <A HREF="lab.pmchart.html"><FONT COLOR="#cc0000">Charts</FONT></A> · <A HREF="timecontrol.html"><FONT COLOR="#cc0000">Time Control</FONT></A></P></TD> + </TR> +</TABLE> +<H1 ALIGN=CENTER STYLE="margin-top: 0.48cm; margin-bottom: 0.32cm"><FONT SIZE=7>Understanding measures of system-level processor performance</FONT></H1> +<TABLE WIDTH=15% BORDER=0 CELLPADDING=5 CELLSPACING=10 ALIGN=RIGHT> + <TR><TD BGCOLOR="#e2e2e2"><IMG SRC="images/system-search.png" WIDTH=16 HEIGHT=16 BORDER=0> <I>Tools</I><BR><PRE> +pmchart +mpvis +sar +</PRE></TD></TR> +</TABLE> +<P>This chapter of the Performance Co-Pilot tutorial provides some hints +on how to interpret and understand the various measures of system-level +processor (CPU) performance.</P> +<P>All modern operating systems collect processor resource utilization at both +the <B>process</B>-level and the <B>system</B>-level. This tutorial relate specifically to the <B>system</B>-level metrics.</P> +<P>For an explanation of Performance Co-Pilot terms and acronyms, consult +the <A HREF="glossary.html">PCP glossary</A>.</P> + +<P><BR></P> +<TABLE WIDTH=100% BORDER=0 CELLPADDING=0 CELLSPACING=0 BGCOLOR="#e2e2e2"> + <TR><TD WIDTH=100% BGCOLOR="#081c59"><P ALIGN=LEFT><FONT SIZE=5 COLOR="#ffffff"><B>How the system-level CPU time is computed</B></FONT></P></TD></TR> +</TABLE> +<P> +Both <I>sar</I> and Performance Co-Pilot (PCP) use a common collection +of system-level CPU performance instrumentation from the kernel. +This instrumentation is based upon statistical sampling of the state of <B>each</B> + CPU in the kernel's software clock interrupt routine which is commonly +called 100 times (HZ) per second on every CPU.</P> +<P> +At each observation a CPU is attributed a quantum of 10 milliseconds of +elapsed time to one of several counters based on the current state of +the code executing on that CPU.</P> +<P> +This sort of statistical sampling is subject to some anomalies, +particularly when activity is strongly correlated with the clock +interrupts, however the distribution of observations over several +seconds or minutes is often an accurate reflection of the true +distribution of CPU time. The kernel profiling mechanisms offer higher +resolution should that be required, however that is beyond the scope +of this document.</P> +<P> +The CPU state is determined by considering what the CPU was doing just +before the clock interrupt, as follows:</P> +<OL> + <LI> + If executing a <B>user</B> thread (i.e. above the kernel system + call interface for some process) then the state is CPU_USER. + <LI> + If executing a kernel interrupt thread, then the state is CPU_INTR. + <LI> + If executing a kernel thread waiting for a graphics event, then the + state is CPU_WAIT. + <LI> + If otherwise executing a kernel thread, then the state is CPU_KERNEL. + <LI> + If not executing a kernel thread and some I/O is pending, then the + state is CPU_WAIT. + <LI> + If not executing a kernel thread and no I/O is pending and some user + thread is paused waiting for memory to become available, then the state + is CPU_SXBRK. + <LI> + Otherwise the state is CPU_IDLE. +</OL> +<P> +These states are mutually exclusive and complete, so exactly one state +is assigned for each CPU at each clock interrupt.</P> +<P> +The kernel agent for PCP exports the following metrics:</P> +<TABLE BORDER="1"> + <CAPTION ALIGN="BOTTOM"><B>Table 1: Raw PCP CPU metrics</B></CAPTION> + <TR VALIGN="TOP"> + <TH>PCP Metric</TH> + <TH>Semantics</TH> + </TR> + <TR VALIGN="TOP"> + <TD><I><TT>kernel.all.cpu.user</TT></I></TD> + <TD>Time counted when in CPU_USER state.</TD> + </TR> + <TR VALIGN="TOP"> + <TD><I><TT>kernel.all.cpu.sys</TT></I></TD> + <TD>Time counted when in CPU_KERNEL state.</TD> + </TR> + <TR VALIGN="TOP"> + <TD><I><TT>kernel.all.cpu.intr</TT></I></TD> + <TD>Time counted when in CPU_INTR state.</TD> + </TR> + <TR VALIGN="TOP"> + <TD><I><TT>kernel.all.cpu.sxbrk</TT></I></TD> + <TD>Time counted when in CPU_SXBRK state (IRIX only).</TD> + </TR> + <TR VALIGN="TOP"> + <TD><I><TT>kernel.all.cpu.wait.total</TT></I></TD> + <TD>Time counted when in CPU_WAIT state (UNIX only).</TD> + </TR> + <TR VALIGN="TOP"> + <TD><I><TT>kernel.all.cpu.idle</TT></I></TD> + <TD>Time counted when in CPU_IDLE state.</TD> + </TR> +</TABLE> +<P> +These metrics are all "counters" in units of milliseconds +(cumulative since system boot time) so when displayed with most PCP +tools they are "rate converted" (sampled periodically and the +differences between consecutive values converted to time utilization in +units of milliseconds per second over the sample interval). Since the +raw values are aggregated across all CPUs, the time utilization for any +of the metrics above is in the range 0 to N*1000 for an N CPU system; +for some PCP tools this is reported as a percentage in the range 0 to +N*100 percent.</P> + +<TABLE WIDTH=100% BORDER=0 CELLPADDING=10 CELLSPACING=20> + <TR><TD BGCOLOR="#e2e2e2" WIDTH=70%><BR><IMG SRC="images/stepfwd_on.png" WIDTH=16 HEIGHT=16 BORDER=0> Using <I>pmchart</I> to display CPU activity (aggregated over all CPUs).<BR> +<PRE><B> +$ source /etc/pcp.conf +$ tar xzf $PCP_DEMOS_DIR/tutorials/cpuperf.tgz +$ pmchart -c CPU -t 2sec -O -0sec -a cpuperf/moomba.pmkstat +</B></PRE> +<BR> +This command will provide the interactive charts described here. +</TD></TR> +</TABLE> + +<P>On IRIX, the CPU_WAIT state is further subdivided into components describing +different types of "waiting":</P> +<OL> + <LI> + If executing a kernel thread waiting for a graphics context switch, + then the waiting classification W_GFXC is true. + <LI> + If executing a kernel thread waiting for a graphics FIFO operation to + complete, then the waiting classification W_GFXF is true. + <LI> + If not executing any thread and an I/O involving a block device (most + likely associated with a file system but independent of the CPU from + which the I/O was initiated), then the waiting classification W_IO is + true. + <LI> + If not executing any thread and an I/O involving a swap operation + (independent of the CPU from which the I/O was initiated), then the + waiting classification W_SWAP is true. + <LI> + If not executing any thread and an I/O involving a raw device is + pending (independent of the CPU from which the I/O was initiated), then + the waiting classification W_PIO is true. +</OL> +<P> +More than one of the group { W_IO, W_SWAP, W_PIO } can be true each +time, however this group and W_GFXC and W_GFXF are all mutually +exclusive. If the state is CPU_WAIT, then at least one of the +classifications must be true.</P> +<P> +The IRIX agent for PCP exports the following CPU "wait" +metrics, the sum of which approximately equals <I><TT>kernel.all.cpu.wait.total</TT></I>:</P> +<TABLE BORDER="1"> + <CAPTION ALIGN="BOTTOM"><B>Table 2: Raw PCP CPU wait metrics</B></CAPTION> + <TR VALIGN="TOP"> + <TH>PCP Metric</TH> + <TH>Semantics</TH> + </TR> + <TR VALIGN="TOP"> + <TD><I><TT>kernel.all.cpu.wait.gfxc</TT></I></TD> + <TD>Time counted when W_GFXC is true.</TD> + </TR> + <TR VALIGN="TOP"> + <TD><I><TT>kernel.all.cpu.wait.gfxf</TT></I></TD> + <TD>Time counted when W_GFXF is true.</TD> + </TR> + <TR VALIGN="TOP"> + <TD><I><TT>kernel.all.cpu.wait.io</TT></I></TD> + <TD>Time counted when W_IO is true.</TD> + </TR> + <TR VALIGN="TOP"> + <TD><I><TT>kernel.all.cpu.wait.pio</TT></I></TD> + <TD>Time counted when W_SWAP is true.</TD> + </TR> + <TR VALIGN="TOP"> + <TD><I><TT>kernel.all.cpu.wait.swap</TT></I></TD> + <TD>Time counted when W_PIO is true.</TD> + </TR> +</TABLE> +<P> +These metrics are all "counters" in units of milliseconds +(cumulative since system boot time) so when displayed with most PCP +tools they are "rate converted" (sampled periodically and the +differences between consecutive values converted to time utilization in +units of milliseconds per second over the sample interval). Since the +raw values are aggregated across all CPUs, the time utilization for any +of the metrics above is in the range 0 to N*1000 for an N CPU system; +for some PCP tools this is reported as a percentage in the range 0 to +N*100 percent.</P> +<P> +Note that for a multiprocessor system with one I/O pending, <B>all</B> + otherwise idle CPUs will be assigned the CPU_WAIT state. This may lead +to an over-estimate of the I/O wait time, as discussed in the +companion <A HREF="howto.diskperf.html">How to understand measures of +disk performance</A> document.</P> +<P> +In IRIX 6.5.2 additional instrumentation was added to help address the +wait time attribution by looking at the <B>number</B> of waiting +processes in various states, rather than the state of a CPU with +reference to the cardinality of the various sets of waiting processes. +The wait I/O queue length is defined as the number of processes +waiting on events corresponding to the classifications W_IO, W_SWAP or +W_PIO. The metrics shown in the table below are computed on only <B>one</B> + of the CPUs (the "clock-master") each clock interrupt.</P> +<TABLE BORDER="1"> + <CAPTION ALIGN="BOTTOM"><B>Table 3: Raw PCP wait I/O queue length + metrics</B></CAPTION> + <TR VALIGN="TOP"> + <TH>PCP Metric</TH> + <TH>Semantics</TH> + </TR> + <TR VALIGN="TOP"> + <TD><I><TT>kernel.all.waitio.queue</TT></I></TD> + <TD>Cumulative total of the wait I/O queue lengths, as observed + on each clock interrupt.</TD> + </TR> + <TR VALIGN="TOP"> + <TD><I><TT>kernel.all.waitio.occ</TT></I></TD> + <TD>Cumulative total of the number of times the wait I/O queue + length is greater than zero, as observed on each clock interrupt.</TD> + </TR> +</TABLE> +<P> +These metrics may be used with PCP tools as follows:</P> +<UL> + <LI> + Displaying <I><TT>kernel.all.waitio.queue</TT></I> with <I>pmval</I>, <I>pmdumptext</I>, <I>pmchart</I>, + etc. will display the time average of the wait I/O queue length + multiplied by the frequency of clock interrupts, i.e. by 100. + <LI> + Displaying <I><TT>kernel.all.waitio.occ</TT></I> with <I>pmval</I>, <I>pmdumptext</I>, <I>pmchart</I>, + etc. will display the probability that the wait I/O queue is not empty + multiplied by the frequency of clock interrupts, i.e. by 100. This + value (converted to a percentage) is reported as <I><TT>%wioocc</TT></I> + by the <B>-q</B> option of <I>sar.</I> + <LI> + Using <I>pmie</I> with the expression<BR> + <I><TT>kernel.all.waitio.queue / kernel.all.waitio.occ</TT></I><BR> + will report the stochastic average of the wait I/O queue length, + conditional upon the queue not being empty. This value is reported as <I><TT>wioq-sz</TT></I> + by the <B>-q</B> option of <I>sar.</I> +</UL> + +<P><BR></P> +<TABLE WIDTH=100% BORDER=0 CELLPADDING=0 CELLSPACING=0 BGCOLOR="#e2e2e2"> + <TR><TD WIDTH=100% BGCOLOR="#081c59"><P ALIGN=LEFT><FONT SIZE=5 COLOR="#ffffff"><B>The per-CPU variants</B></FONT></P></TD></TR> +</TABLE> +<P> +Inside the kernel, most of the metrics described above are +accumulated per-CPU for reasons of efficiency (to reduce the locking +overheads and minimize dirty cache-line traffic).</P> +<P> +PCP exports the per-CPU versions of the system-wide metrics with metric +names formed by replacing <B><I><TT>all</TT></I></B> by <B><I><TT>percpu</TT></I></B>, +e.g. <I><TT>kernel.percpu.cpu.user</TT></I>.</P> +<P> + +<TABLE WIDTH=100% BORDER=0 CELLPADDING=10 CELLSPACING=20> + <TR><TD BGCOLOR="#e2e2e2" WIDTH=70%><BR><IMG SRC="images/stepfwd_on.png" WIDTH=16 HEIGHT=16 BORDER=0> The <I>mpvis</I> tool provides 3-D visualization of these per-CPU metrics.<PRE><B> +$ mpvis -a cpuperf/babylon.percpu +</B></PRE> +<BR> +When the window is shown, use the <A HREF="timecontrol.html">PCP Archive Time Control</A> dialog to scroll through the archive (Fast Forward). +</TD></TR> +</TABLE> + +<P><BR></P> +<TABLE WIDTH=100% BORDER=0 CELLPADDING=0 CELLSPACING=0 BGCOLOR="#e2e2e2"> + <TR><TD WIDTH=100% BGCOLOR="#081c59"><P ALIGN=LEFT><FONT SIZE=5 COLOR="#ffffff"><B>Reconciling sar -u and PCP CPU performance metrics</B></FONT></P></TD></TR> +</TABLE> +<P> +The <I>sar</I> metrics are scaled based on the number of CPUs and +expressed in percentages, PCP metrics are in units of milliseconds per +second after rate conversion; this explains the PCP metric <I><TT>hinv.ncpu</TT></I> + and the constants 100 and 1000 in the expressions below.</P> +<P> +When run with a <B>-u</B> option, <I>sar</I> reports the following:</P> +<TABLE BORDER="1"> + <CAPTION ALIGN="BOTTOM"><B>Table 3: PCP and sar metric equivalents</B></CAPTION> + <TR> + <TH><I>sar</I><BR> + metric</TH> + <TH>PCP equivalent (assuming rate conversion)</TH> + </TR> + <TR VALIGN="TOP"> + <TD><I><TT>%usr</TT></I></TD> + <TD>100 * <I><TT>kernel.all.cpu.user</TT></I> / (<I><TT>hinv.ncpu </TT></I>* + 1000)</TD> + </TR> + <TR VALIGN="TOP"> + <TD><I><TT>%sys</TT></I></TD> + <TD>100 * <I><TT>kernel.all.cpu.sys</TT></I> / (<I><TT>hinv.ncpu </TT></I>* + 1000)</TD> + </TR> + <TR VALIGN="TOP"> + <TD><I><TT>%intr</TT></I></TD> + <TD>100 * <I><TT>kernel.all.cpu.intr</TT></I> / (<I><TT>hinv.ncpu </TT></I>* + 1000)</TD> + </TR> + <TR VALIGN="TOP"> + <TD><I><TT>%wio</TT></I></TD> + <TD>100 * <I><TT>kernel.all.cpu.wait.total</TT></I> / (<I><TT>hinv.ncpu </TT></I>* + 1000)</TD> + </TR> + <TR VALIGN="TOP"> + <TD><I><TT>%idle</TT></I></TD> + <TD>100 * <I><TT>kernel.all.cpu.idle</TT></I> / (<I><TT>hinv.ncpu </TT></I>* + 1000)</TD> + </TR> + <TR VALIGN="TOP"> + <TD><I><TT>%sbrk</TT></I></TD> + <TD>100 * <I><TT>kernel.all.cpu.sxbrk </TT></I>/ (<I><TT>hinv.ncpu </TT></I>* + 1000)</TD> + </TR> + <TR VALIGN="TOP"> + <TD><I><TT>%wfs</TT></I></TD> + <TD>100 * <I><TT>kernel.all.cpu.wait.io</TT></I> / <I><TT>kernel.all.cpu.wait.total</TT></I></TD> + </TR> + <TR VALIGN="TOP"> + <TD><I><TT>%wswp</TT></I></TD> + <TD>100 * <I><TT>kernel.all.cpu.wait.swap</TT></I> / <I><TT>kernel.all.cpu.wait.total</TT></I></TD> + </TR> + <TR> + <TD><I><TT>%wphy</TT></I></TD> + <TD>100 * <I><TT>kernel.all.cpu.wait.pio</TT></I> / <I><TT>kernel.all.cpu.wait.total</TT></I></TD> + </TR> + <TR> + <TD><I><TT>%wgsw</TT></I></TD> + <TD>100 * <I><TT>kernel.all.cpu.wait.gfxc</TT></I> / <I><TT>kernel.all.cpu.wait.total</TT></I></TD> + </TR> + <TR> + <TD><I><TT>%wfif</TT></I></TD> + <TD>100 * <I><TT>kernel.all.cpu.wait.gfxf</TT></I> / <I><TT>kernel.all.cpu.wait.total</TT></I></TD> + </TR> +</TABLE> + +<P><BR></P> +<TABLE WIDTH=100% BORDER=0 CELLPADDING=0 CELLSPACING=0 BGCOLOR="#e2e2e2"> + <TR><TD WIDTH=100% BGCOLOR="#081c59"><P ALIGN=LEFT><FONT SIZE=5 COLOR="#ffffff"><B>The load average</B></FONT></P></TD></TR> +</TABLE> +<P> +The "load average" is reported by <I>uptime</I>, <I>top</I>, +etc. and the PCP metric <I><TT>kernel.all.load</TT></I>.</P> +<P> +The load average is an indirect measure of the demand for CPU +resources. It is calculated using the previous load average (<I>load</I>) +and the number of currently runnable processes (<I>nrun</I>) and an +exponential dampening expression, e.g. for the "1 minute" +average, the expression is:</P> +<PRE> +load = exp(-5/60) * load + (1 - exp(-5/60)) * nrun +</PRE> +<P> +The three load averages use different exponential constants and are all +re-computed every 5 seconds.</P> +<P> +<I>nrun</I> is computed as follows:</P> +<OL> + <LI> + Inspect every process. + <LI> + If the process is not likely to be runnable in the near future (state + not SRUN), ignore it. + <LI> + Inspect every thread of the process. + <LI> + If the thread is sleeping and not currently expanding its address space + (state not SXBRK) and not in a long-term sleep, increment <I>nrun.</I> + + <LI> + If the thread is stopped, ignore it. + <LI> + Otherwise if the thread is not "weightless" (being ignored by + the scheduler), increment <I>nrun.</I> +</OL> +<P> +Note that the "run queue length" (a variant of which is +reported by the <B>-q</B> option of <I>sar</I>) counts processes using +a similar, but not identical algorithm:</P> +<OL> + <LI> + Inspect every process. + <LI> + If the process is not likely to be runnable in the near future (state + not SRUN), ignore it. + <LI> + Inspect every thread of the process. + <LI> + If the thread is sleeping and not currently expanding its address space + (state not SXBRK), ignore it + <LI> + If the thread is stopped, ignore it. + <LI> + Otherwise increment the "run queue length". +</OL> + +<P><BR></P> +<HR> +<CENTER> +<TABLE WIDTH=100% BORDER=0 CELLPADDING=0 CELLSPACING=0> + <TR> <TD WIDTH=50%><P>Copyright © 2007-2010 <A HREF="http://www.aconex.com/"><FONT COLOR="#000060">Aconex</FONT></A><BR>Copyright © 2000-2004 <A HREF="http://www.sgi.com/"><FONT COLOR="#000060">Silicon Graphics Inc</FONT></P></TD> + <TD WIDTH=50%><P ALIGN=RIGHT><A HREF="http://pcp.io/"><FONT COLOR="#000060">PCP Site</FONT></A><BR>Copyright © 2012-2014 <A HREF="http://www.redhat.com/"><FONT COLOR="#000060">Red Hat</FONT></P></TD> </TR> +</TABLE> +</CENTER> +</BODY> +</HTML> diff --git a/man/html/howto.diskmodel.html b/man/html/howto.diskmodel.html new file mode 100644 index 0000000..ae73aaa --- /dev/null +++ b/man/html/howto.diskmodel.html @@ -0,0 +1,163 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> +<HTML> +<HEAD> + <meta http-equiv="content-type" content="text/html; charset=utf-8"> + <meta http-equiv="content-style-type" content="text/css"> + <link href="pcpdoc.css" rel="stylesheet" type="text/css"> + <link href="images/pcp.ico" rel="icon" type="image/ico"> + <TITLE>Comparing Storage Performance</TITLE> +</HEAD> +<BODY LANG="en-AU" TEXT="#000060" DIR="LTR"> +<TABLE WIDTH=100% BORDER=0 CELLPADDING=0 CELLSPACING=0 STYLE="page-break-before: always"> + <TR> <TD WIDTH=64 HEIGHT=64><FONT COLOR="#000080"><A HREF="http://pcp.io/"><IMG SRC="images/pcpicon.png" NAME="pmcharticon" ALIGN=TOP WIDTH=64 HEIGHT=64 BORDER=0></A></FONT></TD> + <TD WIDTH=1><P> </P></TD> + <TD WIDTH=500><P VALIGN=MIDDLE ALIGN=LEFT><A HREF="index.html"><FONT COLOR="#cc0000">Home</FONT></A> · <A HREF="lab.pmchart.html"><FONT COLOR="#cc0000">Charts</FONT></A> · <A HREF="timecontrol.html"><FONT COLOR="#cc0000">Time Control</FONT></A></P></TD> + </TR> +</TABLE> +<H1 ALIGN=CENTER STYLE="margin-top: 0.48cm; margin-bottom: 0.32cm"><FONT SIZE=7>Comparing storage performance</FONT></H1> +<TABLE WIDTH=15% BORDER=0 CELLPADDING=5 CELLSPACING=10 ALIGN=RIGHT> + <TR><TD BGCOLOR="#e2e2e2"><IMG SRC="images/system-search.png" WIDTH=16 HEIGHT=16 BORDER=0> <I>Tools</I><BR><PRE> +pmlogger +pmlogsummary +PCP::LogSummary +pmchart +pmafm +perl +fio +</PRE></TD></TR> +</TABLE> +<P>When comparing multiple storage (or any) systems in terms of performance, it is often useful to create a simulation of the load observed in the actual production environment. Reasons for doing this mainly centre around the difficulty in running a production load in the evaluation environment. For example, recreating databases, filesystems, sanitising user data, installing and configuring (possibly licensed) software, perhaps needing large amounts of time from specialists skilled in those areas - these can all be prohibitive. In such situations it is ideal to model or simulate a workload rather than using an actual production load. When comparing a new system to an existing one, or comparing competing technologies from different vendors, a quick way to run a simulated workload is invaluable. +</P> +<P>PCP provides handy tools for providing confidence that a simulation matches reality. Here we demonstrate several of these tools and techniques for applying them toward modelling a workload, using an iSCSI storage comparison as an example. We will also use the open source <i><b>fio</b></i> utility to generate the actual I/O workload, once we've used PCP to characterise it, and finally use PCP again to verify the simulations produced. +</P> + +<P><BR></P> +<TABLE WIDTH=100% BORDER=0 CELLPADDING=0 CELLSPACING=0 BGCOLOR="#e2e2e2"> + <TR><TD WIDTH=100% BGCOLOR="#081c59"><P ALIGN=LEFT><FONT SIZE=5 COLOR="#ffffff"><B>Step 1 - Gathering Baseline Data</B></FONT></P></TD></TR> +</TABLE> +<P>For this example we will be using data gathered from two production systems - a NAS machine and a database.</P> +<P>These are extracts from production logs that showed a typical load for those two machines during business hours. The data was gathered using <i>pmlogger</i> and the archive management scripts <i>pmlogger_daily</i>. It was reduced to only the metrics of interest for our evaluation using <i>pmlogextract</i>. Setting up and managing logging of performance data in this way is demonstrated <A HREF="lab.pmlogger.html">elsewhere</A>.</P> +<TABLE WIDTH=100% BORDER=0 CELLPADDING=10 CELLSPACING=20> + <TR><TD BGCOLOR="#e2e2e2" WIDTH=70%><BR><IMG SRC="images/stepfwd_on.png" WIDTH=16 HEIGHT=16 BORDER=0> If you have the tutorial installed, in a command shell enter:<BR> +<PRE><B> +$ source /etc/pcp.conf +<BR> +$ tar xzf $PCP_DEMOS_DIR/tutorials/diskmodel.tgz +<BR> +$ cd diskmodel +<BR> +$ echo * +<BR><i> model.fio model.pl model.view model.xls</i> +<BR><i> dbdata.0 dbdata.index dbdata.meta</i> +<BR><i> nasdata.0 nasdata.index nasdata.meta</i> +<BR><i> nasread.out naswrite.out</i> +<BR> +$ pmafm model.folio run pmchart -t 15 -c model.view +<BR> +</B></PRE> +This command will provide the interactive charts seen here... +</TD> +<TD><P VALIGN=MIDDLE ALIGN=RIGHT><CENTER><BR><IMG ALIGN=RIGHT SRC="images/model_dbload.png" BORDER=0></CENTER></P></TD> +</TR> +</TABLE> +<P>As an aside, the NAS is a Redhat Enterprise Linux 5 machine serving NFS, the database is running Windows Server 2008 and SQL Server 2008 - but this does not really matter for our modelling purposes.</P> +<P><BR></P> +<TABLE WIDTH=100% BORDER=0 CELLPADDING=0 CELLSPACING=0 BGCOLOR="#e2e2e2"> + <TR><TD WIDTH=100% BGCOLOR="#081c59"><P ALIGN=LEFT><FONT SIZE=5 COLOR="#ffffff"><B>Step 2 - Baseline Summary</B></FONT></P></TD></TR> +</TABLE> +<P>Next we use the <i><b>pmlogsummary</b></i> utility to extract a statistical summary of key disk metrics. We do this indirectly, in this example, using the <i>PCP::LogSummary</i> Perl module and a custom wrapper script (<A HREF="diskmodel/model.pl">model.pl</A>). This generates a spreadsheet with all of the key aspects of performance that our model must aim to reproduce. +</P> +<P>As part of this phase of analysis, we must identify the key aspects of +the workload we are analysing and break it down into its components, +using information we know about the modelled environment. This +level of breakdown is useful, as it lets us make informed statements later +about how well the model simulates each component. +</P> +<TABLE WIDTH=100% BORDER=0 CELLPADDING=10 CELLSPACING=10> +<TR> +<TD><P VALIGN=MIDDLE ALIGN=LEFT><CENTER><BR><IMG ALIGN=LEFT SRC="images/model_nasload.png" BORDER=0></CENTER></P></TD> +<TD><P> In this example we have a fairly simple NAS workload where files are +only ever written once (and never updated), and subsequently read many +times over, and never deleted. We identify typical file sizes through +what we know about our production environment, and we know that we are +data dominated rather than metadata dominated - so the model will focus +on issuing sequential reads and writes to different files, using a mix +of I/O sizes that produce the averages and ratios identified in the +spreadsheet, and will never overwrite or truncate files. </P> +</TD></TR> +<TR> +<TD><P> In the database case, we identify two workloads, with a total of three +components. There is an interactive load (many small random reads +and regular log writes) and also a reporting (business intelligence) +load. The interactive load is constant, has read and write components - the +write components include log writes once every minute, the reads are +constant and small (identified in the spreadsheet). The reporting load +is completely read dominated (table scans). The regular background write +activity does proceed during this time, so our model will cater for this +characteristic by generating the log write traffic separately and then +using that in both loads. </P> +</TD> +<TD><P VALIGN=MIDDLE ALIGN=RIGHT><CENTER><BR><IMG ALIGN=RIGHT SRC="images/model_biload.png" BORDER=0></CENTER></P></TD> +</TABLE> +<TABLE WIDTH=100% BORDER=0 CELLPADDING=10 CELLSPACING=20> + <TR><TD BGCOLOR="#e2e2e2"><IMG SRC="images/stepfwd_on.png" WIDTH=16 HEIGHT=16 BORDER=0> Examine the (trivial) <A HREF="diskmodel/model.pl">model.pl</A> Perl script and note its basic control flow:<BR><PRE> +<B>$ cat model.pl</B> +# Setup some spreadsheet metadata - fonts, colors, etc +# Create a worksheet, configure a few columns +# Write data - starting at row 0 and column 0, moving across and down +</PRE> +If you have the PCP::LogSummary and SpreadSheet::WriteExcel Perl modules installed, run it: +<BR><PRE> +<B>$ perl model.pl</B> +</PRE> +</TD></TR> +</TABLE> +<CENTER><IMG SRC="images/model_spreadsheet.png" WIDTH=912 HEIGHT=552 BORDER=1></CENTER> + +<P><BR></P> +<TABLE WIDTH=100% BORDER=0 CELLPADDING=0 CELLSPACING=0 BGCOLOR="#e2e2e2"> + <TR><TD WIDTH=100% BGCOLOR="#081c59"><P ALIGN=LEFT><FONT SIZE=5 COLOR="#ffffff"><B>Step 3 - Simulation</B></FONT></P></TD></TR> +</TABLE> +<P>Armed with our workload summary, we will begin to produce a model. To generate I/O we will use the Linux <i><b>fio</i></b> utility. This reads a workload description from a configuration file, preallocates files in a test directory, then runs the defined workload, and produces a statistical summary of the I/O characteristics observed. In our case, where we are planning to compare different vendors storage, we are particular interested in the I/O latency characteristics while running our different workloads, and to a lesser extent the throughput and IOPS numbers - these should be constant thanks to our workload generator and as long as they are achieved, its the latency statistics that concern us (maximum, average, standard deviation). +</P> +<P>The <i><b>fio</b></i> configuration file which generates our workloads is <A HREF="diskmodel/model.fio">model.fio</A>. While testing the model, the I/O submission patterns have been monitored using the same techniques as before to ensure the generated load matches as closely as possible with production - this was an iterative process, fiddling <B>fio</B> knobs until good matches were achieved. </P> +<P>Below are an extract of the results, highlighting some of the statistics that are of particular interest in our scenario. These numbers suggest we have matched up with our production load from the spreadsheet (IOPs and throughput) and the latency numbers give good points of comparison when we run the model against other configurations. +</P> +<TABLE WIDTH=100% BORDER=0 CELLPADDING=10 CELLSPACING=20> + <TR><TD BGCOLOR="#e2e2e2">Extracts from <A HREF="diskmodel/nasread.out">nasread.out</A> and <A HREF="diskmodel/nasread.out">naswrite.out</A><BR> +<PRE> + Description : [NAS reads workload model] + read : io=739MB, bw=<B>2,523KB/s</B>, iops=<B>78</B>, runt=300003msec + clat (usec): min=190, max=176K, avg=3343.45, stdev=2480.24 + lat (usec): min=191, max=176K, avg=3344.00, stdev=2480.24 + bw (KB/s) : min= 2301, max= 2808, per=25.02%, avg=2525.62, stdev=40.32 + ... + Description : [NAS writes workload model] + write: io=361MB, bw=<B>1,233KB/s</B>, iops=<B>37</B>, runt=300026msec + clat (usec): min=276, max=1,325K, avg=2721.65, stdev=47070.32 + lat (usec): min=277, max=1,325K, avg=2722.20, stdev=47070.32 + bw (KB/s) : min= 34, max= 4486, per=25.12%, avg=1239.08, stdev=178.78 +</PRE> +</TABLE> + +<P><BR></P> +<TABLE WIDTH=100% BORDER=0 CELLPADDING=0 CELLSPACING=0 BGCOLOR="#e2e2e2"> + <TR><TD WIDTH=100% BGCOLOR="#081c59"><P ALIGN=LEFT><FONT SIZE=5 COLOR="#ffffff"><B>Step 4 - Profit!</B></FONT></P></TD></TR> +</TABLE> +<P>Now that we have an easily reproducible workload, we can throw it at any number of different devices (different vendors), configurations (different RAID configurations, with snapshots) and have a reasonable level of confidence that observations will resemble what would happen in production. +</P> +<P>Note that the latency numbers that <B><I>fio</I></B> has calculated for +us are excellent indicators - if we did not have these, we could make use +of the device utilisation PCP metrics (<i>disk.dev.avactive</i> or +<i>disk.dev.idle</i>) as alternate comparison points.</P> + +<P><BR></P> +<HR> +<CENTER> +<TABLE WIDTH=100% BORDER=0 CELLPADDING=0 CELLSPACING=0> + <TR> <TD WIDTH=50%><P>Copyright © 2007-2010 <A HREF="http://www.aconex.com/"><FONT COLOR="#000060">Aconex</FONT></A><BR>Copyright © 2000-2004 <A HREF="http://www.sgi.com/"><FONT COLOR="#000060">Silicon Graphics Inc</FONT></P></TD> + <TD WIDTH=50%><P ALIGN=RIGHT><A HREF="http://pcp.io/"><FONT COLOR="#000060">PCP Site</FONT></A><BR>Copyright © 2012-2014 <A HREF="http://www.redhat.com/"><FONT COLOR="#000060">Red Hat</FONT></P></TD> </TR> +</TABLE> +</CENTER> +</BODY> +</HTML> diff --git a/man/html/howto.diskperf.html b/man/html/howto.diskperf.html new file mode 100644 index 0000000..ffedfa0 --- /dev/null +++ b/man/html/howto.diskperf.html @@ -0,0 +1,754 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> +<!-- + (c) Copyright 2000-2004 Silicon Graphics Inc. All rights reserved. + Permission is granted to copy, distribute, and/or modify this document + under the terms of the Creative Commons Attribution-Share Alike, Version + 3.0 or any later version published by the Creative Commons Corp. A copy + of the license is available at + http://creativecommons.org/licenses/by-sa/3.0/us/ . +--> +<HTML> +<HEAD> + <meta http-equiv="content-type" content="text/html; charset=utf-8"> + <meta http-equiv="content-style-type" content="text/css"> + <link href="pcpdoc.css" rel="stylesheet" type="text/css"> + <link href="images/pcp.ico" rel="icon" type="image/ico"> + <TITLE>How to understand disk performance</TITLE> +</HEAD> +<BODY LANG="en-AU" TEXT="#000060" DIR="LTR"> +<TABLE WIDTH=100% BORDER=0 CELLPADDING=0 CELLSPACING=0 STYLE="page-break-before: always"> + <TR> <TD WIDTH=64 HEIGHT=64><FONT COLOR="#000080"><A HREF="http://pcp.io/"><IMG SRC="images/pcpicon.png" NAME="pmcharticon" ALIGN=TOP WIDTH=64 HEIGHT=64 BORDER=0></A></FONT></TD> + <TD WIDTH=1><P> </P></TD> + <TD WIDTH=500><P VALIGN=MIDDLE ALIGN=LEFT><A HREF="index.html"><FONT COLOR="#cc0000">Home</FONT></A> · <A HREF="lab.pmchart.html"><FONT COLOR="#cc0000">Charts</FONT></A> · <A HREF="timecontrol.html"><FONT COLOR="#cc0000">Time Control</FONT></A></P></TD> + </TR> +</TABLE> +<H1 ALIGN=CENTER STYLE="margin-top: 0.48cm; margin-bottom: 0.32cm"><FONT SIZE=7>How to understand measures of disk performance</FONT></H1> +<TABLE WIDTH=15% BORDER=0 CELLPADDING=5 CELLSPACING=10 ALIGN=RIGHT> + <TR><TD BGCOLOR="#e2e2e2"><IMG SRC="images/system-search.png" WIDTH=16 HEIGHT=16 BORDER=0> <I>Tools</I><BR><PRE> +pmchart +sar +</PRE></TD></TR> +</TABLE> +<P>This chapter of the Performance Co-Pilot tutorial provides some hints +on how to interpret and understand the various measures of disk +performance.</P> +<P>For an explanation of Performance Co-Pilot terms and acronyms, consult +the <A HREF="glossary.html">PCP glossary</A>.</P> + +<P><BR></P> +<TABLE WIDTH=100% BORDER=0 CELLPADDING=0 CELLSPACING=0 BGCOLOR="#e2e2e2"> + <TR><TD WIDTH=100% BGCOLOR="#081c59"><P ALIGN=LEFT><FONT SIZE=5 COLOR="#ffffff"><B>Reconciling sar -d and PCP disk performance metrics</B></FONT></P></TD></TR> +</TABLE> +<P> +Both <I>sar</I> and Performance Co-Pilot (PCP) use a common collection +of disk performance instrumentation from the block layer in the kernel, +however the disk performance metrics provided by <I>sar</I> and PCP +differ in their derivation and semantics. This document +is an attempt to explain these differences. </P> +<P> +It is convenient to define the ``response time'' to be the time to +complete a disk operation as the sum of the time spent:</P> +<UL> + <LI> + entering the read() or write() system call and set up for an I/O + operation (time here is CPU bound and is assumed to be negligible per + I/O) + <LI> + in a queue of pending requests waiting to be handed to the device + controller (the ``queue time'') + <LI> + the time between the request being handed to the device controller and + the end of transfer interrupt (the ``(device) service time''), + typically composed of delays due to request scheduling at the + controller, bus arbitration, possible seek time, rotational latency, + data transfer, etc. + <LI> + time to process the end of transfer interrupt, housekeeping at the end + of an I/O operation and return from the read() or write() system call + (time here is CPU bound and also assumed to be negligible per I/O) +</UL> +<P> +Note that while the CPU time per I/O is assumed to be small in +relationship to the times involving operations at the device level, +when the system-wide I/O rate is high (and it could be tens of +thousands of I/Os per second on a very large configuration), the <B>aggregate</B> + CPU demand to support this I/O activity may be significant.</P> +<P> +The kernel agents for PCP export the following metrics for each disk spindle:</P> +<TABLE BORDER="1"> + <CAPTION ALIGN="BOTTOM"><B>Table 1: Raw PCP disk metrics</B></CAPTION> + <TR VALIGN="TOP"> + <TH>Metric</TH> + <TH>Units</TH> + <TH>Semantics</TH> + </TR> + <TR VALIGN="TOP"> + <TD><I><TT>disk.dev.read</TT></I></TD> + <TD>number</TD> + <TD>running total of <B>read</B> I/O requests since boot time</TD> + </TR> + <TR VALIGN="TOP"> + <TD><I><TT>disk.dev.write</TT></I></TD> + <TD>number</TD> + <TD>running total of <B>write</B> I/O requests since boot time</TD> + </TR> + <TR VALIGN="TOP"> + <TD><I><TT>disk.dev.total</TT></I></TD> + <TD>number</TD> + <TD>running total of I/O requests since boot time, equals <I><TT>disk.dev.read</TT></I> + + <I><TT>disk.dev.write</TT></I></TD> + </TR> + <TR VALIGN="TOP"> + <TD><I><TT>disk.dev.blkread</TT></I></TD> + <TD>number</TD> + <TD>running total of data <B>read</B> since boot time in units + of 512-byte blocks</TD> + </TR> + <TR VALIGN="TOP"> + <TD><I><TT>disk.dev.blkwrite</TT></I></TD> + <TD>number</TD> + <TD>running total of data <B>written</B> since boot time in + units of 512-byte blocks</TD> + </TR> + <TR VALIGN="TOP"> + <TD><I><TT>disk.dev.blktotal</TT></I></TD> + <TD>number</TD> + <TD>running total of data <B>read</B> or <B>written</B> since + boot time in units of 512-bytes, equals <I><TT>disk.dev.blkread + + disk.dev.blkwrite</TT></I></TD> + </TR> + <TR> + <TD><I><TT>disk.dev.read_bytes</TT></I></TD> + <TD>Kbytes</TD> + <TD>running total of data <B>read</B> since boot time in units + of Kbytes</TD> + </TR> + <TR> + <TD><I><TT>disk.dev.write_bytes</TT></I></TD> + <TD>Kbytes</TD> + <TD>running total of data <B>written</B> since boot time in + units of Kbytes</TD> + </TR> + <TR> + <TD><I><TT>disk.dev.bytes</TT></I></TD> + <TD>Kbytes</TD> + <TD>running total of data <B>read</B> or <B>written</B> since + boot time in units of Kbytes, equals <I><TT>disk.dev.read_bytes + + disk.dev.write_bytes</TT></I></TD> + </TR> + <TR VALIGN="TOP"> + <TD><I><TT>disk.dev.active</TT></I></TD> + <TD>milliseconds</TD> + <TD>running total (milliseconds since boot time) of time this + device has been busy servicing at least one I/O request</TD> + </TR> + <TR VALIGN="TOP"> + <TD><I><TT>disk.dev.response</TT></I></TD> + <TD>milliseconds</TD> + <TD>running total (milliseconds since boot time) of the + response time for all completed I/O requests</TD> + </TR> +</TABLE> +<P> +These metrics are all "counters" so when displayed with most +PCP tools, they are sampled periodically and the differences between +consecutive values converted to rates or time utilization over the +sample interval as follows:</P> +<TABLE BORDER="1"> + <CAPTION ALIGN="BOTTOM"><B>Table 2: PCP disk metrics as reported by + most PCP tools</B></CAPTION> + <TR VALIGN="TOP"> + <TH>Metric</TH> + <TH>Units</TH> + <TH>Semantics</TH> + </TR> + <TR VALIGN="TOP"> + <TD><I><TT>disk.dev.read</TT></I></TD> + <TD>number per second</TD> + <TD><B>read</B> I/O requests per second (or <B>read</B> IOPS)</TD> + </TR> + <TR VALIGN="TOP"> + <TD><I><TT>disk.dev.write</TT></I></TD> + <TD>number per second</TD> + <TD><B>write</B> I/O requests per second (or <B>write</B> IOPS)</TD> + </TR> + <TR VALIGN="TOP"> + <TD><I><TT>disk.dev.total</TT></I></TD> + <TD>number per second</TD> + <TD>I/O requests per second (or IOPS)</TD> + </TR> + <TR VALIGN="TOP"> + <TD><I><TT>disk.dev.blkread</TT></I></TD> + <TD>number per second</TD> + <TD>2 * (Kbytes <B>read</B> per second)</TD> + </TR> + <TR VALIGN="TOP"> + <TD><I><TT>disk.dev.blkwrite</TT></I></TD> + <TD>number per second</TD> + <TD>2 * (Kbytes <B>written </B>per second)</TD> + </TR> + <TR VALIGN="TOP"> + <TD><I><TT>disk.dev.blktotal</TT></I></TD> + <TD>number per second</TD> + <TD>2 * (Kbytes <B>read</B> or <B>written</B> per second)</TD> + </TR> + <TR> + <TD><I><TT>disk.dev.read_bytes</TT></I></TD> + <TD>Kbytes per second</TD> + <TD>Kbytes <B>read</B> per second</TD> + </TR> + <TR> + <TD><I><TT>disk.dev.write_bytes</TT></I></TD> + <TD>Kbytes per second</TD> + <TD>Kbytes <B>written </B>per second</TD> + </TR> + <TR> + <TD><I><TT>disk.dev.bytes</TT></I></TD> + <TD>Kbytes per second</TD> + <TD>Kbytes <B>read</B> or <B>written</B> per second</TD> + </TR> + <TR VALIGN="TOP"> + <TD><I><TT>disk.dev.active</TT></I></TD> + <TD>time utilization</TD> + <TD>fraction of time device was "busy" over the + sample interval (either in the range 0.0-1.0 or expressed as a + percentage in the rance 0-100); in this context "busy" means + servicing one or more I/O requests</TD> + </TR> + <TR VALIGN="TOP"> + <TD><I><TT>disk.dev.response</TT></I></TD> + <TD>time utilization</TD> + <TD>time average of the response time over the interval; this + is a slightly strange metric in that values larger than 1.0 (or 100%) + imply either device saturation, or controller saturation or a very + ``bursty'' request arrival pattern -- in isolation there is <B>no + sensible interpretation</B> of the rate converted value + this metric </TD> + </TR> +</TABLE> +<P> +The <I>sar</I> metrics <I><TT>avque</TT></I>, <I><TT>avwait</TT></I> + and <I><TT>avserv</TT></I> are subject to widespread +misinterpretation, and so warrant some special explanation. They may be +understood with the aid of a simple illustrative example. Consider the +following snapshot of disk activity in which the response time has been +simplified to be a multiple of 10 milliseconds for each I/O operation +over a 100 millisecond sample interval (this is an unlikely +simplification, but makes the arithmetic easier).</P> +<CENTER><P ALIGN="CENTER"> +<IMG SRC="images/sar-d.png" WIDTH="529" HEIGHT="152"></P> +</CENTER><P> +Each green block represents a 4 Kbyte read. Each red block represents a +16Kbyte write.</P> +<DL> + <DT> + <I><TT>avque</TT></I> + <DD> + <P> + The <B><I>stochastic</I></B> <B><I>average</I></B> of the + "queue" length sampled just before each I/O is complete, + where ``queue'' here includes those requests in the queue <B>and</B> + those being serviced by the device controller. Unfortunately the <B><I>stochastic</I></B> + <B><I>average</I></B> of a queue length is not the same as the + more commonly understood <B><I>temporal</I></B> or <B><I>time</I></B> + <B><I>average</I></B> of a queue length. </P> + <P> + In the table below, <B>R</B> is the contribution to the sum of the + response times, <B>Qs</B> is the contribution to the sum of the + queue length used to compute the <B><I>stochastic</I></B> average + and <B>Qt</B> is the contribution to the sum of the queue length + × time used to compute the <B><I>temporal</I></B> average. </P> +</DL> + <CENTER> + <TABLE BORDER="1"> + <TR> + <TH ALIGN="CENTER"> + <B>Time</B><BR> + (msec)</TH> + <TH ALIGN="CENTER"><B>Event</B></TH> + <TH ALIGN="CENTER"><B>R</B><BR> + (msec)</TH> + <TH ALIGN="CENTER"><B>Qs</B></TH> + <TH ALIGN="CENTER"><B>Qt</B><BR> + (msec)</TH> + </TR> + <TR> + <TD ALIGN="RIGHT">300</TD> + <TD>Start I/O #1 (write)</TD> + <TD ALIGN="RIGHT"> </TD> + <TD ALIGN="RIGHT"> </TD> + <TD ALIGN="RIGHT"> </TD> + </TR> + <TR> + <TD ALIGN="RIGHT">320</TD> + <TD>End I/O #1</TD> + <TD ALIGN="RIGHT">20</TD> + <TD ALIGN="RIGHT">1</TD> + <TD ALIGN="RIGHT">1×20</TD> + </TR> + <TR> + <TD ALIGN="RIGHT">320</TD> + <TD>Start I/O #2 (read)</TD> + <TD ALIGN="RIGHT"> </TD> + <TD ALIGN="RIGHT"> </TD> + <TD ALIGN="RIGHT"> </TD> + </TR> + <TR> + <TD ALIGN="RIGHT">320</TD> + <TD>Start I/O #3 (read)</TD> + <TD ALIGN="RIGHT"> </TD> + <TD ALIGN="RIGHT"> </TD> + <TD ALIGN="RIGHT"> </TD> + </TR> + <TR> + <TD ALIGN="RIGHT">330</TD> + <TD>End I/O #2</TD> + <TD ALIGN="RIGHT">10</TD> + <TD ALIGN="RIGHT">2</TD> + <TD ALIGN="RIGHT">2×10</TD> + </TR> + <TR> + <TD ALIGN="RIGHT">340</TD> + <TD>End I/O #3</TD> + <TD ALIGN="RIGHT">20</TD> + <TD ALIGN="RIGHT">1</TD> + <TD ALIGN="RIGHT">1×10</TD> + </TR> + <TR> + <TD ALIGN="RIGHT">360</TD> + <TD>Start I/O #4 (write)</TD> + <TD ALIGN="RIGHT"> </TD> + <TD ALIGN="RIGHT"> </TD> + <TD ALIGN="RIGHT"> </TD> + </TR> + <TR> + <TD ALIGN="RIGHT">360</TD> + <TD>Start I/O #5 (read)</TD> + <TD ALIGN="RIGHT"> </TD> + <TD ALIGN="RIGHT"> </TD> + <TD ALIGN="RIGHT"> </TD> + </TR> + <TR> + <TD ALIGN="RIGHT">360</TD> + <TD>Start I/O #6 (read)</TD> + <TD ALIGN="RIGHT"> </TD> + <TD ALIGN="RIGHT"> </TD> + <TD ALIGN="RIGHT"> </TD> + </TR> + <TR> + <TD ALIGN="RIGHT">370</TD> + <TD>End I/O #6</TD> + <TD ALIGN="RIGHT">10</TD> + <TD ALIGN="RIGHT">3</TD> + <TD ALIGN="RIGHT">3×10</TD> + </TR> + <TR> + <TD ALIGN="RIGHT">380</TD> + <TD>End I/O #5</TD> + <TD ALIGN="RIGHT">20</TD> + <TD ALIGN="RIGHT">2</TD> + <TD ALIGN="RIGHT">2×10</TD> + </TR> + <TR> + <TD ALIGN="RIGHT">400</TD> + <TD>End I/O #4</TD> + <TD ALIGN="RIGHT">40</TD> + <TD ALIGN="RIGHT">1</TD> + <TD ALIGN="RIGHT">1×20</TD> + </TR> +</TABLE> +</CENTER> +<DL> + <DT> + + <DD> + <P> + The (stochastic) average response time is sum(<B>R</B>) / 6 = 120 / + 6 = 20 msec.</P> + <P> + The <B><I>stochastic</I></B> <B><I>average</I></B> of the queue + length is sum(<B>Qs</B>) / 6 = 10 / 6 = 1.67.</P> + <P> + The <B><I>temporal </I></B> <B><I>average</I></B> of the queue + length is sum(<B>Qt</B>) / 100 = 120 / 100 = 1.20.</P> + <P> + Even in this simple example, the two methods for computing the "average" + queue length produce different answers. As the inter-arrival rate + for I/O requests becomes more variable, and particularly when many I/O + requests are issued in a short period of time followed by a period of + quiescence, the two methods produce radically different results.</P> + <P> + For example if the idle period in the example above was 420 msec rather + than 20 msec, then the <B><I>stochastic</I></B> <B><I>average</I></B> + would remain unchanged at 1.67, but the <B><I>temporal average</I></B> + would fall to 120/500 = 0.24 ... given that this disk is now <B>idle</B> + for 420/500 = 84% of the time one can see how misleading the <B><I>stochastic</I></B> + <B><I>average</I></B> can be. Unfortunately many disks are subject + to exactly this pattern of short bursts when many I/Os are enqueued, + followed by long periods of comparative calm (consider flushing dirty + blocks by <I>bdflush</I> in IRIX or the DBWR process in Oracle). + Under these circumstances, <I><TT>avque</TT> </I>as reported by <I>sar</I> + can be very misleading.</P> + <DT> + <I><TT>avserv</TT></I> + <DD> + <P> + Because multiple operations may be processed by the controller at the + same time, and the order of completion is not necessarily the same as + the order of dispatch, the notion of individual service time is + difficult (if not impossible) to measure. Rather, <I>sar</I> + approximates using the total time the disk was busy processing at + least one request divided by the number of completed requests.</P> + <P> + In the example above this translates to busy for 80 msec, in which time + 6 I/Os were completed, so the average service time is 13.33 msec.</P> + <DT> + <I><TT>avwait</TT></I> + <DD> + <P> + For reasons similar to those applying to <I><TT>avserv</TT></I> the + average time spent waiting cannot be split between waiting in the + queue of requests to be sent to the controller and waiting at the + controller while some other concurrent request is being processed. So <I>sar</I> + computes the total time spent waiting as the total response time minus + the total service time, and then averages over the number of completed + requests.</P> + <P> + In the example above this translates to a total waiting time of 120 + msec - 80 msec, in which time 6 I/Os were completed, so the average + waiting time is 6.67 msec.</P> +</DL> +<P> +When run with a <B>-d</B> option, <I>sar</I> reports the following for +each disk spindle:</P> +<TABLE BORDER="1"> + <CAPTION ALIGN="BOTTOM"><B>Table 3: PCP and sar metric equivalents</B></CAPTION> + <TR VALIGN="TOP"> + <TH>Metric</TH> + <TH>Units</TH> + <TH>PCP equivalent<BR> + (in terms of the rate converted metrics in Table 2)</TH> + </TR> + <TR VALIGN="TOP"> + <TD><I><TT>%busy</TT></I></TD> + <TD>percent</TD> + <TD>100 * <I><TT>disk.dev.active</TT></I> </TD> + </TR> + <TR VALIGN="TOP"> + <TD><I><TT>avque</TT></I></TD> + <TD>I/O operations</TD> + <TD>N/A (see above)</TD> + </TR> + <TR VALIGN="TOP"> + <TD><I><TT>r+w/s</TT></I></TD> + <TD>I/Os per second</TD> + <TD><I><TT>disk.dev.total</TT></I></TD> + </TR> + <TR VALIGN="TOP"> + <TD><I><TT>blks/s</TT></I></TD> + <TD>512-byte blocks per second</TD> + <TD><I><TT>disk.dev.blktotal</TT></I></TD> + </TR> + <TR VALIGN="TOP"> + <TD><I><TT>w/s</TT></I></TD> + <TD><B>write</B> I/Os per second</TD> + <TD><I><TT>disk.dev.write</TT></I></TD> + </TR> + <TR VALIGN="TOP"> + <TD><I><TT>wblks/s</TT></I></TD> + <TD>512-byte blocks <B>written</B> per second</TD> + <TD><I><TT>disk.dev.blkwrite</TT></I></TD> + </TR> + <TR VALIGN="TOP"> + <TD><I><TT>avwait</TT></I></TD> + <TD>milliseconds</TD> + <TD>1000 * (<I><TT>disk.dev.response</TT></I> <I><TT>- + disk.dev.active)</TT></I> / <I><TT>disk.dev.total</TT></I></TD> + </TR> + <TR VALIGN="TOP"> + <TD><I><TT>avserv</TT></I></TD> + <TD>milliseconds</TD> + <TD>1000 * <I><TT>disk.dev.active</TT></I> / <I><TT>disk.dev.total</TT></I></TD> + </TR> +</TABLE> +<P> +The table below shows how the PCP tools and <I>sar</I> would report the +disk performance over the 100 millisecond interval from the example +above:</P> +<TABLE BORDER="1"> + <CAPTION ALIGN="BOTTOM"><B>Table 3: Illustrative values and + calculations</B></CAPTION> + <TR> + <TH>Rate converted PCP metric<BR> + (like in Table 2)</TH> + <TH>sar metrics</TH> + <TH>Explanation</TH> + </TR> + <TR> + <TD><I><TT>disk.dev.read</TT></I></TD> + <TD>N/A</TD> + <TD>4 reads in 100 msec = 40 reads per second</TD> + </TR> + <TR> + <TD><I><TT>disk.dev.write</TT></I></TD> + <TD><I><TT>w/s</TT></I></TD> + <TD>2 writes in 100 msec = 20 writes per second</TD> + </TR> + <TR> + <TD><I><TT>disk.dev.total</TT></I></TD> + <TD><I><TT>r+w/s</TT></I></TD> + <TD>4 reads + 2 write in 100 msec = 60 I/Os per second</TD> + </TR> + <TR> + <TD><I><TT>disk.dev.blkread</TT></I></TD> + <TD>N/A</TD> + <TD>4 * 4 Kbytes = 32 blocks in 100 msec = 320 blocks read per + second</TD> + </TR> + <TR> + <TD><I><TT>disk.dev.blkwrite</TT></I></TD> + <TD><I><TT>wblks/s</TT></I></TD> + <TD>2 * 16 Kbytes = 64 blocks in 100 msec = 640 blocks written + per second</TD> + </TR> + <TR> + <TD><I><TT>disk.dev.blktotal</TT></I></TD> + <TD><I><TT>blks/s</TT></I></TD> + <TD>96 blocks in 100 msec = 960 blocks per second</TD> + </TR> + <TR> + <TD><I><TT>disk.dev.read_bytes</TT></I></TD> + <TD>N/A</TD> + <TD>4 * 4 Kbytes = 16 Kbytes in 100 msec = 160 Kbytes per second</TD> + </TR> + <TR> + <TD><I><TT>disk.dev.write_bytes</TT></I></TD> + <TD>N/A</TD> + <TD>2 * 16 Kbytes = 32 Kbytes in 100 msec = 320 Kbytes per + second</TD> + </TR> + <TR> + <TD><I><TT>disk.dev.bytes</TT></I></TD> + <TD>N/A</TD> + <TD>48 Kbytes in 100 msec = 480 Kbytes per second</TD> + </TR> + <TR> + <TD><I><TT>disk.dev.active</TT></I></TD> + <TD><I><TT>%busy</TT></I></TD> + <TD>80 msec active in 100 msec = 0.8 or 80%</TD> + </TR> + <TR> + <TD><I><TT>disk.dev.response</TT></I></TD> + <TD>N/A</TD> + <TD>Disregard (see comments in Table 2)</TD> + </TR> + <TR> + <TD>N/A</TD> + <TD><I><TT>avque</TT></I></TD> + <TD>1.67 requests (see derivation above)</TD> + </TR> + <TR> + <TD>N/A</TD> + <TD><I><TT>avwait</TT></I></TD> + <TD>6.67 msec (see derivation above)</TD> + </TR> + <TR> + <TD>N/A</TD> + <TD><I><TT>avserv</TT></I></TD> + <TD>13.33 msec (see derivation above)</TD> + </TR> +</TABLE> +<P> +In practice many of these metrics are of little use. Fortunately the +most common performance problems related to disks can be identified +quite simply as follows:</P> +<DL> + <DT> + <B>Device saturation</B> + <DD> + Occurs when <I><TT>disk.dev.active</TT></I> is close to 1.0 + (which is the same as <I><TT>%busy</TT></I> is close to 100%). + <DT> + <B>Device throughput</B> + <DD> + Use <I><TT>disk.dev.bytes</TT></I> (or <I><TT>blks/s</TT></I> + divided by 2 to produce Kbytes per second) + <DD> + The peak value depends on the bus and disk characteristics, and is + subject to significant variation depending on the distribution, size + and type of requests. Fortunately in many environments the peak value + does not change over time, so once established, monitoring thresholds + tend to remain valid. + <DT> + <B>Read/write mix</B> + <DD> + For some disks (and RAID devices in particular) writes may be slower + than reads. The ratio of <I><TT>disk.dev.write</TT></I> to <I><TT>disk.dev.total</TT></I> + (or <I><TT>w/s</TT></I> to <I><TT>r+w/s</TT></I>) indicates the + fraction of I/O requests that are writes. +</DL> +<P> +In terms of the available instrumentation from the IRIX kernel, one +potentially useful metric would be the stochastic average of the +response time per completed I/O operation, which in the sample above +would be 20 msec. Unfortunately no performance tool reports this +directly.</P> +<UL> + <LI> + For <I>sar</I>, this metric is the sum of <I><TT>avwait</TT></I> + and <I><TT>avserv</TT></I>. + <P> + </P> + <LI> + The common PCP tools only support temporal rate conversion for + counters, however the stochastic average of the response time can be + computed with the PCP inference engine (<I>pmie</I>) using an + expression of the form: + <PRE> +<TT>avg_resp = 1000 * disk.dev.response / disk.dev.total;</TT> +</PRE> +</UL> + +<P><BR></P> +<TABLE WIDTH=100% BORDER=0 CELLPADDING=0 CELLSPACING=0 BGCOLOR="#e2e2e2"> + <TR><TD WIDTH=100% BGCOLOR="#081c59"><P ALIGN=LEFT><FONT SIZE=5 COLOR="#ffffff"><B>A real example</B></FONT></P></TD></TR> +</TABLE> +<P> +Consider this data from<B> sar -d</B> with a <B>10 minute</B> update +interval:</P> +<PRE> + device %busy avque r+w/s blks/s w/s wblks/s avwait avserv + dks0d2 34 12.8 32 988 29 874 123.1 10.5 + dks0d5 34 12.5 33 1006 29 891 119.0 10.4 +</PRE> +<P> +At first impression, queue lengths of 12-13 requests and wait time of +120msec looks pretty bad. </P> +<P> +But further investigation is warranted ...</P> +<UL> + <LI> + most of the I/Os are writes (58 of 65 I/Os per second) + <LI> + average I/Os are (874+891)*512/(29+29) = 15580 bytes ... close to + default 16K filesystem block size + <LI> + to sustain (874+891)*512 = 903680 bytes of write throughput per second + for at least 10 minutes you are doing a lot of file writes + <LI> + the disks are not unduly busy at 34% utilization + <LI> + consider what happens when <I>bdflush</I>, <I>pdflush</I> and + friends run ... lets make some simplifying assumptions to make the + arithmetic easy + <UL> + <LI> + we are dirtying (writing) 60 x 16 Kbyte pages (983040 bytes) per second + <LI> + flushing goes off every 10 seconds, but the page cache is scanned in + something under 10 msec + <LI> + to keep up, each flush must push out 600 pages + <LI> + I/O is balanced across 2 disks + <LI> + disk service time is 10 msec per I/O + <LI> + after the flushing code has scanned the page cache, all 300 writes per + disk are on the queue <B>before</B> the first one is done (this + is what skews the wait time and queue lengths) + </UL> + <LI> + disk utilization is 300 * 10 / (10 * 1000) = 0.3 = 30% + <LI> + the stochastic average wait time is (0 + 10 + 20 + ... + 2990) / 300 + > = 150 msec + <LI> + time to empty the queue after a flush is 3 seconds + <LI> + the temporal average queue length is 0 * 7/10 + 150 * 3/10 = 45 +</UL> +<P> +The complicating issue here is that the I/O demand is very bursty and +this is what skews the "average" measures.</P> +<P> +In this case, the I/O is probably <B>asynchronous</B> with respect to +the process(es) doing the writing. Under these circumstances, +performance is unlikely to improve dramatically if the aggregate I/O +bandwidth was increased (e.g. by spreading the writes across more disk +spindles).</P> +<P> +However if the I/O is <B>synchronous</B> (e.g. it it was read dominated, +or the I/O was to a raw disk), then more I/O would reduce application +running time.</P> +<P> +There are also <B>hybrid</B> scenarios in which a small number of +synchronous reads are seriously slowed down during the bursts of +asynchronous writes. In the example above, a read could have the +misfortune of being queued behind 300 writes (or delayed for 3 seconds).</P> + +<P><BR></P> +<TABLE WIDTH=100% BORDER=0 CELLPADDING=0 CELLSPACING=0 BGCOLOR="#e2e2e2"> + <TR><TD WIDTH=100% BGCOLOR="#081c59"><P ALIGN=LEFT><FONT SIZE=5 COLOR="#ffffff"><B>Beware of Wait I/O</B></FONT></P></TD></TR> +</TABLE> +<P> +PCP (and <I>sar</I> and <I>osview</I> and ...) all report CPU +utilization broken down into:</P> +<UL> + <LI> + user + <LI> + system (sys, intr) + <LI> + idle + <LI> + wait (for file system I/O, graphics, physical I/O and swap I/O) +</UL> +<P> +Because I/O does not "belong" to any processor (and in some +cases may not "belong" to any current process), a CPU that is +"waiting for I/O" is more accurately described as an +"idle CPU while at least one I/O is outstanding".</P> +<P> +Anomalous Wait I/O time occurs under light load when a small number of <B>processes</B> +are waiting for I/O but many <B>CPUs</B> are otherwise idle, but +appear in the "Wait for I/O" state. When the number of CPUs +increases to 30, 60 or 120 then 1 process doing I/O can make all of the +CPUs except 1 look like they are all waiting for I/O, but clearly no +amount of I/O bandwidth increase is going to make any difference to +these CPUs. And if that one process is doing asynchronous I/O and not +blocking, then additional I/O bandwidth will not make it run faster +either.</P> + +<TABLE WIDTH=100% BORDER=0 CELLPADDING=10 CELLSPACING=20> + <TR><TD BGCOLOR="#e2e2e2" WIDTH=70%><BR><IMG SRC="images/stepfwd_on.png" WIDTH=16 HEIGHT=16 BORDER=0> Using <I>pmchart</I> to display concurrent disk and CPU activity (aggregated over all CPUs and all disks respectively).<BR> +<PRE><B> +$ source /etc/pcp.conf +$ tar xzf $PCP_DEMOS_DIR/tutorials/diskperf.tgz +$ pmchart -t 2sec -O -0sec -a diskperf/waitio -c diskperf/waitio.view +</B></PRE> +<P>The system has 4 CPUs, several disks and only 1 process really doing I/O.</P> +<P>Note that over time:</P> +<UL> + <LI> + in the top chart as the CPU user (blue) and system (red) time + increases, the Wait I/O (pale blue) time decreases + <LI> + from the bottom chart, the I/O rate is pretty constant throughout + <LI> + in the bursts where the I/O rate falls, the Wait I/O time becomes CPU + idle (green) time +</UL> +</TD></TR> +</TABLE> + +<P><BR></P> +<HR> +<CENTER> +<TABLE WIDTH=100% BORDER=0 CELLPADDING=0 CELLSPACING=0> + <TR> <TD WIDTH=50%><P>Copyright © 2007-2010 <A HREF="http://www.aconex.com/"><FONT COLOR="#000060">Aconex</FONT></A><BR>Copyright © 2000-2004 <A HREF="http://www.sgi.com/"><FONT COLOR="#000060">Silicon Graphics Inc</FONT></P></TD> + <TD WIDTH=50%><P ALIGN=RIGHT><A HREF="http://pcp.io/"><FONT COLOR="#000060">PCP Site</FONT></A><BR>Copyright © 2012-2014 <A HREF="http://www.redhat.com/"><FONT COLOR="#000060">Red Hat</FONT></P></TD> </TR> +</TABLE> +</CENTER> +</BODY> +</HTML> diff --git a/man/html/howto.enterprise.html b/man/html/howto.enterprise.html new file mode 100644 index 0000000..c50a354 --- /dev/null +++ b/man/html/howto.enterprise.html @@ -0,0 +1,464 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> +<!-- + (c) Copyright 2000-2004 Silicon Graphics Inc. All rights reserved. + Permission is granted to copy, distribute, and/or modify this document + under the terms of the Creative Commons Attribution-Share Alike, Version + 3.0 or any later version published by the Creative Commons Corp. A copy + of the license is available at + http://creativecommons.org/licenses/by-sa/3.0/us/ . +--> +<HTML> +<HEAD> + <meta http-equiv="content-type" content="text/html; charset=utf-8"> + <meta http-equiv="content-style-type" content="text/css"> + <link href="pcpdoc.css" rel="stylesheet" type="text/css"> + <link href="images/pcp.ico" rel="icon" type="image/ico"> + <TITLE>Integrating PCP into an Enterprise Management Strategy</TITLE> +</HEAD> +<BODY LANG="en-AU" TEXT="#000060" DIR="LTR"> +<TABLE WIDTH=100% BORDER=0 CELLPADDING=0 CELLSPACING=0 STYLE="page-break-before: always"> + <TR> <TD WIDTH=64 HEIGHT=64><FONT COLOR="#000080"><A HREF="http://pcp.io/"><IMG SRC="images/pcpicon.png" NAME="pmcharticon" ALIGN=TOP WIDTH=64 HEIGHT=64 BORDER=0></A></FONT></TD> + <TD WIDTH=1><P> </P></TD> + <TD WIDTH=500><P VALIGN=MIDDLE ALIGN=LEFT><A HREF="index.html"><FONT COLOR="#cc0000">Home</FONT></A> · <A HREF="lab.pmchart.html"><FONT COLOR="#cc0000">Charts</FONT></A> · <A HREF="timecontrol.html"><FONT COLOR="#cc0000">Time Control</FONT></A></P></TD> + </TR> +</TABLE> +<H1 ALIGN=CENTER STYLE="margin-top: 0.48cm; margin-bottom: 0.32cm"><FONT SIZE=7>Integrating PCP into an Enterprise Management Strategy</FONT></H1> +<TABLE WIDTH=15% BORDER=0 CELLPADDING=5 CELLSPACING=10 ALIGN=RIGHT> + <TR><TD BGCOLOR="#e2e2e2"><IMG SRC="images/system-search.png" WIDTH=16 HEIGHT=16 BORDER=0> <I>Tools</I><BR><PRE> +pmie +pmieconf +pmlogger +pmlogconf +</PRE></TD></TR> +</TABLE> +<P> +This chapter of the Performance Co-Pilot tutorial discusses the steps +required to integrate PCP into the various management frameworks available. +It takes into consideration the distributed nature of both the management +frameworks and of the PCP tools, and how best to combine the functionality +they offer.</P> +<P> +For an explanation of Performance Co-Pilot terms and acronyms, consult +the <A HREF="glossary.html">PCP glossary</A>.</P> + +<P><BR></P> +<TABLE WIDTH=100% BORDER=0 CELLPADDING=0 CELLSPACING=0 BGCOLOR="#e2e2e2"> + <TR><TD WIDTH=100% BGCOLOR="#081c59"><P ALIGN=LEFT><FONT SIZE=5 COLOR="#ffffff"><B>Points of Integration</B></FONT></P></TD></TR> +</TABLE> +<P> +Following is a brief description on how PCP can be integrated in terms of +some of the aligned features of PCP and the typical management framework. +<H4>Data</H4> +<P> +The PCP archive logging utility <b>pmlogger</b>(1) +generates performance data files in the PCP archive format, +which is specifically designed for optimal fetch latency +when retrieving data from the archive for replay and when seeking to +random time points in the archive. +This format is specific to the PCP tools and the PMAPI, and clearly +external interfaces are necessary for non-PCP tools to read the data. +<P> +The <b>LOGIMPORT</b>(3) APIs provide a mechanism for +importing data into a PCP archive. Using these services, tools +are provided to import common sources of performance data such as +spreadsheets, binary data from <b>sar</b>(1) and <b>iostat</b>(1) output. +Other tools can easily be developed in C or Perl, see <b>LOGIMPORT</b>(3), +<b>pmiStart</b>(3) and <b>PCP::LogImport</b>(3). +<P> +There are a number of PCP tools which have specifically been developed with +the aim of producing a format which is easily incorporated into an external +framework, database, or spreadsheet application - for example, the +<b>pmdumptext</b>(1) and <b>pmlogsummary</b>(1) tools both provide options to +output data in a time-stamped, tab-delimited or comma-separated form, which +is easily incorporated into other tools. +PCP also provides daily log rotation, merging and culling facilities for +multiple collector hosts from a single monitor host, as well as the +automated <I>pmchart/cron/pmsnap</I> performance graph image generation +facility. +</P> +<P> +Due to the unlimited potential consumers of this historical performance data, +it is left as an exercise for the reader to figure out how best to incorporate +this data into their own environment. +</P> +<P> +Note that all of the PCP tools are "timezone-aware" and can switch +between the timezone of the monitoring machine and the timezone of the +collector machine for which the archive was generated (this information is +stored in the archive). Also, PCP archives can be generated on a machine +of one operating system version, architecture or byte-order, and replayed +on a completely different machine. +</P> +<H4>Events</H4> +<P> +Among the more compelling reasons for making use of a management framework +to administer an enterprise are the distributed monitoring and centralized +analysis aspects. +All frameworks provide event monitoring facilities, of varying complexity. +Some provide simple point to point event generation, others have proxy event +servers which allow events to be filtered and then potentially passed upstream +to another event monitor. +To allow the framework to be extended, the frameworks will typically provide +a mechanism for external applications to push their own events into the +framework, and it is this feature which we wish to exploit in our PCP +integration efforts. +</P> +<P> +Although PCP does provide a powerful inference engine in <b>pmie</b>(1) (as well +as a far richer set of performance metrics than the more generic frameworks can +provide, and low latency protocols designed specifically for transporting +performance data quickly), no attempt is made to provide an event +"sink" - some application which will display and filter +performance events for the user. +From an enterprise management point of view, an event monitoring +facility specifically for performance events would be exactly the wrong +thing to do from within PCP - system administrators managing a wide array of +different machines should expect to see all system-wide events coming to a +single point for their notification. +</P> +<P> +So, the integration point must be from <b>pmie</b>(1) - when it detects an +abnormal performance situation, it must pass it on in the most appropriate +manner possible. Unfortunately, the various event management frameworks +have widely differing mechanisms for receiving events, so each framework +must be handled separately in order to make best use of their event viewing +and filtering capabilities. +</P> +<CENTER> +<IMG SRC="images/rattle.png" ALIGN="MIDDLE" WIDTH="430" HEIGHT="340"> +</CENTER> +<P> +The diagram shows a typical <b>pmie</b>(1) setup - <B>rattle.melbourne.sgi.com</B> +running <b>pmie</b>, fetching performance data from a variety of sources, then +evaluating its set of performance rules and generating events into whichever +event "sinks" have been specified. +Specifying how to generate an event, which rules to use, how frequently to +evaluate each of the rules, which hosts to monitor, etc, is performed by +the <b>pmieconf</b>(1) utility, which can be extended to allow new frameworks +to be incorporated. +</P> +<H4>User Interface</H4> +<P> +A number of the enterprise management frameworks have the ability to provide +closer integration between the tools themselves, for example starting PCP +tools from a menu option of some of the framework's tools, or by installing +additional on-line help for the performance events which PCP generates. +This level of integration is not attempted, and is not seen as providing +much value in practice. +The <b>pmieconf</b>(1) utility is the definitive +source of help text for the performance events generated by <b>pmie</b>(1) - +it describes the rules and each of the customizable variables affecting +the rules (including the "global" variables affecting all of the +rules, such as where to send events when a performance event is generated). +</P> + +<P><BR></P> +<TABLE WIDTH=100% BORDER=0 CELLPADDING=0 CELLSPACING=0 BGCOLOR="#e2e2e2"> + <TR><TD WIDTH=100% BGCOLOR="#081c59"><P ALIGN=LEFT><FONT SIZE=5 COLOR="#ffffff"><B>CA/Unicenter TNG (Computer Associates)</B></FONT></P></TD></TR> +</TABLE> +<P> +<B>Step-by-step</B> - how to setup and ensure <b>pmie</b>(1) can talk to the +Unicenter TNG Framework: +</P> +<UL> +<LI> +Start CCI services on the monitor node, i.e. the node where <b>pmie</b> +events should be propagated to (a Windows machine - "hugh" - in +this example). +For a Windows monitoring node, refer to the "Services" window +from the "Control Panel". +</P> +<LI> +Start CCI services on the monitored node, i.e. the node where <b>pmie</b> +is running (an IRIX machine - "wobbly" - in this example). +<PRE> +wobbly# $CAIGLBL0000/bin/unicntrl start cci +wobbly# +</PRE> +</P> +<LI> +Ensure the connection between the two nodes is active. For UNIX machines: +<PRE> +wobbly# $CAIGLBL0000/cci/bin/rmt status + + Sysid State Last Send Time Last Receive Time +--------|---------------------|---------------|----------------- +hugh ACTIVE 041099 17:54:37 041199 13:42:01 + +wobbly# +</PRE> +For Windows machines: +<PRE> +C:\TNGFW\BIN>rmtcntrl status +SUCCESS: information returned +Sysid State Last Send Time Last Receive time +--------|---------------------|---------------|----------------- +HUGH ACTIVE +WOBBLY ACTIVE Apr-10-99 17:58:25 Apr-10-99 17:58:25 + +C:\TNGFW\BIN> +</PRE> +</P> +<LI> +Send a test event to the monitoring node from the node where <b>pmie</b> +will be running +<PRE> +wobbly# $CAIGLBL0000/bin/cawto -n hugh -g Performance -s wobbly test event +</PRE> +</P> +<LI> +To verify that the event is successfully received on a Windows NT monitoring +host, use the Event Console, which lists events as they arrive. +</P> +<P>There are several tools which ship with the TNG Framework for examining +and verifying the connection between two nodes - such as <b>oprping</b>(1) - +refer to the Unicenter TNG documentation for full details. +<LI> +Once the test event propagates successfully, enable <b>pmie</b> event generation +into the TNG Framework: +<PRE> +wobbly# pmieconf modify global tngfw_action yes +wobbly# /etc/init.d/pmie start +</PRE> +</UL> +<B>Configuration options</B> - how to customize the setup for different +environments: +<UL> +<LI> +The node to which events are sent is identified by the tngfw_node +<b>pmieconf</b> variable, so to setup event propagation from <b>pmie</b> +on rattle to TNG on hugh as described above: +<PRE> +wobbly# pmieconf modify global tngfw_node hugh +wobbly# /etc/init.d/pmie start +</PRE> +<LI> +Other parameters associated with TNG events can also be specified - these +include the color and category of each individual event, a group of events, +or globally for all events: +<PRE> +wobbly# pmieconf modify global tngfw_color Yellow +wobbly# pmieconf modify global tngfw_category "PMIE Events" +wobbly# pmieconf modify cisco tngfw_color Red +wobbly# /etc/init.d/pmie start +</PRE> +</UL> +</P> +<CENTER> +<IMG SRC="images/tngconsole.png" ALIGN="MIDDLE" WIDTH="699" HEIGHT="444"> +</CENTER> + +<P><BR></P> +<TABLE WIDTH=100% BORDER=0 CELLPADDING=0 CELLSPACING=0 BGCOLOR="#e2e2e2"> + <TR><TD WIDTH=100% BGCOLOR="#081c59"><P ALIGN=LEFT><FONT SIZE=5 COLOR="#ffffff"><B>HP OpenView (Hewlett-Packard)</B></FONT></P></TD></TR> +</TABLE> +<P> +<B>Step-by-step</B> on how to setup and ensure <b>pmie</b>(1) can talk to OpenView: +</P> +<UL> +<LI> +Start the <b>pmcd</b>(1) daemon on the node which will receive <b>pmie</b>(1) +events - "wobbly" in this example. +<PRE> +wobbly# /etc/init.d/snmp start +wobbly# /etc/init.d/ovnnm start +</PRE> +</P> +<LI> +Send a test event to the monitoring node from the node where <b>pmie</b>(1) +will be running (OV_BIN is typically /usr/OV/bin): +<PRE> +rattle# cd $OV_BIN +rattle# ./ovevent -c "Status Events" -s Normal \ +.1.3.6.1.4.1.11.2.17.1.0.58916872 \ +.1.3.6.1.4.1.11.2.17.2.1.0 Integer 14 \ +.1.3.6.1.4.1.11.2.17.2.2.0 OctetString "rattle" \ +.1.3.6.1.4.1.11.2.17.2.4.0 OctetString "test event" +</PRE> +<LI> +To verify that the event is successfully received, run the OpenView event +monitoring program (pictured here): +<PRE> +wobbly# cd $OV_BIN +wobbly# ./xnmevents & +</PRE> +<LI> +If this event propagates successfully, enable <b>pmie</b> event generation +into OpenView: +<PRE> +rattle# pmieconf modify global ov_action yes +rattle# /etc/init.d/pmie start +</PRE> +</UL> +<P> +<CENTER> +<IMG SRC="images/xnmevents.png" ALIGN="RIGHT" WIDTH="247" HEIGHT="210"> +</CENTER> +The <b>xnmevents</b>(1) GUI connects to the <b>pmcd</b>(1) daemon on the monitoring +node which supplies any new events which arrive while <b>xnmevents</b> is +running. +</P> +The image to the right shows the <b>xnmevents</b> main window. +On receipt of a new <b>pmie</b> event, the "Threshold Events" +toggle button changes +color according to the event severity, indicating that there are new events +- clicking on the toggle button brings up the viewer window (shown below). +</P> +<P> +The viewer lets you view, filter, and +acknowledge events (once all events are acknowledged, the "Threshold +Events" button becomes white - until the next event arrives). +</P> +<B>Configuration options</B> - using <b>pmieconf</b>(1) to customize the setup +for different environments: +<UL> +<LI> +The node to which events are sent is identified by the ov_node <b>pmieconf</b> +variable, so to setup event transferral from rattle to wobbly as described +above, I ran: +<PRE> +# pmieconf modify global ov_node wobbly +# /etc/init.d/pmie start +</PRE> +<LI> +Other parameters associated with OpenView events can also be specified - these +include the category and severity of each individual event, a group +of events, or globally for all events: +<PRE> +rattle# pmieconf modify filesys.filling ov_severity Critical +rattle# pmieconf modify filesys.filling ov_category "Status Events" +rattle# pmieconf modify cisco ov_severity Major +rattle# /etc/init.d/pmie start +</PRE> +</UL> +<CENTER> +<IMG SRC="images/ovevents.png" ALIGN="MIDDLE" WIDTH="697" HEIGHT="373"> +</CENTER> + +<P><BR></P> +<TABLE WIDTH=100% BORDER=0 CELLPADDING=0 CELLSPACING=0 BGCOLOR="#e2e2e2"> + <TR><TD WIDTH=100% BGCOLOR="#081c59"><P ALIGN=LEFT><FONT SIZE=5 COLOR="#ffffff"><B>EnlightenDSM (Enlighten Software Solutions)</B></FONT></P></TD></TR> +</TABLE> +<P> +<B>Step-by-step</B> on how to setup and ensure <b>pmie</b>(1) can talk to +EnlightenDSM: +</P> +<UL> +<LI> +Start the <b>EnlightenDSM</b>(1) daemons on the host being monitored by +<b>pmie</b>(1) - "wobbly" in this example. +<PRE> +wobbly# /opt/enlighten/bin/start_enl_daemons -r +... +start_emdd: Invoking /opt/emd/bin/emdd... +start_enl_daemons: Invoking /opt/enlighten/bin/pep... +start_enl_daemons: Invoking /opt/enlighten/bin/renld... +start_enl_daemons: Invoking /opt/enlighten/bin/AgentMon... +</PRE> +</P> +<LI> +Start up the Enlighten GUI to verify that events can be received. +Go into the "Events" -> "Status Map" window: +<PRE> +wobbly# /opt/enlighten/bin/xenln & +</PRE> +<LI> +Send a test event to the Enlighten GUI, and verify that the scrolling event +list at the bottom of the "Status Map" window updates after the event has +been sent: +<PRE> +wobbly# /opt/enlighten/bin/EventsCli -n Test -u tps -v 12345 -s 5 -q +</PRE> +<LI> +If this event propagates successfully, enable pmie event generation into Enlighten: +<PRE> +wobbly# pmieconf modify global enln_action yes +wobbly# /etc/init.d/pmie start +</PRE> +</UL> + +<B>Configuration options</B> - using <b>pmieconf</b>(1) to customize the setup: +<P> +The only configurable option of note for Enlighten DSM is the ability +to change the severity setting for individual events, event groups, or +globally for all events (where severity is a number between a low of 1 and +a high of 5, and the default severity value for <b>pmie</b>(1) events is 2): +<PRE> +wobbly# pmieconf modify filesys.filling enln_severity 4 +wobbly# pmieconf modify cisco enln_severity 5 +wobbly# /etc/init.d/pmie start +</PRE> +<P> +<CENTER> +<IMG SRC="images/xenln.png" ALIGN="MIDDLE" WIDTH="581" HEIGHT="505"> +</CENTER> + +<P><BR></P> +<TABLE WIDTH=100% BORDER=0 CELLPADDING=0 CELLSPACING=0 BGCOLOR="#e2e2e2"> + <TR><TD WIDTH=100% BGCOLOR="#081c59"><P ALIGN=LEFT><FONT SIZE=5 COLOR="#ffffff"><B>Extending</A> to Other Frameworks</B></FONT></P></TD></TR> +</TABLE> +<P> +All of the enterprise management frameworks we've come across provide some +mechanism for generating events from outside the framework. +This is usually in the form of a stand-alone utility, but could also be an +API, which packages the attributes associated with an event (these attributes +are usually things like severity, source host, message text, etc) and sends +this to the monitoring host. +</P> +<P> +Since <b>pmie</b>(1) supports running an arbitrary command upon detection of +a performance event (in addition to its other native actions, such as writing +an entry in the system log file), this is the hook we'll use to add support for +additional frameworks. +</P> +<P> +Steps involved when integrating other frameworks with PCP: +</P> +<UL> + <LI> + find or create a utility to generate events into the framework; + <LI> + familiarize yourself with the command line options for this utility, + and decide which options are of interest from a performance-event + perspective; + <LI> + test the utility by hand - ensure that you can run the utility from + the command line and that the framework's monitoring software + successfully receives the event; + <LI> + using the files in <TT>/var/pcp/config/pmieconf/global</TT> as a + guide, create a <b>pmieconf</b>(1) file containing "global" + variables for use in <b>pmieconf</b> - one of these is always an + "action" variable, which allows the framework utility to + be run when <b>pmie</b>(1) generates an event; + <LI> + using <b>pmieconf</b>, ensure that the syntax of your created file + is correct, and that the new variables are visible in the + "global" group; +<PRE> + # pmieconf -r newfile list global +</PRE> + <LI> + finally, install the new file into the + <TT>/var/pcp/config/pmieconf/global</TT> subdirectory + and switch on your new framework action for all of the rules; +<PRE> + # pmieconf modify global new_action yes + # /etc/init.d/pmie start +</PRE> +</UL> +<P>If the framework is sufficiently common that other people may wish +to use your new <b>pmieconf</b>(1) "action", feel free to +<A HREF="contacts.html">share it</A> and we'll incorporate it into +future PCP release.</P> + +<P><BR></P> +<HR> +<CENTER> +<TABLE WIDTH=100% BORDER=0 CELLPADDING=0 CELLSPACING=0> + <TR> <TD WIDTH=50%><P>Copyright © 2007-2010 <A HREF="http://www.aconex.com/"><FONT COLOR="#000060">Aconex</FONT></A><BR>Copyright © 2000-2004 <A HREF="http://www.sgi.com/"><FONT COLOR="#000060">Silicon Graphics Inc</FONT></P></TD> + <TD WIDTH=50%><P ALIGN=RIGHT><A HREF="http://pcp.io/"><FONT COLOR="#000060">PCP Site</FONT></A><BR>Copyright © 2012-2014 <A HREF="http://www.redhat.com/"><FONT COLOR="#000060">Red Hat</FONT></P></TD> </TR> +</TABLE> +</CENTER> +</BODY> +</HTML> diff --git a/man/html/howto.systemlog.html b/man/html/howto.systemlog.html new file mode 100644 index 0000000..4bca24d --- /dev/null +++ b/man/html/howto.systemlog.html @@ -0,0 +1,500 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> +<HTML> +<HEAD> + <meta http-equiv="content-type" content="text/html; charset=utf-8"> + <meta http-equiv="content-style-type" content="text/css"> + <link href="pcpdoc.css" rel="stylesheet" type="text/css"> + <link href="images/pcp.ico" rel="icon" type="image/ico"> + <TITLE>System Event Log Instrumentation</TITLE> +</HEAD> +<BODY LANG="en-AU" TEXT="#000060" DIR="LTR"> +<TABLE WIDTH=100% BORDER=0 CELLPADDING=0 CELLSPACING=0 STYLE="page-break-before: always"> + <TR> <TD WIDTH=64 HEIGHT=64><FONT COLOR="#000080"><A HREF="http://pcp.io/"><IMG SRC="images/pcpicon.png" NAME="pmcharticon" ALIGN=TOP WIDTH=64 HEIGHT=64 BORDER=0></A></FONT></TD> + <TD WIDTH=1><P> </P></TD> + <TD WIDTH=500><P VALIGN=MIDDLE ALIGN=LEFT><A HREF="index.html"><FONT COLOR="#cc0000">Home</FONT></A> · <A HREF="lab.pmchart.html"><FONT COLOR="#cc0000">Charts</FONT></A> · <A HREF="timecontrol.html"><FONT COLOR="#cc0000">Time Control</FONT></A></P></TD> + </TR> +</TABLE> +<H1 ALIGN=CENTER STYLE="margin-top: 0.48cm; margin-bottom: 0.32cm"><FONT SIZE=7>System Event Log Instrumentation</FONT></H1> +<TABLE WIDTH=15% BORDER=0 CELLPADDING=5 CELLSPACING=10 ALIGN=RIGHT> + <TR><TD BGCOLOR="#e2e2e2"><IMG SRC="images/system-search.png" WIDTH=16 HEIGHT=16 BORDER=0> <I>Tools</I><BR><PRE> +pmval +pmevent +pmchart +pmdalogger +pmdarsyslog +pmdaelasticsearch +</PRE></TD></TR> +</TABLE> +<P>Capturing system event log information from a collection of geographically +distributed systems in a reliable and useful way presents many challenges. +In order for operations and engineering triage teams to be able to filter +important events from this huge amount of information, events need to be +shipped to a central location, reliably, where they can be indexed and +searched.</P> +<P>Ideally this is done in a way that is both timely and removed +from the systems under observation. Being timely allows events relevant +to an active production problem are available to triage personnel. Being +removed from the production system allows for a reduction of impact to the +observed system, and also allows for collation of events from cooperating +systems (separate databases, application servers, web servers and storage +servers, for example).</P> +<P>In addition to the events logged by the operating system kernel and the +system daemons, it is also highly desirable to capture application events +as well. For minimal operational maintenance overhead, these should all +be managed by a single, reliable event shipping system for application +logs. +This case study documents the design and deployment of one such system, +and focuses on the performance instrumentation used for monitoring and +problem diagnosis in the event management service itself.</P> +</P> + +<P><BR></P> +<TABLE WIDTH=100% BORDER=0 CELLPADDING=0 CELLSPACING=0 BGCOLOR="#e2e2e2"> + <TR><TD WIDTH=100% BGCOLOR="#081c59"><P ALIGN=LEFT><FONT SIZE=5 COLOR="#ffffff"><B> Technology Choices</B></FONT></P></TD></TR> +</TABLE> +<P>A brief overview of the technologies used, and why they +were selected from the many alternatives available, follows. +As this was likely to become a critical system infrastructure component, +and the organisation had existing operational and engineering expertise +in Linux and Java, open source solutions were generally preferred. +The opportunity to evaluate new technologies was foreseen and affected +some of the choices made.</P> +<P><B>Event capturing and transport</B></P> +<P><A HREF="http://www.rsyslog.com/">rsyslog</A> +is the default system log daemon on the Linux distribution used, and +it provides efficient, reliable end-to-end delivery. +It turned out to be easily instrumented - providing both its own metrics +and mechanisms for extending with metrics specific to our own needs. +<P><B>Index and search functionality</B></P> +<P><A HREF="http://www.elasticsearch.org/">elasticsearch</A> and +<A HREF="http://mobz.github.com/elasticsearch-head/">elasticsearch-head</A> +are used as the mechanisms for indexing event messages as they arrive, and +providing event search functionality.</P> + +<P><BR></P> +<TABLE WIDTH=100% BORDER=0 CELLPADDING=0 CELLSPACING=0 BGCOLOR="#e2e2e2"> + <TR><TD WIDTH=100% BGCOLOR="#081c59"><P ALIGN=LEFT><FONT SIZE=5 COLOR="#ffffff"><B> High-level Design</B></FONT></P></TD></TR> +</TABLE> +<P>The design caters for a fairly typical medium-sized web application +deployment. +Each data centre hosting the application (distributed throughout the +world) contains several racks of equipment dedicated to delivering the +service. +Individual racks are populated with closely cooperating machines, each +generating their own system and application logs. +<P> +<CENTER> +<IMG SRC="images/systemlogs.png" ALIGN="MIDDLE" WIDTH="576" HEIGHT="370"> +</CENTER> +</P> +<P>Initially, all logs are streamed directly to a central machine in the +local deployment (typically, within the same rack). +On those machines where application logs are being generated the logs +are immediately merged into the system log stream using the syslog +networking protocol. +We made use of the syslog "facility" concept, to designate all +application logs to be "local0" facility. +</P> +<P>On average, one instance would typically generate several gigabytes of +application logs each day. +The system log traffic is a tiny fraction of that. +</P> +<P>This separation of application log messages from system log messages +became most useful at the final end point (indexing), since the facility +identifier travels with each message (as does source hostname, timestamp +and priority information). +Since elasticsearch was chosen as the indexing and search technology, +the application was modified (via Log4J configuration) to generate logs +messages in <a href="http://json.org">JSON</a> format. +This allowed the information-rich application logs to maintain a clear +separation of critical information (request ID, user ID, identifiers for +the pages being accessed, and many more application level details), such +that these fields could be separately indexed on the receiving end. +</P> +<P>For the remainder of the operating system and service level messages, +conversion to JSON was performed at the final stage, just prior to being +indexed, with the syslog message being one indexed field. The source host +and event generation timestamp that travelled with the message are also +separately indexed. +</P> + +<P><BR></P> +<TABLE WIDTH=100% BORDER=0 CELLPADDING=0 CELLSPACING=0 BGCOLOR="#e2e2e2"> + <TR><TD WIDTH=100% BGCOLOR="#081c59"><P ALIGN=LEFT><FONT SIZE=5 COLOR="#ffffff"><B> Deployment and Instrumentation: rsyslog</B></FONT></P></TD></TR> +</TABLE> +<P>It was highly desirable to gain insight into many levels of the event +transfer process. +Identifying hosts generating too much traffic, or hosts not generating +any log traffic (misconfiguration) was initially important - so, event +counters, and cumulative byte counts of events generated was required. +It was also important to be able to see these data rates alongside the +network interface data rates, to understand the additional load generated +through live streaming of the event log data. +</P> + +<P><B>Instrumenting <i>rsyslog</i> internals</B></P> +<P>The <I>rsyslog</I> daemon runs on each and every machine involved, so +low overhead is a desirable attribute in any instrumentation added. +Not all of the machines are configured the same though (the event +"forwarders" and event "indexers" differ to the +"leaf" nodes, which form most of the event sources), and +so the configuration of <I>rsyslog</I> required some care. +</P> +<P>We took a two-pronged approach to instrumenting the <I>rsyslog</I> +processes. On inspection, it turned out that there is some existing +instrumentation on the <I>rsyslog</I> internal workings available. +It must be explicitly enabled - both at the source level and at runtime. +To enable the instrumentation in an <I>rsyslog</I> build, the +<TT>--enable-impstats</TT> build configuration flag is needed. +Then, enabling the statistics and exporting them at runtime requires +the following additions to the <I>rsyslog</I> configuration: +<PRE> +	# Provide rsyslog statistics +	$ModLoad impstats +	$PStatsInterval 5 +</PRE> +<P>This instructs <I>rsyslog</I> to load the statistics module, and to +export the current state of its statistics on a 5 second interval. +We can then capture those statistics to an arbitrary output channel, +again using a configuration addition.</P> +</P> +<TABLE WIDTH=100% BORDER=0 CELLPADDING=0 CELLSPACING=0> +<TR><TD> + <IMG ALIGN=RIGHT SRC="images/systemlog-arrival.png" HEIGHT="506" WIDTH="398" BORDER=0> +</TD> +<TD> + <TABLE BORDER=0 CELLPADDING=0 CELLSPACING=15> + <TR><TD> + <P>We would like to incorporate the <I>rsyslog</I> statistics + (giving insight into arrival rates and queueing behaviour) into our + overall performance management strategy - tracking them alongside all + of our other metrics for comparison, graphing, alarming, etc. This is + acheived by a PMDA - <I>pmdarsyslog</I> - which exports these metrics: +<I><PRE> +	rsyslog.interval +	rsyslog.queues.size +	rsyslog.queues.maxsize +	rsyslog.queues.full +	rsyslog.queues.enqueued +	rsyslog.imuxsock.submitted +	rsyslog.imuxsock.discarded +	rsyslog.imuxsock.numratelimiters +	rsyslog.elasticsearch.connfail +	rsyslog.elasticsearch.submits +	rsyslog.elasticsearch.success +	rsyslog.elasticsearch.failed </PRE></I> + </TD></TR> + <TR><TD> + <TABLE WIDTH=100% BORDER=0 CELLPADDING=10 CELLSPACING=20> + <TR><TD BGCOLOR="#e2e2e2" WIDTH=50%><BR><IMG SRC="images/stepfwd_on.png" WIDTH=16 HEIGHT=16 BORDER=0> Install <I>pmdarsyslog</I>: + <PRE><B># source /etc/pcp.env +# cd $PCP_PMDAS_DIR/rsyslog +# ./Install </B></PRE> + </TD></TR> + </TABLE> + </TD></TR> + </TABLE> +</TD></TR> +</TABLE> +<P>The <I>rsyslog</I> configuration addition to achieve the link up +between <I>rsyslog</I> and <I>pmdarsyslog</I> is:</P> +<PRE> +	# Performance instrumentation +	syslog.info |/var/log/pcp/rsyslog/stats +</PRE> +<P>Note that once enabling this, care must be taken to ensure those stats +values are logged only where we wish. In our case, we did not wish these +to end up in the system log file, nor being included in the set of values +being shipped for indexing. +The configuration entries that achieve this restriction in our scenario +are as follows: +<PRE> +	*.*;local0.none;syslog.!=info /var/log/messages +	*.*;syslog.!=info @@log1;RSYSLOG_ForwardFormat +	$ActionExecOnlyWhenPreviousIsSuspended on +	& @@log2 +	& /var/spool/rsyslog-buffer +	$ActionExecOnlyWhenPreviousIsSuspended off +</PRE> +<P>The <I>syslog.info</I> tag identifies the input channel where the +periodic <I>rsyslog</I> metric values are written. +So, the first line above prevents the <I>rsyslog</I> metric values +(<I>syslog.!=info</I>) from appearing in the local system log file +(<I>/var/log/messages</I>). +In addition, we prevent all local application log messages from going +there ("local0"), which is simply so we don't duplicate work that +the application is already doing itself. +The remaining configuration lines are those responsible for forwarding +local host messages to the central log forwarding server for a rack +(log1), and for failing over to a second log server (log2). +Note how we choose not to forward the <I>syslog.info</I> message class. +</P> +<P>From our findings so far, it is worth keep an eye (<I>pmie</I>) on the +queue fullness and discard counts, as they appear to be handy indicators +that a node might not be be keeping up. +In addition, the interval metric should also be kept under surveilance - +if messages arrive more frequently than the configured interval (five +seconds in our case), then it indicates a node somewhere is forwarding +its instrumentation where it should not be (i.e. a misconfiguration). +</P> + +<P><B>Instrumenting <i>rsyslog</i> output channels</B></P> +<P>We can now extend the high level system log counters by drilling +down to specific output channels. +We use the ability of <I>rsyslog</I> to write to a named pipe once more - +this provides a coordination point between the PCP PMDA and the daemon, +without having to log to disk and deal with issues like filesystem free +space management, log rotation, and so forth. +</P> +<P>We extend our configuration with two more lines, as follows:</P> +<PRE> +	# Performance instrumentation +	syslog.info |/var/log/pcp/rsyslog/stats +	local0.* |/var/log/pcp/logger/applog +	*.*;local0.none;syslog.!=info |/var/log/pcp/logger/syslog +</PRE> +<P>The final two lines are feeding all application and other traffic +into two named pipes (fifos) for processing. These need to exist +before <I>rsyslog</I> starts up, and <I>pmdalogger</I> needs to be +configured (at PMDA install time) to be listening for data on these +files.</P> + +<TABLE WIDTH=100% BORDER=0 CELLPADDING=0 CELLSPACING=0> +<TR> +<TD> + <TABLE BORDER=0 CELLPADDING=0 CELLSPACING=15> + <TR><TD> + <P>Once that is done, new metrics are then available that give + insight into the number of events being seen for each class of log, + as well as the total event traffic throughput for each:</P> + <I><PRE> +	logger.perfile.applog.bytes +	logger.perfile.applog.count +	logger.perfile.syslog.bytes +	logger.perfile.syslog.count </PRE></I> + </TD></TR> + <TR><TD> + <TABLE WIDTH=100% BORDER=0 CELLPADDING=10 CELLSPACING=20> + <TR><TD BGCOLOR="#e2e2e2" WIDTH=50%><BR><IMG SRC="images/stepfwd_on.png" WIDTH=16 HEIGHT=16 BORDER=0> Install <I>pmdalogger</I>: + <PRE><B># source /etc/pcp.env +# cd $PCP_PMDAS_DIR/logger +# ./Install </B></PRE> + <P>Follow the prompts and configure two logfile entries for the two + named pipes.</P> +<BR> + </TD></TR> + </TABLE> + </TD></TR> + </TABLE> +</TD> +<TD> + <IMG ALIGN=RIGHT SRC="images/systemlog-throughput.png" HEIGHT="418" WIDTH="370" BORDER=0> +</TD> +</TR> +</TABLE> + +<P><B>Deeper event analysis</B> +<P>Finally, this was an opportunity to begin to evaluate the utility of +recently introduced event tracing functionality in PCP. +The logger PMDA which was separately counting application and system log +traffic also had visibility to all event traffic, and has been used to +inspect log contents (for checking event arrival, and for verifying JSON +validity, etc) in what proved a much more convenient way than snooping +the raw network traffic.</P> +<I><PRE> +		logger.perfile.applog.records +		logger.perfile.syslog.records +</PRE></I> +<P>This was done with the command line utility <I>pmevent</I>, which is the +first and most simple of event tracing tools - but even in this basic +"text dump" form, insight was gained by being able to see the +exact traffic passing through each output stream, and some configuration +problems were diagnosed and resolved through its use. +</P> +<P> +<CENTER> +<IMG SRC="images/systemlog-events.png" ALIGN="MIDDLE" WIDTH="826" HEIGHT="455"> +</CENTER> +</P> + +<P><BR></P> +<TABLE WIDTH=100% BORDER=0 CELLPADDING=0 CELLSPACING=0 BGCOLOR="#e2e2e2"> + <TR><TD WIDTH=100% BGCOLOR="#081c59"><P ALIGN=LEFT><FONT SIZE=5 COLOR="#ffffff"><B> A Quick Aside: Buffer Sizes</B></FONT></P></TD></TR> + <TR><TD BGCOLOR="#e2e2e2" WIDTH=100%> +<BR> +<P>If there is a chance of sending extremely large messages through +<I>rsyslog</I> in your environment, such as JVM stack traces or the +like, we found it necessary to increase the default maximum message +size permitted:</P> +<PRE> +	# Global directives +	$MaxMessageSize 65536 +	$PreserveFQDN on +</PRE> +<P>We also insisted that sending hosts fully qualified domain names are +always used, as some of the (global) hosts would otherwise have ambiguous +hostnames.</P> +<P>Buffer sizes can also become problematic in the named pipe implementation +in the Linux kernel. The default (and until relatively recently, unchangeable) +buffer size is 16 pages, which on the typical 4KiB page size system, gives us +only 64KiB. +Since late 2010, this can now be queried and modified though an fcntl(2), +and system wide limited are imposed (1MiB maximum, for non-root users).</P> +<PRE> +	cat /proc/sys/fs/pipe-max-size +	1048576 +</PRE> +<P>If you're interested in the details of the pipe implementation, refer +to <TT>fs/pipe.c</TT> in the Linux kernel source.</P> +<BR> + +</TD></TR> +</TABLE> +<P><BR></P> +<TABLE WIDTH=100% BORDER=0 CELLPADDING=0 CELLSPACING=0 BGCOLOR="#e2e2e2"> + <TR><TD WIDTH=100% BGCOLOR="#081c59"><P ALIGN=LEFT><FONT SIZE=5 COLOR="#ffffff"><B> Deployment and Instrumentation: elasticsearch</B></FONT></P></TD></TR> +</TABLE> +<P><B>Instrumenting elasticsearch</B> +<P>We come to the final stage of our deployment. +System log messages are now flowing to our central repository at an +alarming rate, now we need an efficient way to index them immediately +as they arrive, and also to allow interactive queries of that indexed +data. +This turns out to have been made easy by the <I>elasticsearch</I> +project, which is a distributed, RESTful, search engine built on top +of Lucene.</P> +<P>A basic setup involves downloading the code, untarring, and running +<I>bin/elasticsearch -f</I>. That's it, with no more configuration than +that we have a working solution which correctly identifies the timestamp +fields as distinct from the other text.</P> +<P>From there we can increase reliability and scalability in a number of +ways with <I>elasticsearch</I>, but that setup will differ for different +deployments and is outside the scope here.</P> +<P>Configuring <I>rsyslog</I> to send messages in the JSON format which +the <I>elasticsearch</I> REST API uses, is a matter of configuring the +appropriate output module. +As was the case with the <I>rsyslog</I> stats module, this must be +explicitly enabled - both at the source level and at runtime. +To enable this functionality in an <I>rsyslog</I> build, the +<TT>--enable-elasticsearch</TT> build configuration flag is needed.</P> +<PRE> +	# +	# Create a searchable index using elasticsearch +	# +	$ModLoad omelasticsearch +	*.=info;*.=notice;*.=warn;\ +		auth,authpriv.none;\ +		cron,daemon.none;\ +		mail,news,syslog.none		:omelasticsearch: +</PRE> +<P>The default template does a good job of transforming the arriving +<I>rsyslog</I> messages (including timestamps, facility, priority, +sending hostname, etc) into JSON. +In our case, the application code sending messages on the "local0" +facility has already prepared messages in a rich JSON format already, +so we just use a basic <I>rsyslog</I> template that effectively passes +any "local0" messages straight through to the keeper.</P> + +<TABLE WIDTH=100% BORDER=0 CELLPADDING=0 CELLSPACING=0> +<TR> +<TD> + <TABLE BORDER=0 CELLPADDING=0 CELLSPACING=15> + <TR><TD> + <P>For monitoring of the cluster, another PMDA exists which exports + the statistics that <I>elasticsearch</I> makes available. + This exports information about the individual cluster nodes (if more + than one cluster node is in use) - their JVM memory statistics, + cluster and node status, document indexing rates, etc.</P> + </TD></TR> + <TR><TD> + <TABLE WIDTH=100% BORDER=0 CELLPADDING=10 CELLSPACING=20> + <TR><TD BGCOLOR="#e2e2e2" WIDTH=50%><BR><IMG SRC="images/stepfwd_on.png" WIDTH=16 HEIGHT=16 BORDER=0> Install <I>pmdaelasticsearch</I>: + <PRE><B># source /etc/pcp.env +# cd $PCP_PMDAS_DIR/elasticsearch +# ./Install </B></PRE> +<BR> + </TD></TR> + </TD></TR> + <TR><TD> +<P>And the following metrics become available:</P> +<I><PRE> +elasticsearch.cluster.active_shards +elasticsearch.cluster.relocating_shards +elasticsearch.cluster.timed_out +elasticsearch.cluster.active_primary_shards +elasticsearch.cluster.number_of_nodes +elasticsearch.cluster.number_of_data_nodes +elasticsearch.cluster.cluster_name +elasticsearch.cluster.unassigned_shards +elasticsearch.cluster.initializing_shards +elasticsearch.cluster.status.code +elasticsearch.cluster.status.colour +</PRE></I> + </TD></TR> + </TABLE> + </TD></TR> + </TABLE> +</TD> +<TD> +<I><PRE> +	elasticsearch.nodes.indices.size +	elasticsearch.nodes.cache.field_size +	elasticsearch.nodes.cache.field_evictions +	elasticsearch.nodes.cache.filter_size +	elasticsearch.nodes.cache.filter_evictions +	elasticsearch.nodes.cache.filter_count +	elasticsearch.nodes.merges.total_time +	elasticsearch.nodes.merges.current +	elasticsearch.nodes.merges.total +	elasticsearch.nodes.jvm.vm_version +	elasticsearch.nodes.jvm.version +	elasticsearch.nodes.jvm.vm_name +	elasticsearch.nodes.jvm.pid +	elasticsearch.nodes.jvm.uptime_s +	elasticsearch.nodes.jvm.uptime +	elasticsearch.nodes.jvm.gc.count +	elasticsearch.nodes.jvm.gc.time +	elasticsearch.nodes.jvm.gc.collectors.Copy.time +	elasticsearch.nodes.jvm.gc.collectors.Copy.count +	elasticsearch.nodes.jvm.gc.collectors.ParNew.count +	elasticsearch.nodes.jvm.gc.collectors.ParNew.time +	elasticsearch.nodes.jvm.gc.collectors.CMS.count +	elasticsearch.nodes.jvm.gc.collectors.CMS.time +	elasticsearch.nodes.jvm.threads.count +	elasticsearch.nodes.jvm.threads.peak_count +	elasticsearch.nodes.jvm.mem.heap_max +	elasticsearch.nodes.jvm.mem.heap_committed +	elasticsearch.nodes.jvm.mem.non_heap_init +	elasticsearch.nodes.jvm.mem.heap_init +	elasticsearch.nodes.jvm.mem.non_heap_committed +	elasticsearch.nodes.jvm.mem.non_heap_used +	elasticsearch.nodes.jvm.mem.non_heap_max +	elasticsearch.nodes.jvm.mem.heap_used +	elasticsearch.nodes.docs.count +	elasticsearch.nodes.docs.num_docs +</PRE></I> +</TD> +</TR> +</TABLE> + +<P><B>Search queries</B> +<P>Now that data is being indexed in <I>elasticsearch</I>, we can make +interactive queries using <I>elasticsearch-head</I>, which looks a bit +like this:</P> + +<P> +<CENTER> +<IMG SRC="images/elasticsearch.png" ALIGN="MIDDLE" WIDTH="1356" HEIGHT="490"> +</CENTER> +</P> + +<P><BR></P> +<HR> +<CENTER> +<TABLE WIDTH=100% BORDER=0 CELLPADDING=0 CELLSPACING=0> + <TR> <TD WIDTH=50%><P>Copyright © 2007-2010 <A HREF="http://www.aconex.com/"><FONT COLOR="#000060">Aconex</FONT></A><BR>Copyright © 2000-2004 <A HREF="http://www.sgi.com/"><FONT COLOR="#000060">Silicon Graphics Inc</FONT></P></TD> + <TD WIDTH=50%><P ALIGN=RIGHT><A HREF="http://pcp.io/"><FONT COLOR="#000060">PCP Site</FONT></A><BR>Copyright © 2012-2014 <A HREF="http://www.redhat.com/"><FONT COLOR="#000060">Red Hat</FONT></P></TD> </TR> +</TABLE> +</CENTER> +</BODY> +</HTML> diff --git a/man/html/images/GNUmakefile b/man/html/images/GNUmakefile new file mode 100644 index 0000000..ee2b571 --- /dev/null +++ b/man/html/images/GNUmakefile @@ -0,0 +1,27 @@ +TOPDIR = ../../.. +include $(TOPDIR)/src/include/builddefs + +ICOFILES = $(shell echo *.ico) +PNGFILES = $(shell echo *.png) +SVGFILES = $(shell echo *.svg) +LSRCFILES = $(ICOFILES) $(PNGFILES) $(SVGFILES) +ICONLINKS = pcpicon.png pmcharticon.png pmtimeicon.png stepfwd_on.png system-search.png +INSTFILES = $(shell echo $(ICONLINKS) $(ICOFILES) $(PNGFILES) | tr ' ' '\n' | sort -u) +LDIRT = $(ICONLINKS) + +default: + @for l in $(ICONLINKS) ; do \ + if [ ! -L $$l -a ! -f $$l ] ; then \ + $(LN_S) $(TOPDIR)/images/$$l $$l ; \ + fi \ + done + +include $(BUILDRULES) + +install: default + $(INSTALL) -m 755 -d $(PCP_BOOKS_DIR)/html/images + $(INSTALL) -m 644 $(INSTFILES) $(PCP_BOOKS_DIR)/html/images + +default_pcp : default + +install_pcp : install diff --git a/man/html/images/cpu_pswitch.png b/man/html/images/cpu_pswitch.png Binary files differnew file mode 100644 index 0000000..de38e36 --- /dev/null +++ b/man/html/images/cpu_pswitch.png diff --git a/man/html/images/dkvis.png b/man/html/images/dkvis.png Binary files differnew file mode 100644 index 0000000..cd95ccc --- /dev/null +++ b/man/html/images/dkvis.png diff --git a/man/html/images/elasticsearch.png b/man/html/images/elasticsearch.png Binary files differnew file mode 100644 index 0000000..536235b --- /dev/null +++ b/man/html/images/elasticsearch.png diff --git a/man/html/images/model_biload.png b/man/html/images/model_biload.png Binary files differnew file mode 100644 index 0000000..defd12b --- /dev/null +++ b/man/html/images/model_biload.png diff --git a/man/html/images/model_dbload.png b/man/html/images/model_dbload.png Binary files differnew file mode 100644 index 0000000..1caaf8f --- /dev/null +++ b/man/html/images/model_dbload.png diff --git a/man/html/images/model_nasload.png b/man/html/images/model_nasload.png Binary files differnew file mode 100644 index 0000000..258a2b8 --- /dev/null +++ b/man/html/images/model_nasload.png diff --git a/man/html/images/model_spreadsheet.png b/man/html/images/model_spreadsheet.png Binary files differnew file mode 100644 index 0000000..c6b3107 --- /dev/null +++ b/man/html/images/model_spreadsheet.png diff --git a/man/html/images/mover.nfile.counter.3min.png b/man/html/images/mover.nfile.counter.3min.png Binary files differnew file mode 100644 index 0000000..5210982 --- /dev/null +++ b/man/html/images/mover.nfile.counter.3min.png diff --git a/man/html/images/mover.nfile.counter.png b/man/html/images/mover.nfile.counter.png Binary files differnew file mode 100644 index 0000000..8231a96 --- /dev/null +++ b/man/html/images/mover.nfile.counter.png diff --git a/man/html/images/mover.nfile.instant.3min.png b/man/html/images/mover.nfile.instant.3min.png Binary files differnew file mode 100644 index 0000000..706674c --- /dev/null +++ b/man/html/images/mover.nfile.instant.3min.png diff --git a/man/html/images/mover.nfile.instant.png b/man/html/images/mover.nfile.instant.png Binary files differnew file mode 100644 index 0000000..a56ec8a --- /dev/null +++ b/man/html/images/mover.nfile.instant.png diff --git a/man/html/images/mover.nfile.step.png b/man/html/images/mover.nfile.step.png Binary files differnew file mode 100644 index 0000000..60c860f --- /dev/null +++ b/man/html/images/mover.nfile.step.png diff --git a/man/html/images/mover.png b/man/html/images/mover.png Binary files differnew file mode 100644 index 0000000..3504066 --- /dev/null +++ b/man/html/images/mover.png diff --git a/man/html/images/mover.v3.png b/man/html/images/mover.v3.png Binary files differnew file mode 100644 index 0000000..27df465 --- /dev/null +++ b/man/html/images/mover.v3.png diff --git a/man/html/images/mpvis.png b/man/html/images/mpvis.png Binary files differnew file mode 100644 index 0000000..2338528 --- /dev/null +++ b/man/html/images/mpvis.png diff --git a/man/html/images/ovevents.png b/man/html/images/ovevents.png Binary files differnew file mode 100644 index 0000000..d47dc45 --- /dev/null +++ b/man/html/images/ovevents.png diff --git a/man/html/images/pcp.ico b/man/html/images/pcp.ico Binary files differnew file mode 100644 index 0000000..168721e --- /dev/null +++ b/man/html/images/pcp.ico diff --git a/man/html/images/pmchart_add_host_secure.png b/man/html/images/pmchart_add_host_secure.png Binary files differnew file mode 100644 index 0000000..b819d34 --- /dev/null +++ b/man/html/images/pmchart_add_host_secure.png diff --git a/man/html/images/pmchart_blank_canvas.png b/man/html/images/pmchart_blank_canvas.png Binary files differnew file mode 100644 index 0000000..81d1943 --- /dev/null +++ b/man/html/images/pmchart_blank_canvas.png diff --git a/man/html/images/pmchart_cpu_disk.png b/man/html/images/pmchart_cpu_disk.png Binary files differnew file mode 100644 index 0000000..c5cea8a --- /dev/null +++ b/man/html/images/pmchart_cpu_disk.png diff --git a/man/html/images/pmchart_cpu_disk_load.png b/man/html/images/pmchart_cpu_disk_load.png Binary files differnew file mode 100644 index 0000000..b8c2669 --- /dev/null +++ b/man/html/images/pmchart_cpu_disk_load.png diff --git a/man/html/images/pmchart_cpu_disk_record.png b/man/html/images/pmchart_cpu_disk_record.png Binary files differnew file mode 100644 index 0000000..f6614da --- /dev/null +++ b/man/html/images/pmchart_cpu_disk_record.png diff --git a/man/html/images/pmchart_edit_chart.png b/man/html/images/pmchart_edit_chart.png Binary files differnew file mode 100644 index 0000000..1502d5e --- /dev/null +++ b/man/html/images/pmchart_edit_chart.png diff --git a/man/html/images/pmchart_new_chart.png b/man/html/images/pmchart_new_chart.png Binary files differnew file mode 100644 index 0000000..874632e --- /dev/null +++ b/man/html/images/pmchart_new_chart.png diff --git a/man/html/images/pmchart_new_chart_colors.png b/man/html/images/pmchart_new_chart_colors.png Binary files differnew file mode 100644 index 0000000..9fc6b7c --- /dev/null +++ b/man/html/images/pmchart_new_chart_colors.png diff --git a/man/html/images/pmchart_new_chart_select.png b/man/html/images/pmchart_new_chart_select.png Binary files differnew file mode 100644 index 0000000..2592497 --- /dev/null +++ b/man/html/images/pmchart_new_chart_select.png diff --git a/man/html/images/pmchart_open_view.png b/man/html/images/pmchart_open_view.png Binary files differnew file mode 100644 index 0000000..1a9f5a8 --- /dev/null +++ b/man/html/images/pmchart_open_view.png diff --git a/man/html/images/pmchart_stop_recording.png b/man/html/images/pmchart_stop_recording.png Binary files differnew file mode 100644 index 0000000..54a94a2 --- /dev/null +++ b/man/html/images/pmchart_stop_recording.png diff --git a/man/html/images/pmie_axis1.png b/man/html/images/pmie_axis1.png Binary files differnew file mode 100644 index 0000000..8c6be80 --- /dev/null +++ b/man/html/images/pmie_axis1.png diff --git a/man/html/images/pmie_axis2.png b/man/html/images/pmie_axis2.png Binary files differnew file mode 100644 index 0000000..719f6fc --- /dev/null +++ b/man/html/images/pmie_axis2.png diff --git a/man/html/images/pmie_axis3.png b/man/html/images/pmie_axis3.png Binary files differnew file mode 100644 index 0000000..a671a1c --- /dev/null +++ b/man/html/images/pmie_axis3.png diff --git a/man/html/images/pmie_axis4.png b/man/html/images/pmie_axis4.png Binary files differnew file mode 100644 index 0000000..05faabd --- /dev/null +++ b/man/html/images/pmie_axis4.png diff --git a/man/html/images/pmie_rule1.png b/man/html/images/pmie_rule1.png Binary files differnew file mode 100644 index 0000000..3ae47a4 --- /dev/null +++ b/man/html/images/pmie_rule1.png diff --git a/man/html/images/pmie_rule1.svg b/man/html/images/pmie_rule1.svg new file mode 100644 index 0000000..5a030a6 --- /dev/null +++ b/man/html/images/pmie_rule1.svg @@ -0,0 +1,221 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> + +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="495" + height="200" + id="svg2" + version="1.1" + inkscape:version="0.47 r22583" + sodipodi:docname="pmie_rule1.svg" + inkscape:export-filename="/source/git/nathans/pcp-gui/man/html/images/pmie_rule1.png" + inkscape:export-xdpi="90" + inkscape:export-ydpi="90"> + <defs + id="defs4"> + <inkscape:perspective + sodipodi:type="inkscape:persp3d" + inkscape:vp_x="0 : 526.18109 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_z="744.09448 : 526.18109 : 1" + inkscape:persp3d-origin="372.04724 : 350.78739 : 1" + id="perspective10" /> + <inkscape:perspective + id="perspective4112" + inkscape:persp3d-origin="0.5 : 0.33333333 : 1" + inkscape:vp_z="1 : 0.5 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 0.5 : 1" + sodipodi:type="inkscape:persp3d" /> + <inkscape:perspective + id="perspective4112-1" + inkscape:persp3d-origin="0.5 : 0.33333333 : 1" + inkscape:vp_z="1 : 0.5 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 0.5 : 1" + sodipodi:type="inkscape:persp3d" /> + </defs> + <sodipodi:namedview + id="base" + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1.0" + inkscape:pageopacity="0.0" + inkscape:pageshadow="2" + inkscape:zoom="0.7" + inkscape:cx="224.56281" + inkscape:cy="133.99048" + inkscape:document-units="px" + inkscape:current-layer="layer1" + showgrid="false" /> + <metadata + id="metadata7"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + <dc:title /> + </cc:Work> + </rdf:RDF> + </metadata> + <g + inkscape:label="Layer 1" + inkscape:groupmode="layer" + id="layer1" + transform="translate(0,-852.36218)"> + <rect + style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#f80824;stroke-width:4.22632027;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" + id="rect3592" + width="467.9165" + height="77.91655" + x="15.327446" + y="913.9754" /> + <text + xml:space="preserve" + style="font-size:24;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:FreeSans;-inkscape-font-specification:FreeSans" + x="74.285713" + y="88.571426" + id="text3596" + transform="translate(0,852.36218)"><tspan + sodipodi:role="line" + id="tspan3598" + x="74.285713" + y="88.571426" /></text> + <text + xml:space="preserve" + style="font-size:24px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:FreeSans;-inkscape-font-specification:FreeSans" + x="41.142857" + y="945.79077" + id="text3600"><tspan + sodipodi:role="line" + id="tspan3602" + x="41.142857" + y="945.79077" + style="font-weight:bold">kernel.all.pswitch <tspan + style="font-weight:bold;fill:#ff031d;fill-opacity:1" + id="tspan3606">></tspan> 2000 <tspan + style="font-weight:bold;fill:#ff0000;fill-opacity:1" + id="tspan3654">count / sec</tspan></tspan><tspan + sodipodi:role="line" + x="41.142857" + y="975.79077" + id="tspan3604" + style="font-weight:bold"><tspan + style="font-weight:bold;fill:#ff0000;fill-opacity:1" + id="tspan3656">-> alarm</tspan> "high context switch rate" <tspan + style="font-weight:bold;fill:#ed071b;fill-opacity:1" + id="tspan4086">;</tspan></tspan></text> + <text + xml:space="preserve" + style="font-size:24px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:FreeSans;-inkscape-font-specification:FreeSans" + x="14.285715" + y="880.93359" + id="text4088"><tspan + sodipodi:role="line" + id="tspan4090" + x="14.285715" + y="880.93359">performance metric</tspan></text> + <text + xml:space="preserve" + style="font-size:24px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:FreeSans;-inkscape-font-specification:FreeSans" + x="288.57144" + y="879.50507" + id="text4092"><tspan + sodipodi:role="line" + id="tspan4094" + x="288.57144" + y="879.50507">constant with units</tspan></text> + <text + xml:space="preserve" + style="font-size:24px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:FreeSans;-inkscape-font-specification:FreeSans" + x="37.142853" + y="1040.9336" + id="text4096"><tspan + sodipodi:role="line" + id="tspan4098" + x="37.142853" + y="1040.9336">alarm action</tspan></text> + <g + id="g4148" + transform="matrix(0.96193666,-0.30935215,0.20916655,0.89635456,-156.58435,196.99713)" + style="opacity:0.89699557;fill:#ed071b;fill-opacity:1;stroke:#ff0012;stroke-opacity:1"> + <path + transform="matrix(1.0357578,0,0,0.99567281,61.624303,918.25692)" + d="m 28.571429,-81.428574 c -2.165063,0.61859 -4.854737,-4.697115 -6.472983,-6.26282 -1.618246,-1.565706 -7.019802,-4.078527 -6.472985,-6.262822 0.546818,-2.184294 6.495191,-1.855768 8.660254,-2.474358 2.165064,-0.618589 7.042009,-4.040066 8.660255,-2.474358 1.618246,1.565705 -1.640453,6.552884 -2.18727,8.737179 -0.546818,2.184295 -0.02221,8.11859 -2.187271,8.737179 z" + inkscape:randomized="0" + inkscape:rounded="0.25" + inkscape:flatsided="false" + sodipodi:arg2="2.3396942" + sodipodi:arg1="1.2924967" + sodipodi:r2="5.2000785" + sodipodi:r1="10.400157" + sodipodi:cy="-91.428574" + sodipodi:cx="25.714287" + sodipodi:sides="3" + id="path4100" + style="fill:#ed071b;fill-opacity:1;fill-rule:nonzero;stroke:#ff0012;stroke-width:5;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" + sodipodi:type="star" /> + <path + id="path4102" + d="M 86.592933,821.58384 76.819617,792.88455" + style="fill:#ed071b;fill-opacity:1;stroke:#ff0012;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" /> + </g> + <g + id="g4144" + transform="matrix(0.51602266,0.85657493,-0.85657493,0.51602266,976.61315,331.26048)"> + <path + transform="matrix(1.0357578,0,0,0.99567281,156.06321,919.32798)" + d="m 28.571429,-81.428574 c -2.165063,0.61859 -4.854737,-4.697115 -6.472983,-6.26282 -1.618246,-1.565706 -7.019802,-4.078527 -6.472985,-6.262822 0.546818,-2.184294 6.495191,-1.855768 8.660254,-2.474358 2.165064,-0.618589 7.042009,-4.040066 8.660255,-2.474358 1.618246,1.565705 -1.640453,6.552884 -2.18727,8.737179 -0.546818,2.184295 -0.02221,8.11859 -2.187271,8.737179 z" + inkscape:randomized="0" + inkscape:rounded="0.25" + inkscape:flatsided="false" + sodipodi:arg2="2.3396942" + sodipodi:arg1="1.2924967" + sodipodi:r2="5.2000785" + sodipodi:r1="10.400157" + sodipodi:cy="-91.428574" + sodipodi:cx="25.714287" + sodipodi:sides="3" + id="path4100-8" + style="fill:#ed071b;fill-opacity:1;fill-rule:nonzero;stroke:#f80824;stroke-width:5;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" + sodipodi:type="star" /> + <path + id="path4102-2" + d="m 181.03184,822.6549 -9.77332,-28.69929" + style="fill:none;stroke:#ff0012;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" /> + </g> + <g + id="g4140" + transform="matrix(-0.72568113,-0.68803117,0.68803117,-0.72568113,-251.94582,1773.1963)"> + <path + transform="matrix(1.0357578,0,0,0.99567281,247.49178,907.18513)" + d="m 28.571429,-81.428574 c -2.165063,0.61859 -4.854737,-4.697115 -6.472983,-6.26282 -1.618246,-1.565706 -7.019802,-4.078527 -6.472985,-6.262822 0.546818,-2.184294 6.495191,-1.855768 8.660254,-2.474358 2.165064,-0.618589 7.042009,-4.040066 8.660255,-2.474358 1.618246,1.565705 -1.640453,6.552884 -2.18727,8.737179 -0.546818,2.184295 -0.02221,8.11859 -2.187271,8.737179 z" + inkscape:randomized="0" + inkscape:rounded="0.25" + inkscape:flatsided="false" + sodipodi:arg2="2.3396942" + sodipodi:arg1="1.2924967" + sodipodi:r2="5.2000785" + sodipodi:r1="10.400157" + sodipodi:cy="-91.428574" + sodipodi:cx="25.714287" + sodipodi:sides="3" + id="path4100-0" + style="fill:#ed071b;fill-opacity:1;fill-rule:nonzero;stroke:#f80824;stroke-width:5;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" + sodipodi:type="star" /> + <path + id="path4102-5" + d="m 272.46041,810.51205 -9.77332,-28.69929" + style="fill:none;stroke:#ff0012;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" /> + </g> + </g> +</svg> diff --git a/man/html/images/pmie_rule2.png b/man/html/images/pmie_rule2.png Binary files differnew file mode 100644 index 0000000..2acc517 --- /dev/null +++ b/man/html/images/pmie_rule2.png diff --git a/man/html/images/pmie_rule2.svg b/man/html/images/pmie_rule2.svg new file mode 100644 index 0000000..c600382 --- /dev/null +++ b/man/html/images/pmie_rule2.svg @@ -0,0 +1,224 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> + +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="495" + height="200" + id="svg2" + version="1.1" + inkscape:version="0.47 r22583" + sodipodi:docname="pmie_rule2.svg" + inkscape:export-filename="/source/git/nathans/pcp-gui/man/html/images/pmie_rule2.png" + inkscape:export-xdpi="90" + inkscape:export-ydpi="90"> + <defs + id="defs4"> + <inkscape:perspective + sodipodi:type="inkscape:persp3d" + inkscape:vp_x="0 : 526.18109 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_z="744.09448 : 526.18109 : 1" + inkscape:persp3d-origin="372.04724 : 350.78739 : 1" + id="perspective10" /> + <inkscape:perspective + id="perspective4112" + inkscape:persp3d-origin="0.5 : 0.33333333 : 1" + inkscape:vp_z="1 : 0.5 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 0.5 : 1" + sodipodi:type="inkscape:persp3d" /> + <inkscape:perspective + id="perspective4112-1" + inkscape:persp3d-origin="0.5 : 0.33333333 : 1" + inkscape:vp_z="1 : 0.5 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 0.5 : 1" + sodipodi:type="inkscape:persp3d" /> + <inkscape:perspective + id="perspective2853" + inkscape:persp3d-origin="0.5 : 0.33333333 : 1" + inkscape:vp_z="1 : 0.5 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 0.5 : 1" + sodipodi:type="inkscape:persp3d" /> + <inkscape:perspective + id="perspective2853-2" + inkscape:persp3d-origin="0.5 : 0.33333333 : 1" + inkscape:vp_z="1 : 0.5 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 0.5 : 1" + sodipodi:type="inkscape:persp3d" /> + </defs> + <sodipodi:namedview + id="base" + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1.0" + inkscape:pageopacity="0.0" + inkscape:pageshadow="2" + inkscape:zoom="0.7" + inkscape:cx="296.56459" + inkscape:cy="133.99048" + inkscape:document-units="px" + inkscape:current-layer="layer1" + showgrid="false" /> + <metadata + id="metadata7"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + <dc:title /> + </cc:Work> + </rdf:RDF> + </metadata> + <g + inkscape:label="Layer 1" + inkscape:groupmode="layer" + id="layer1" + transform="translate(0,-852.36218)"> + <rect + style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#f80824;stroke-width:4.22632027;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" + id="rect3592" + width="467.9165" + height="77.91655" + x="15.327446" + y="859.9754" /> + <text + xml:space="preserve" + style="font-size:24;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:FreeSans;-inkscape-font-specification:FreeSans" + x="74.285713" + y="88.571426" + id="text3596" + transform="translate(0,852.36218)"><tspan + sodipodi:role="line" + id="tspan3598" + x="74.285713" + y="88.571426" /></text> + <text + xml:space="preserve" + style="font-size:24px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:FreeSans;-inkscape-font-specification:FreeSans" + x="41.142857" + y="889.79077" + id="text3600"><tspan + sodipodi:role="line" + id="tspan3602" + x="41.142857" + y="889.79077" + style="font-weight:bold">kernel.all.pswitch <tspan + style="font-weight:bold;fill:#ff031d;fill-opacity:1" + id="tspan3606">></tspan> 2000 <tspan + style="font-weight:bold;fill:#ff0000;fill-opacity:1" + id="tspan3654">count / sec</tspan></tspan><tspan + sodipodi:role="line" + x="41.142857" + y="919.79077" + id="tspan3604" + style="font-weight:bold"><tspan + style="font-weight:bold;fill:#ff0000;fill-opacity:1" + id="tspan3656">-> shell <tspan + style="fill:#2b0000" + id="tspan2839">5</tspan> min</tspan> " xterm -e 'top' " <tspan + style="font-weight:bold;fill:#ed071b;fill-opacity:1" + id="tspan4086">;</tspan></tspan></text> + <text + xml:space="preserve" + style="font-size:24px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:FreeSans;-inkscape-font-specification:FreeSans" + x="227.14285" + y="989.79071" + id="text4088"><tspan + sodipodi:role="line" + id="tspan4090" + x="227.14285" + y="989.79071">program to execute</tspan></text> + <text + xml:space="preserve" + style="font-size:24px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:FreeSans;-inkscape-font-specification:FreeSans" + x="120.00002" + y="1014.3622" + id="text4092"><tspan + sodipodi:role="line" + id="tspan4094" + x="120.00002" + y="1014.3622">hold off repetition</tspan></text> + <text + xml:space="preserve" + style="font-size:24px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:FreeSans;-inkscape-font-specification:FreeSans" + x="22.857138" + y="1037.2194" + id="text4096"><tspan + sodipodi:role="line" + id="tspan4098" + x="22.857138" + y="1037.2194">launch program</tspan></text> + <path + sodipodi:type="star" + style="fill:#ed071b;fill-opacity:1;fill-rule:nonzero;stroke:#f80824;stroke-width:5;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" + id="path4100-0" + sodipodi:sides="3" + sodipodi:cx="25.714287" + sodipodi:cy="-91.428574" + sodipodi:r1="10.400157" + sodipodi:r2="5.2000785" + sodipodi:arg1="1.2924967" + sodipodi:arg2="2.3396942" + inkscape:flatsided="false" + inkscape:rounded="0.25" + inkscape:randomized="0" + d="m 28.571429,-81.428574 c -2.165063,0.61859 -4.854737,-4.697115 -6.472983,-6.26282 -1.618246,-1.565706 -7.019802,-4.078527 -6.472985,-6.262822 0.546818,-2.184294 6.495191,-1.855768 8.660254,-2.474358 2.165064,-0.618589 7.042009,-4.040066 8.660255,-2.474358 1.618246,1.565705 -1.640453,6.552884 -2.18727,8.737179 -0.546818,2.184295 -0.02221,8.11859 -2.187271,8.737179 z" + transform="matrix(-0.89164349,-0.31095083,0.35210688,-1.0338078,137.43382,855.97071)" /> + <path + style="fill:none;stroke:#ff0012;stroke-width:3.528018;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" + d="m 81.488096,949.11447 -1.207647,65.06173" + id="path4102-5" /> + <path + sodipodi:type="star" + style="fill:#ed071b;fill-opacity:1;fill-rule:nonzero;stroke:#f80824;stroke-width:5;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" + id="path4100-0-6" + sodipodi:sides="3" + sodipodi:cx="25.714287" + sodipodi:cy="-91.428574" + sodipodi:r1="10.400157" + sodipodi:r2="5.2000785" + sodipodi:arg1="1.2924967" + sodipodi:arg2="2.3396942" + inkscape:flatsided="false" + inkscape:rounded="0.25" + inkscape:randomized="0" + d="m 28.571429,-81.428574 c -2.165063,0.61859 -4.854737,-4.697115 -6.472983,-6.26282 -1.618246,-1.565706 -7.019802,-4.078527 -6.472985,-6.262822 0.546818,-2.184294 6.495191,-1.855768 8.660254,-2.474358 2.165064,-0.618589 7.042009,-4.040066 8.660255,-2.474358 1.618246,1.565705 -1.640453,6.552884 -2.18727,8.737179 -0.546818,2.184295 -0.02221,8.11859 -2.187271,8.737179 z" + transform="matrix(-0.89164349,-0.31095083,0.35210688,-1.0338078,216.96942,855.9983)" /> + <path + style="fill:none;stroke:#ff0012;stroke-width:3.20799208;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" + d="m 161.18371,948.98205 -1.52767,42.52462" + id="path4102-5-3" /> + <path + sodipodi:type="star" + style="fill:#ed071b;fill-opacity:1;fill-rule:nonzero;stroke:#f80824;stroke-width:5;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" + id="path4100-0-0" + sodipodi:sides="3" + sodipodi:cx="25.714287" + sodipodi:cy="-91.428574" + sodipodi:r1="10.400157" + sodipodi:r2="5.2000785" + sodipodi:arg1="1.2924967" + sodipodi:arg2="2.3396942" + inkscape:flatsided="false" + inkscape:rounded="0.25" + inkscape:randomized="0" + d="m 28.571429,-81.428574 c -2.165063,0.61859 -4.854737,-4.697115 -6.472983,-6.26282 -1.618246,-1.565706 -7.019802,-4.078527 -6.472985,-6.262822 0.546818,-2.184294 6.495191,-1.855768 8.660254,-2.474358 2.165064,-0.618589 7.042009,-4.040066 8.660255,-2.474358 1.618246,1.565705 -1.640453,6.552884 -2.18727,8.737179 -0.546818,2.184295 -0.02221,8.11859 -2.187271,8.737179 z" + transform="matrix(-0.89164349,-0.31095083,0.35210688,-1.0338078,319.82657,856.56973)" /> + <path + style="fill:none;stroke:#ff0012;stroke-width:2.61137056;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" + d="m 263.66469,949.20703 -0.77533,20.36035" + id="path4102-5-6" /> + </g> +</svg> diff --git a/man/html/images/pmie_rule3.png b/man/html/images/pmie_rule3.png Binary files differnew file mode 100644 index 0000000..a11ef45 --- /dev/null +++ b/man/html/images/pmie_rule3.png diff --git a/man/html/images/pmie_rule3.svg b/man/html/images/pmie_rule3.svg new file mode 100644 index 0000000..243ef2f --- /dev/null +++ b/man/html/images/pmie_rule3.svg @@ -0,0 +1,139 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> + +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="495" + height="120" + id="svg2" + version="1.1" + inkscape:version="0.47 r22583" + sodipodi:docname="pmie_rule3.svg" + inkscape:export-filename="/source/git/nathans/pcp-gui/man/html/images/pmie_rule3.png" + inkscape:export-xdpi="90" + inkscape:export-ydpi="90"> + <defs + id="defs4"> + <inkscape:perspective + sodipodi:type="inkscape:persp3d" + inkscape:vp_x="0 : 526.18109 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_z="744.09448 : 526.18109 : 1" + inkscape:persp3d-origin="372.04724 : 350.78739 : 1" + id="perspective10" /> + <inkscape:perspective + id="perspective4112" + inkscape:persp3d-origin="0.5 : 0.33333333 : 1" + inkscape:vp_z="1 : 0.5 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 0.5 : 1" + sodipodi:type="inkscape:persp3d" /> + <inkscape:perspective + id="perspective4112-1" + inkscape:persp3d-origin="0.5 : 0.33333333 : 1" + inkscape:vp_z="1 : 0.5 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 0.5 : 1" + sodipodi:type="inkscape:persp3d" /> + <inkscape:perspective + id="perspective2853" + inkscape:persp3d-origin="0.5 : 0.33333333 : 1" + inkscape:vp_z="1 : 0.5 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 0.5 : 1" + sodipodi:type="inkscape:persp3d" /> + <inkscape:perspective + id="perspective2853-2" + inkscape:persp3d-origin="0.5 : 0.33333333 : 1" + inkscape:vp_z="1 : 0.5 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 0.5 : 1" + sodipodi:type="inkscape:persp3d" /> + </defs> + <sodipodi:namedview + id="base" + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1.0" + inkscape:pageopacity="0.0" + inkscape:pageshadow="2" + inkscape:zoom="0.7" + inkscape:cx="334.18561" + inkscape:cy="133.99048" + inkscape:document-units="px" + inkscape:current-layer="layer1" + showgrid="false" /> + <metadata + id="metadata7"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + <dc:title /> + </cc:Work> + </rdf:RDF> + </metadata> + <g + inkscape:label="Layer 1" + inkscape:groupmode="layer" + id="layer1" + transform="translate(0,-932.36218)"> + <rect + style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#f80824;stroke-width:4.88859749;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" + id="rect3592" + width="467.25424" + height="104.39713" + x="15.658585" + y="940.30652" /> + <text + xml:space="preserve" + style="font-size:24px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:FreeSans;-inkscape-font-specification:FreeSans" + x="74.285713" + y="88.571426" + id="text3596" + transform="translate(0,852.36218)"><tspan + sodipodi:role="line" + id="tspan3598" + x="74.285713" + y="88.571426" /></text> + <text + xml:space="preserve" + style="font-size:24px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:FreeSans;-inkscape-font-specification:FreeSans" + x="51.142857" + y="969.79077" + id="text3600"><tspan + sodipodi:role="line" + id="tspan3602" + x="51.142857" + y="969.79077" + style="font-weight:bold">some_inst</tspan><tspan + sodipodi:role="line" + x="51.142857" + y="999.79077" + style="font-weight:bold" + id="tspan2840"> disk.dev.total <tspan + style="font-weight:bold;fill:#ff031d;fill-opacity:1" + id="tspan3606">></tspan> 30 <tspan + style="font-weight:bold;fill:#ff0000;fill-opacity:1" + id="tspan3654">count / sec</tspan></tspan><tspan + sodipodi:role="line" + x="51.142857" + y="1029.7908" + id="tspan3604" + style="font-weight:bold"><tspan + style="font-weight:bold;fill:#ff0000;fill-opacity:1" + id="tspan3656">-> alarm <tspan + style="fill:#2b0000" + id="tspan2839">5</tspan> mins</tspan> "very busy disks"<tspan + style="font-weight:bold;fill:#ed071b;fill-opacity:1" + id="tspan4086">;</tspan></tspan></text> + </g> +</svg> diff --git a/man/html/images/pmie_rule4.png b/man/html/images/pmie_rule4.png Binary files differnew file mode 100644 index 0000000..eadd6c3 --- /dev/null +++ b/man/html/images/pmie_rule4.png diff --git a/man/html/images/pmie_rule4.svg b/man/html/images/pmie_rule4.svg new file mode 100644 index 0000000..ed29ea9 --- /dev/null +++ b/man/html/images/pmie_rule4.svg @@ -0,0 +1,146 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> + +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="540" + height="140" + id="svg2" + version="1.1" + inkscape:version="0.47 r22583" + sodipodi:docname="pmie_rule4.svg" + inkscape:export-filename="/source/git/nathans/pcp-gui/man/html/images/pmie_rule4.png" + inkscape:export-xdpi="90" + inkscape:export-ydpi="90"> + <defs + id="defs4"> + <inkscape:perspective + sodipodi:type="inkscape:persp3d" + inkscape:vp_x="0 : 526.18109 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_z="744.09448 : 526.18109 : 1" + inkscape:persp3d-origin="372.04724 : 350.78739 : 1" + id="perspective10" /> + <inkscape:perspective + id="perspective4112" + inkscape:persp3d-origin="0.5 : 0.33333333 : 1" + inkscape:vp_z="1 : 0.5 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 0.5 : 1" + sodipodi:type="inkscape:persp3d" /> + <inkscape:perspective + id="perspective4112-1" + inkscape:persp3d-origin="0.5 : 0.33333333 : 1" + inkscape:vp_z="1 : 0.5 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 0.5 : 1" + sodipodi:type="inkscape:persp3d" /> + <inkscape:perspective + id="perspective2853" + inkscape:persp3d-origin="0.5 : 0.33333333 : 1" + inkscape:vp_z="1 : 0.5 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 0.5 : 1" + sodipodi:type="inkscape:persp3d" /> + <inkscape:perspective + id="perspective2853-2" + inkscape:persp3d-origin="0.5 : 0.33333333 : 1" + inkscape:vp_z="1 : 0.5 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 0.5 : 1" + sodipodi:type="inkscape:persp3d" /> + </defs> + <sodipodi:namedview + id="base" + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1.0" + inkscape:pageopacity="0.0" + inkscape:pageshadow="2" + inkscape:zoom="0.7" + inkscape:cx="266.3447" + inkscape:cy="133.99048" + inkscape:document-units="px" + inkscape:current-layer="layer1" + showgrid="false" /> + <metadata + id="metadata7"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + <dc:title></dc:title> + </cc:Work> + </rdf:RDF> + </metadata> + <g + inkscape:label="Layer 1" + inkscape:groupmode="layer" + id="layer1" + transform="translate(0,-912.36218)"> + <rect + style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#f80824;stroke-width:5.79608488;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" + id="rect3592" + width="524.91821" + height="130.63248" + x="8.3980427" + y="916.76025" /> + <text + xml:space="preserve" + style="font-size:24px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:FreeSans;-inkscape-font-specification:FreeSans" + x="74.285713" + y="88.571426" + id="text3596" + transform="translate(0,852.36218)"><tspan + sodipodi:role="line" + id="tspan3598" + x="74.285713" + y="88.571426" /></text> + <text + xml:space="preserve" + style="font-size:24px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:FreeSans;-inkscape-font-specification:FreeSans" + x="37.142857" + y="941.79077" + id="text3600"><tspan + sodipodi:role="line" + id="tspan3602" + x="37.142857" + y="941.79077" + style="font-weight:bold">all_sample</tspan><tspan + sodipodi:role="line" + x="37.142857" + y="971.79077" + style="font-weight:bold" + id="tspan2828"> ( some_inst</tspan><tspan + sodipodi:role="line" + x="37.142857" + y="1001.7908" + style="font-weight:bold" + id="tspan2840"> disk.dev.total @0..4 <tspan + style="font-weight:bold;fill:#ff031d;fill-opacity:1" + id="tspan3606">></tspan> 30 <tspan + style="font-weight:bold;fill:#ff0000;fill-opacity:1" + id="tspan3654">count / sec <tspan + style="font-weight:bold;fill:#2b0000;-inkscape-font-specification:Baekmuk Batang Bold" + id="tspan2837">)</tspan></tspan></tspan><tspan + sodipodi:role="line" + x="37.142857" + y="1031.7908" + id="tspan3604" + style="font-weight:bold"><tspan + style="font-weight:bold;fill:#ff0000;fill-opacity:1" + id="tspan3656">-> alarm <tspan + style="fill:#2b0000" + id="tspan2839">5</tspan> mins</tspan> "very busy disks"<tspan + style="font-weight:bold;fill:#ed071b;fill-opacity:1" + id="tspan4086">;</tspan></tspan></text> + </g> +</svg> diff --git a/man/html/images/pmie_rule5.png b/man/html/images/pmie_rule5.png Binary files differnew file mode 100644 index 0000000..77c0528 --- /dev/null +++ b/man/html/images/pmie_rule5.png diff --git a/man/html/images/pmie_rule5.svg b/man/html/images/pmie_rule5.svg new file mode 100644 index 0000000..4d725f8 --- /dev/null +++ b/man/html/images/pmie_rule5.svg @@ -0,0 +1,146 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> + +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="540" + height="140" + id="svg2" + version="1.1" + inkscape:version="0.47 r22583" + sodipodi:docname="pmie_rule5.svg" + inkscape:export-filename="/source/git/nathans/pcp-gui/man/html/images/pmie_rule5.png" + inkscape:export-xdpi="90" + inkscape:export-ydpi="90"> + <defs + id="defs4"> + <inkscape:perspective + sodipodi:type="inkscape:persp3d" + inkscape:vp_x="0 : 526.18109 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_z="744.09448 : 526.18109 : 1" + inkscape:persp3d-origin="372.04724 : 350.78739 : 1" + id="perspective10" /> + <inkscape:perspective + id="perspective4112" + inkscape:persp3d-origin="0.5 : 0.33333333 : 1" + inkscape:vp_z="1 : 0.5 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 0.5 : 1" + sodipodi:type="inkscape:persp3d" /> + <inkscape:perspective + id="perspective4112-1" + inkscape:persp3d-origin="0.5 : 0.33333333 : 1" + inkscape:vp_z="1 : 0.5 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 0.5 : 1" + sodipodi:type="inkscape:persp3d" /> + <inkscape:perspective + id="perspective2853" + inkscape:persp3d-origin="0.5 : 0.33333333 : 1" + inkscape:vp_z="1 : 0.5 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 0.5 : 1" + sodipodi:type="inkscape:persp3d" /> + <inkscape:perspective + id="perspective2853-2" + inkscape:persp3d-origin="0.5 : 0.33333333 : 1" + inkscape:vp_z="1 : 0.5 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 0.5 : 1" + sodipodi:type="inkscape:persp3d" /> + </defs> + <sodipodi:namedview + id="base" + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1.0" + inkscape:pageopacity="0.0" + inkscape:pageshadow="2" + inkscape:zoom="0.7" + inkscape:cx="266.3447" + inkscape:cy="76.847623" + inkscape:document-units="px" + inkscape:current-layer="layer1" + showgrid="false" /> + <metadata + id="metadata7"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + <dc:title></dc:title> + </cc:Work> + </rdf:RDF> + </metadata> + <g + inkscape:label="Layer 1" + inkscape:groupmode="layer" + id="layer1" + transform="translate(0,-912.36218)"> + <rect + style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#f80824;stroke-width:5.79608488;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" + id="rect3592" + width="524.91821" + height="130.63248" + x="8.3980427" + y="916.76025" /> + <text + xml:space="preserve" + style="font-size:24px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:FreeSans;-inkscape-font-specification:FreeSans" + x="74.285713" + y="88.571426" + id="text3596" + transform="translate(0,852.36218)"><tspan + sodipodi:role="line" + id="tspan3598" + x="74.285713" + y="88.571426" /></text> + <text + xml:space="preserve" + style="font-size:24px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:FreeSans;-inkscape-font-specification:FreeSans" + x="37.142857" + y="941.79077" + id="text3600"><tspan + sodipodi:role="line" + id="tspan3602" + x="37.142857" + y="941.79077" + style="font-weight:bold">some_inst</tspan><tspan + sodipodi:role="line" + x="37.142857" + y="971.79077" + style="font-weight:bold" + id="tspan2828"> ( all_sample</tspan><tspan + sodipodi:role="line" + x="37.142857" + y="1001.7908" + style="font-weight:bold" + id="tspan2840"> disk.dev.total @0..4 <tspan + style="font-weight:bold;fill:#ff031d;fill-opacity:1" + id="tspan3606">></tspan> 30 <tspan + style="font-weight:bold;fill:#ff0000;fill-opacity:1" + id="tspan3654">count / sec <tspan + style="font-weight:bold;fill:#2b0000;-inkscape-font-specification:Baekmuk Batang Bold" + id="tspan2837">)</tspan></tspan></tspan><tspan + sodipodi:role="line" + x="37.142857" + y="1031.7908" + id="tspan3604" + style="font-weight:bold"><tspan + style="font-weight:bold;fill:#ff0000;fill-opacity:1" + id="tspan3656">-> alarm <tspan + style="fill:#2b0000" + id="tspan2839">5</tspan> mins</tspan> "very busy disks"<tspan + style="font-weight:bold;fill:#ed071b;fill-opacity:1" + id="tspan4086">;</tspan></tspan></text> + </g> +</svg> diff --git a/man/html/images/pmie_rule6.png b/man/html/images/pmie_rule6.png Binary files differnew file mode 100644 index 0000000..c4a1463 --- /dev/null +++ b/man/html/images/pmie_rule6.png diff --git a/man/html/images/pmie_rule6.svg b/man/html/images/pmie_rule6.svg new file mode 100644 index 0000000..9b59bdb --- /dev/null +++ b/man/html/images/pmie_rule6.svg @@ -0,0 +1,137 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> + +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="495" + height="120" + id="svg2" + version="1.1" + inkscape:version="0.47 r22583" + sodipodi:docname="pmie_rule6.svg" + inkscape:export-filename="/source/git/nathans/pcp-gui/man/html/images/pmie_rule6.png" + inkscape:export-xdpi="90" + inkscape:export-ydpi="90"> + <defs + id="defs4"> + <inkscape:perspective + sodipodi:type="inkscape:persp3d" + inkscape:vp_x="0 : 526.18109 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_z="744.09448 : 526.18109 : 1" + inkscape:persp3d-origin="372.04724 : 350.78739 : 1" + id="perspective10" /> + <inkscape:perspective + id="perspective4112" + inkscape:persp3d-origin="0.5 : 0.33333333 : 1" + inkscape:vp_z="1 : 0.5 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 0.5 : 1" + sodipodi:type="inkscape:persp3d" /> + <inkscape:perspective + id="perspective4112-1" + inkscape:persp3d-origin="0.5 : 0.33333333 : 1" + inkscape:vp_z="1 : 0.5 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 0.5 : 1" + sodipodi:type="inkscape:persp3d" /> + <inkscape:perspective + id="perspective2853" + inkscape:persp3d-origin="0.5 : 0.33333333 : 1" + inkscape:vp_z="1 : 0.5 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 0.5 : 1" + sodipodi:type="inkscape:persp3d" /> + <inkscape:perspective + id="perspective2853-2" + inkscape:persp3d-origin="0.5 : 0.33333333 : 1" + inkscape:vp_z="1 : 0.5 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 0.5 : 1" + sodipodi:type="inkscape:persp3d" /> + </defs> + <sodipodi:namedview + id="base" + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1.0" + inkscape:pageopacity="0.0" + inkscape:pageshadow="2" + inkscape:zoom="0.7" + inkscape:cx="243.73106" + inkscape:cy="133.99048" + inkscape:document-units="px" + inkscape:current-layer="layer1" + showgrid="false" /> + <metadata + id="metadata7"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + <dc:title></dc:title> + </cc:Work> + </rdf:RDF> + </metadata> + <g + inkscape:label="Layer 1" + inkscape:groupmode="layer" + id="layer1" + transform="translate(0,-932.36218)"> + <rect + style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#f80824;stroke-width:4.88859749;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" + id="rect3592" + width="467.25424" + height="104.39713" + x="15.658585" + y="940.30652" /> + <text + xml:space="preserve" + style="font-size:24px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:FreeSans;-inkscape-font-specification:FreeSans" + x="74.285713" + y="88.571426" + id="text3596" + transform="translate(0,852.36218)"><tspan + sodipodi:role="line" + id="tspan3598" + x="74.285713" + y="88.571426" /></text> + <text + xml:space="preserve" + style="font-size:24px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:FreeSans;-inkscape-font-specification:FreeSans" + x="35.142857" + y="969.79077" + id="text3600"><tspan + sodipodi:role="line" + id="tspan3602" + x="35.142857" + y="969.79077" + style="font-weight:bold">30%_inst</tspan><tspan + sodipodi:role="line" + x="35.142857" + y="999.79077" + style="font-weight:bold" + id="tspan2840"> disk.dev.total <tspan + style="font-weight:bold;fill:#ff031d;fill-opacity:1" + id="tspan3606">></tspan> 50 <tspan + style="font-weight:bold;fill:#ff0000;fill-opacity:1" + id="tspan3654">count / sec</tspan></tspan><tspan + sodipodi:role="line" + x="35.142857" + y="1029.7908" + id="tspan3604" + style="font-weight:bold"><tspan + style="font-weight:bold;fill:#ff0000;fill-opacity:1" + id="tspan3656">-> alarm </tspan>"30% of disks are very busy"<tspan + style="font-weight:bold;fill:#ed071b;fill-opacity:1" + id="tspan4086"> ;</tspan></tspan></text> + </g> +</svg> diff --git a/man/html/images/pmtime_archive.png b/man/html/images/pmtime_archive.png Binary files differnew file mode 100644 index 0000000..62ff1d1 --- /dev/null +++ b/man/html/images/pmtime_archive.png diff --git a/man/html/images/pmtime_bounds.png b/man/html/images/pmtime_bounds.png Binary files differnew file mode 100644 index 0000000..5124107 --- /dev/null +++ b/man/html/images/pmtime_bounds.png diff --git a/man/html/images/pmtime_clients.png b/man/html/images/pmtime_clients.png Binary files differnew file mode 100644 index 0000000..e02a9f4 --- /dev/null +++ b/man/html/images/pmtime_clients.png diff --git a/man/html/images/pmtime_live.png b/man/html/images/pmtime_live.png Binary files differnew file mode 100644 index 0000000..d7c3965 --- /dev/null +++ b/man/html/images/pmtime_live.png diff --git a/man/html/images/pmview.flow.png b/man/html/images/pmview.flow.png Binary files differnew file mode 100644 index 0000000..021e9fe --- /dev/null +++ b/man/html/images/pmview.flow.png diff --git a/man/html/images/pmview_buttons.png b/man/html/images/pmview_buttons.png Binary files differnew file mode 100644 index 0000000..400260c --- /dev/null +++ b/man/html/images/pmview_buttons.png diff --git a/man/html/images/rack.jpg b/man/html/images/rack.jpg Binary files differnew file mode 100644 index 0000000..c6dee25 --- /dev/null +++ b/man/html/images/rack.jpg diff --git a/man/html/images/rattle.png b/man/html/images/rattle.png Binary files differnew file mode 100644 index 0000000..e5bebf7 --- /dev/null +++ b/man/html/images/rattle.png diff --git a/man/html/images/sar-d.png b/man/html/images/sar-d.png Binary files differnew file mode 100644 index 0000000..c377b64 --- /dev/null +++ b/man/html/images/sar-d.png diff --git a/man/html/images/server.jpg b/man/html/images/server.jpg Binary files differnew file mode 100644 index 0000000..e459941 --- /dev/null +++ b/man/html/images/server.jpg diff --git a/man/html/images/systemlog-arrival.png b/man/html/images/systemlog-arrival.png Binary files differnew file mode 100644 index 0000000..078df04 --- /dev/null +++ b/man/html/images/systemlog-arrival.png diff --git a/man/html/images/systemlog-events.png b/man/html/images/systemlog-events.png Binary files differnew file mode 100644 index 0000000..7773e7e --- /dev/null +++ b/man/html/images/systemlog-events.png diff --git a/man/html/images/systemlog-throughput.png b/man/html/images/systemlog-throughput.png Binary files differnew file mode 100644 index 0000000..eed22ab --- /dev/null +++ b/man/html/images/systemlog-throughput.png diff --git a/man/html/images/systemlogs.png b/man/html/images/systemlogs.png Binary files differnew file mode 100644 index 0000000..1af84af --- /dev/null +++ b/man/html/images/systemlogs.png diff --git a/man/html/images/systemlogs.svg b/man/html/images/systemlogs.svg new file mode 100644 index 0000000..668f732 --- /dev/null +++ b/man/html/images/systemlogs.svg @@ -0,0 +1,5045 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> + +<svg + xmlns:osb="http://www.openswatchbook.org/uri/2009/osb" + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:xlink="http://www.w3.org/1999/xlink" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="1052.3622" + height="744.09448" + id="svg2" + version="1.1" + inkscape:version="0.48.1 r9760" + sodipodi:docname="systemlogs.svg" + inkscape:export-filename="/source/git/clean-pcp-gui/man/html/images/systemlogs.png" + inkscape:export-xdpi="67.980804" + inkscape:export-ydpi="67.980804"> + <defs + id="defs4"> + <linearGradient + id="linearGradient5789" + osb:paint="solid"> + <stop + style="stop-color:#030000;stop-opacity:1;" + offset="0" + id="stop5791" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + id="linearGradient5330"> + <stop + style="stop-color:#1c2bb1;stop-opacity:1;" + offset="0" + id="stop5332" /> + <stop + style="stop-color:#1c2bb1;stop-opacity:0;" + offset="1" + id="stop5334" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + id="linearGradient3879"> + <stop + style="stop-color:#000000;stop-opacity:1;" + offset="0" + id="stop3881" /> + <stop + style="stop-color:#000000;stop-opacity:0;" + offset="1" + id="stop3883" /> + </linearGradient> + <radialGradient + inkscape:collect="always" + xlink:href="#linearGradient3879" + id="radialGradient3885" + cx="144.28572" + cy="673.07648" + fx="144.28572" + fy="673.07648" + r="115.71429" + gradientTransform="matrix(1,0,0,0.9074074,0,62.321902)" + gradientUnits="userSpaceOnUse" /> + <radialGradient + inkscape:collect="always" + xlink:href="#linearGradient3879-0" + id="radialGradient3885-2" + cx="144.28572" + cy="673.07648" + fx="144.28572" + fy="673.07648" + r="115.71429" + gradientTransform="matrix(1,0,0,0.9074074,0,62.321902)" + gradientUnits="userSpaceOnUse" /> + <linearGradient + inkscape:collect="always" + id="linearGradient3879-0"> + <stop + style="stop-color:#000000;stop-opacity:1;" + offset="0" + id="stop3881-6" /> + <stop + style="stop-color:#000000;stop-opacity:0;" + offset="1" + id="stop3883-1" /> + </linearGradient> + <radialGradient + r="115.71429" + fy="673.07648" + fx="144.28572" + cy="673.07648" + cx="144.28572" + gradientTransform="matrix(1,0,0,0.9074074,0,62.321902)" + gradientUnits="userSpaceOnUse" + id="radialGradient3909" + xlink:href="#linearGradient3879-0" + inkscape:collect="always" /> + <radialGradient + r="115.71429" + fy="673.07648" + fx="144.28572" + cy="673.07648" + cx="144.28572" + gradientTransform="matrix(1,0,0,0.9074074,0,62.321902)" + gradientUnits="userSpaceOnUse" + id="radialGradient3909-5" + xlink:href="#linearGradient3879-0-4" + inkscape:collect="always" /> + <linearGradient + inkscape:collect="always" + id="linearGradient3879-0-4"> + <stop + style="stop-color:#000000;stop-opacity:1;" + offset="0" + id="stop3881-6-7" /> + <stop + style="stop-color:#000000;stop-opacity:0;" + offset="1" + id="stop3883-1-6" /> + </linearGradient> + <radialGradient + r="115.71429" + fy="673.07648" + fx="144.28572" + cy="673.07648" + cx="144.28572" + gradientTransform="matrix(1,0,0,0.9074074,0,62.321902)" + gradientUnits="userSpaceOnUse" + id="radialGradient3943-6" + xlink:href="#linearGradient3879-0-4-9" + inkscape:collect="always" /> + <linearGradient + inkscape:collect="always" + id="linearGradient3879-0-4-9"> + <stop + style="stop-color:#000000;stop-opacity:1;" + offset="0" + id="stop3881-6-7-3" /> + <stop + style="stop-color:#000000;stop-opacity:0;" + offset="1" + id="stop3883-1-6-7" /> + </linearGradient> + <radialGradient + inkscape:collect="always" + xlink:href="#linearGradient3879-2" + id="radialGradient3885-5" + cx="144.28572" + cy="673.07648" + fx="144.28572" + fy="673.07648" + r="115.71429" + gradientTransform="matrix(1,0,0,0.9074074,0,62.321902)" + gradientUnits="userSpaceOnUse" /> + <linearGradient + inkscape:collect="always" + id="linearGradient3879-2"> + <stop + style="stop-color:#000000;stop-opacity:1;" + offset="0" + id="stop3881-5" /> + <stop + style="stop-color:#000000;stop-opacity:0;" + offset="1" + id="stop3883-4" /> + </linearGradient> + <radialGradient + r="6.65625" + fy="13.078408" + fx="15.414371" + cy="13.078408" + cx="15.414371" + gradientTransform="matrix(1.2833801,0.06025566,-0.05462227,1.0163358,-12.151415,-10.809765)" + gradientUnits="userSpaceOnUse" + id="radialGradient3236" + xlink:href="#linearGradient4467" + inkscape:collect="always" /> + <radialGradient + r="8.3085051" + fy="21.817987" + fx="18.240929" + cy="21.817987" + cx="18.240929" + gradientUnits="userSpaceOnUse" + id="radialGradient3234" + xlink:href="#linearGradient4454" + inkscape:collect="always" /> + <radialGradient + r="16.528622" + fy="37.967922" + fx="24.130018" + cy="37.967922" + cx="24.130018" + gradientTransform="matrix(1,0,0,0.237968,0,28.93278)" + gradientUnits="userSpaceOnUse" + id="radialGradient3232" + xlink:href="#linearGradient4487" + inkscape:collect="always" /> + <linearGradient + y2="25.743469" + x2="17.500893" + y1="13.602121" + x1="18.292673" + gradientUnits="userSpaceOnUse" + id="linearGradient3230" + xlink:href="#linearGradient2366" + inkscape:collect="always" /> + <linearGradient + y2="31.0625" + x2="33.21875" + y1="34" + x1="30.65625" + gradientTransform="matrix(0.6140542,0,0,0.6534803,-3.2180769,-5.0231708)" + gradientUnits="userSpaceOnUse" + id="linearGradient3228" + xlink:href="#linearGradient4440" + inkscape:collect="always" /> + <linearGradient + y2="30.557772" + x2="31.335964" + y1="26.580296" + x1="27.366341" + gradientTransform="matrix(0.460106,0,0,0.506067,-0.00937036,-1.247578)" + gradientUnits="userSpaceOnUse" + id="linearGradient3226" + xlink:href="#linearGradient2846" + inkscape:collect="always" /> + <radialGradient + r="16.528622" + fy="37.967922" + fx="24.130018" + cy="37.967922" + cx="24.130018" + gradientTransform="matrix(1,0,0,0.237968,0,28.93278)" + gradientUnits="userSpaceOnUse" + id="radialGradient3224" + xlink:href="#linearGradient4477" + inkscape:collect="always" /> + <linearGradient + gradientTransform="matrix(0.460106,0,0,0.506067,-0.00937036,-1.247578)" + y2="30.557772" + x2="31.335964" + y1="26.580296" + x1="27.366341" + gradientUnits="userSpaceOnUse" + id="linearGradient2432" + xlink:href="#linearGradient2846" + inkscape:collect="always" /> + <linearGradient + y2="31.0625" + x2="33.21875" + y1="34" + x1="30.65625" + gradientTransform="matrix(0.6140542,0,0,0.6534803,-3.2180769,-5.0231708)" + gradientUnits="userSpaceOnUse" + id="linearGradient2428" + xlink:href="#linearGradient4440" + inkscape:collect="always" /> + <radialGradient + r="6.65625" + fy="13.078408" + fx="15.414371" + cy="13.078408" + cx="15.414371" + gradientTransform="matrix(1.2833801,0.06025566,-0.05462227,1.0163358,-12.151415,-10.809765)" + gradientUnits="userSpaceOnUse" + id="radialGradient2421" + xlink:href="#linearGradient4467" + inkscape:collect="always" /> + <radialGradient + inkscape:collect="always" + xlink:href="#linearGradient4477" + id="radialGradient2842" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(1,0,0,0.237968,0,28.93278)" + cx="24.130018" + cy="37.967922" + fx="24.130018" + fy="37.967922" + r="16.528622" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient2366" + id="linearGradient2372" + x1="18.292673" + y1="13.602121" + x2="17.500893" + y2="25.743469" + gradientUnits="userSpaceOnUse" /> + <radialGradient + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(1,0,0,0.237968,0,28.93278)" + r="16.528622" + fy="37.967922" + fx="24.130018" + cy="37.967922" + cx="24.130018" + id="radialGradient4493" + xlink:href="#linearGradient4487" + inkscape:collect="always" /> + <radialGradient + gradientUnits="userSpaceOnUse" + r="8.3085051" + fy="21.817987" + fx="18.240929" + cy="21.817987" + cx="18.240929" + id="radialGradient4460" + xlink:href="#linearGradient4454" + inkscape:collect="always" /> + <linearGradient + id="linearGradient4440"> + <stop + id="stop4442" + offset="0" + style="stop-color:#7d7d7d;stop-opacity:1;" /> + <stop + style="stop-color:#b1b1b1;stop-opacity:1.0000000;" + offset="0.50000000" + id="stop4448" /> + <stop + id="stop4444" + offset="1.0000000" + style="stop-color:#686868;stop-opacity:1.0000000;" /> + </linearGradient> + <linearGradient + id="linearGradient4454"> + <stop + id="stop4456" + offset="0" + style="stop-color:#3536e5;stop-opacity:0.20784314;" /> + <stop + id="stop4458" + offset="1.0000000" + style="stop-color:#729fcf;stop-opacity:0.67619050;" /> + </linearGradient> + <linearGradient + id="linearGradient4467"> + <stop + id="stop4469" + offset="0" + style="stop-color:#ffffff;stop-opacity:1;" /> + <stop + id="stop4471" + offset="1.0000000" + style="stop-color:#ffffff;stop-opacity:0.24761905;" /> + </linearGradient> + <linearGradient + id="linearGradient4477" + inkscape:collect="always"> + <stop + id="stop4479" + offset="0" + style="stop-color:#000000;stop-opacity:1;" /> + <stop + id="stop4481" + offset="1" + style="stop-color:#000000;stop-opacity:0;" /> + </linearGradient> + <linearGradient + id="linearGradient4487" + inkscape:collect="always"> + <stop + id="stop4489" + offset="0" + style="stop-color:#ffffff;stop-opacity:1;" /> + <stop + id="stop4491" + offset="1" + style="stop-color:#ffffff;stop-opacity:0;" /> + </linearGradient> + <linearGradient + id="linearGradient2366"> + <stop + style="stop-color:#ffffff;stop-opacity:1;" + offset="0" + id="stop2368" /> + <stop + id="stop2374" + offset="0.50000000" + style="stop-color:#ffffff;stop-opacity:0.21904762;" /> + <stop + style="stop-color:#ffffff;stop-opacity:1.0000000;" + offset="1.0000000" + id="stop2370" /> + </linearGradient> + <linearGradient + id="linearGradient2846"> + <stop + style="stop-color:#3f3535;stop-opacity:1;" + offset="0" + id="stop2848" /> + <stop + style="stop-color:#0f0808;stop-opacity:1;" + offset="1" + id="stop2850" /> + </linearGradient> + <inkscape:perspective + id="perspective47" + inkscape:persp3d-origin="11 : 7.3333333 : 1" + inkscape:vp_z="22 : 11 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 11 : 1" + sodipodi:type="inkscape:persp3d" /> + <radialGradient + r="5.257" + fy="64.567902" + fx="20.892099" + cy="64.567902" + cx="20.892099" + gradientTransform="matrix(0.229703,0,0,0.229703,4.613529,3.979808)" + gradientUnits="userSpaceOnUse" + id="radialGradient3205" + xlink:href="#aigrd3" + inkscape:collect="always" /> + <radialGradient + r="5.256" + fy="114.5684" + fx="20.892099" + cy="114.5684" + cx="20.892099" + gradientTransform="matrix(0.229703,0,0,0.229703,4.613529,3.979808)" + gradientUnits="userSpaceOnUse" + id="radialGradient3203" + xlink:href="#aigrd2" + inkscape:collect="always" /> + <radialGradient + r="38.158695" + fy="7.2678967" + fx="8.1435566" + cy="7.2678967" + cx="8.1435566" + gradientTransform="matrix(0.968273,0,0,1.032767,3.353553,0.646447)" + gradientUnits="userSpaceOnUse" + id="radialGradient3201" + xlink:href="#linearGradient15662" + inkscape:collect="always" /> + <radialGradient + r="37.751713" + fy="3.7561285" + fx="8.824419" + cy="3.7561285" + cx="8.824419" + gradientTransform="matrix(0.968273,0,0,1.032767,3.353553,0.646447)" + gradientUnits="userSpaceOnUse" + id="radialGradient3199" + xlink:href="#linearGradient269" + inkscape:collect="always" /> + <radialGradient + r="86.70845" + fy="35.736916" + fx="33.966679" + cy="35.736916" + cx="33.966679" + gradientTransform="scale(0.960493,1.041132)" + gradientUnits="userSpaceOnUse" + id="radialGradient3197" + xlink:href="#linearGradient259" + inkscape:collect="always" /> + <radialGradient + r="15.821514" + fy="42.07798" + fx="24.306795" + cy="42.07798" + cx="24.306795" + gradientTransform="matrix(1,0,0,0.284916,0,30.08928)" + gradientUnits="userSpaceOnUse" + id="radialGradient3195" + xlink:href="#linearGradient4542" + inkscape:collect="always" /> + <linearGradient + id="linearGradient259"> + <stop + style="stop-color:#fafafa;stop-opacity:1.0000000;" + offset="0.0000000" + id="stop260" /> + <stop + style="stop-color:#bbbbbb;stop-opacity:1.0000000;" + offset="1.0000000" + id="stop261" /> + </linearGradient> + <linearGradient + id="linearGradient269"> + <stop + style="stop-color:#a3a3a3;stop-opacity:1.0000000;" + offset="0.0000000" + id="stop270" /> + <stop + style="stop-color:#4c4c4c;stop-opacity:1.0000000;" + offset="1.0000000" + id="stop271" /> + </linearGradient> + <radialGradient + gradientUnits="userSpaceOnUse" + fy="114.5684" + fx="20.892099" + r="5.256" + cy="114.5684" + cx="20.892099" + id="aigrd2"> + <stop + id="stop15566" + style="stop-color:#F0F0F0" + offset="0" /> + <stop + id="stop15568" + style="stop-color:#9a9a9a;stop-opacity:1.0000000;" + offset="1.0000000" /> + </radialGradient> + <radialGradient + gradientUnits="userSpaceOnUse" + fy="64.567902" + fx="20.892099" + r="5.257" + cy="64.567902" + cx="20.892099" + id="aigrd3"> + <stop + id="stop15573" + style="stop-color:#F0F0F0" + offset="0" /> + <stop + id="stop15575" + style="stop-color:#9a9a9a;stop-opacity:1.0000000;" + offset="1.0000000" /> + </radialGradient> + <linearGradient + id="linearGradient15662"> + <stop + style="stop-color:#ffffff;stop-opacity:1.0000000;" + offset="0.0000000" + id="stop15664" /> + <stop + style="stop-color:#f8f8f8;stop-opacity:1.0000000;" + offset="1.0000000" + id="stop15666" /> + </linearGradient> + <linearGradient + id="linearGradient4542" + inkscape:collect="always"> + <stop + id="stop4544" + offset="0" + style="stop-color:#000000;stop-opacity:1;" /> + <stop + id="stop4546" + offset="1" + style="stop-color:#000000;stop-opacity:0;" /> + </linearGradient> + <radialGradient + r="15.821514" + fy="42.07798" + fx="24.306795" + cy="42.07798" + cx="24.306795" + gradientTransform="matrix(1,0,0,0.284916,0,30.08928)" + gradientUnits="userSpaceOnUse" + id="radialGradient3195-8" + xlink:href="#linearGradient4542-6" + inkscape:collect="always" /> + <linearGradient + id="linearGradient4542-6" + inkscape:collect="always"> + <stop + id="stop4544-8" + offset="0" + style="stop-color:#000000;stop-opacity:1;" /> + <stop + id="stop4546-8" + offset="1" + style="stop-color:#000000;stop-opacity:0;" /> + </linearGradient> + <radialGradient + r="86.70845" + fy="35.736916" + fx="33.966679" + cy="35.736916" + cx="33.966679" + gradientTransform="scale(0.960493,1.041132)" + gradientUnits="userSpaceOnUse" + id="radialGradient3197-4" + xlink:href="#linearGradient259-3" + inkscape:collect="always" /> + <linearGradient + id="linearGradient259-3"> + <stop + style="stop-color:#fafafa;stop-opacity:1.0000000;" + offset="0.0000000" + id="stop260-1" /> + <stop + style="stop-color:#bbbbbb;stop-opacity:1.0000000;" + offset="1.0000000" + id="stop261-4" /> + </linearGradient> + <radialGradient + r="37.751713" + fy="3.7561285" + fx="8.824419" + cy="3.7561285" + cx="8.824419" + gradientTransform="matrix(0.968273,0,0,1.032767,3.353553,0.646447)" + gradientUnits="userSpaceOnUse" + id="radialGradient3199-9" + xlink:href="#linearGradient269-2" + inkscape:collect="always" /> + <linearGradient + id="linearGradient269-2"> + <stop + style="stop-color:#a3a3a3;stop-opacity:1.0000000;" + offset="0.0000000" + id="stop270-0" /> + <stop + style="stop-color:#4c4c4c;stop-opacity:1.0000000;" + offset="1.0000000" + id="stop271-6" /> + </linearGradient> + <radialGradient + r="38.158695" + fy="7.2678967" + fx="8.1435566" + cy="7.2678967" + cx="8.1435566" + gradientTransform="matrix(0.968273,0,0,1.032767,3.353553,0.646447)" + gradientUnits="userSpaceOnUse" + id="radialGradient3201-8" + xlink:href="#linearGradient15662-9" + inkscape:collect="always" /> + <linearGradient + id="linearGradient15662-9"> + <stop + style="stop-color:#ffffff;stop-opacity:1.0000000;" + offset="0.0000000" + id="stop15664-2" /> + <stop + style="stop-color:#f8f8f8;stop-opacity:1.0000000;" + offset="1.0000000" + id="stop15666-6" /> + </linearGradient> + <radialGradient + r="5.256" + fy="114.5684" + fx="20.892099" + cy="114.5684" + cx="20.892099" + gradientTransform="matrix(0.229703,0,0,0.229703,4.613529,3.979808)" + gradientUnits="userSpaceOnUse" + id="radialGradient3203-6" + xlink:href="#aigrd2-4" + inkscape:collect="always" /> + <radialGradient + gradientUnits="userSpaceOnUse" + fy="114.5684" + fx="20.892099" + r="5.256" + cy="114.5684" + cx="20.892099" + id="aigrd2-4"> + <stop + id="stop15566-9" + style="stop-color:#F0F0F0" + offset="0" /> + <stop + id="stop15568-5" + style="stop-color:#9a9a9a;stop-opacity:1.0000000;" + offset="1.0000000" /> + </radialGradient> + <radialGradient + r="5.257" + fy="64.567902" + fx="20.892099" + cy="64.567902" + cx="20.892099" + gradientTransform="matrix(0.229703,0,0,0.229703,4.613529,3.979808)" + gradientUnits="userSpaceOnUse" + id="radialGradient3205-0" + xlink:href="#aigrd3-4" + inkscape:collect="always" /> + <radialGradient + gradientUnits="userSpaceOnUse" + fy="64.567902" + fx="20.892099" + r="5.257" + cy="64.567902" + cx="20.892099" + id="aigrd3-4"> + <stop + id="stop15573-8" + style="stop-color:#F0F0F0" + offset="0" /> + <stop + id="stop15575-7" + style="stop-color:#9a9a9a;stop-opacity:1.0000000;" + offset="1.0000000" /> + </radialGradient> + <radialGradient + r="15.821514" + fy="42.07798" + fx="24.306795" + cy="42.07798" + cx="24.306795" + gradientTransform="matrix(1,0,0,0.284916,0,30.08928)" + gradientUnits="userSpaceOnUse" + id="radialGradient3195-8-2" + xlink:href="#linearGradient4542-6-9" + inkscape:collect="always" /> + <linearGradient + id="linearGradient4542-6-9" + inkscape:collect="always"> + <stop + id="stop4544-8-3" + offset="0" + style="stop-color:#000000;stop-opacity:1;" /> + <stop + id="stop4546-8-9" + offset="1" + style="stop-color:#000000;stop-opacity:0;" /> + </linearGradient> + <radialGradient + r="86.70845" + fy="35.736916" + fx="33.966679" + cy="35.736916" + cx="33.966679" + gradientTransform="scale(0.960493,1.041132)" + gradientUnits="userSpaceOnUse" + id="radialGradient3197-4-0" + xlink:href="#linearGradient259-3-8" + inkscape:collect="always" /> + <linearGradient + id="linearGradient259-3-8"> + <stop + style="stop-color:#fafafa;stop-opacity:1.0000000;" + offset="0.0000000" + id="stop260-1-8" /> + <stop + style="stop-color:#bbbbbb;stop-opacity:1.0000000;" + offset="1.0000000" + id="stop261-4-5" /> + </linearGradient> + <radialGradient + r="37.751713" + fy="3.7561285" + fx="8.824419" + cy="3.7561285" + cx="8.824419" + gradientTransform="matrix(0.968273,0,0,1.032767,3.353553,0.646447)" + gradientUnits="userSpaceOnUse" + id="radialGradient3199-9-0" + xlink:href="#linearGradient269-2-9" + inkscape:collect="always" /> + <linearGradient + id="linearGradient269-2-9"> + <stop + style="stop-color:#a3a3a3;stop-opacity:1.0000000;" + offset="0.0000000" + id="stop270-0-6" /> + <stop + style="stop-color:#4c4c4c;stop-opacity:1.0000000;" + offset="1.0000000" + id="stop271-6-3" /> + </linearGradient> + <radialGradient + r="38.158695" + fy="7.2678967" + fx="8.1435566" + cy="7.2678967" + cx="8.1435566" + gradientTransform="matrix(0.968273,0,0,1.032767,3.353553,0.646447)" + gradientUnits="userSpaceOnUse" + id="radialGradient3201-8-8" + xlink:href="#linearGradient15662-9-5" + inkscape:collect="always" /> + <linearGradient + id="linearGradient15662-9-5"> + <stop + style="stop-color:#ffffff;stop-opacity:1.0000000;" + offset="0.0000000" + id="stop15664-2-6" /> + <stop + style="stop-color:#f8f8f8;stop-opacity:1.0000000;" + offset="1.0000000" + id="stop15666-6-1" /> + </linearGradient> + <radialGradient + r="5.256" + fy="114.5684" + fx="20.892099" + cy="114.5684" + cx="20.892099" + gradientTransform="matrix(0.229703,0,0,0.229703,4.613529,3.979808)" + gradientUnits="userSpaceOnUse" + id="radialGradient3203-6-1" + xlink:href="#aigrd2-4-5" + inkscape:collect="always" /> + <radialGradient + gradientUnits="userSpaceOnUse" + fy="114.5684" + fx="20.892099" + r="5.256" + cy="114.5684" + cx="20.892099" + id="aigrd2-4-5"> + <stop + id="stop15566-9-9" + style="stop-color:#F0F0F0" + offset="0" /> + <stop + id="stop15568-5-8" + style="stop-color:#9a9a9a;stop-opacity:1.0000000;" + offset="1.0000000" /> + </radialGradient> + <radialGradient + r="5.257" + fy="64.567902" + fx="20.892099" + cy="64.567902" + cx="20.892099" + gradientTransform="matrix(0.229703,0,0,0.229703,4.613529,3.979808)" + gradientUnits="userSpaceOnUse" + id="radialGradient3205-0-4" + xlink:href="#aigrd3-4-8" + inkscape:collect="always" /> + <radialGradient + gradientUnits="userSpaceOnUse" + fy="64.567902" + fx="20.892099" + r="5.257" + cy="64.567902" + cx="20.892099" + id="aigrd3-4-8"> + <stop + id="stop15573-8-1" + style="stop-color:#F0F0F0" + offset="0" /> + <stop + id="stop15575-7-0" + style="stop-color:#9a9a9a;stop-opacity:1.0000000;" + offset="1.0000000" /> + </radialGradient> + <radialGradient + r="15.821514" + fy="42.07798" + fx="24.306795" + cy="42.07798" + cx="24.306795" + gradientTransform="matrix(1,0,0,0.284916,0,30.08928)" + gradientUnits="userSpaceOnUse" + id="radialGradient3195-8-2-3" + xlink:href="#linearGradient4542-6-9-3" + inkscape:collect="always" /> + <linearGradient + id="linearGradient4542-6-9-3" + inkscape:collect="always"> + <stop + id="stop4544-8-3-8" + offset="0" + style="stop-color:#000000;stop-opacity:1;" /> + <stop + id="stop4546-8-9-6" + offset="1" + style="stop-color:#000000;stop-opacity:0;" /> + </linearGradient> + <radialGradient + r="86.70845" + fy="35.736916" + fx="33.966679" + cy="35.736916" + cx="33.966679" + gradientTransform="scale(0.960493,1.041132)" + gradientUnits="userSpaceOnUse" + id="radialGradient3197-4-0-0" + xlink:href="#linearGradient259-3-8-4" + inkscape:collect="always" /> + <linearGradient + id="linearGradient259-3-8-4"> + <stop + style="stop-color:#fafafa;stop-opacity:1.0000000;" + offset="0.0000000" + id="stop260-1-8-8" /> + <stop + style="stop-color:#bbbbbb;stop-opacity:1.0000000;" + offset="1.0000000" + id="stop261-4-5-8" /> + </linearGradient> + <radialGradient + r="37.751713" + fy="3.7561285" + fx="8.824419" + cy="3.7561285" + cx="8.824419" + gradientTransform="matrix(0.968273,0,0,1.032767,3.353553,0.646447)" + gradientUnits="userSpaceOnUse" + id="radialGradient3199-9-0-8" + xlink:href="#linearGradient269-2-9-9" + inkscape:collect="always" /> + <linearGradient + id="linearGradient269-2-9-9"> + <stop + style="stop-color:#a3a3a3;stop-opacity:1.0000000;" + offset="0.0000000" + id="stop270-0-6-7" /> + <stop + style="stop-color:#4c4c4c;stop-opacity:1.0000000;" + offset="1.0000000" + id="stop271-6-3-7" /> + </linearGradient> + <radialGradient + r="38.158695" + fy="7.2678967" + fx="8.1435566" + cy="7.2678967" + cx="8.1435566" + gradientTransform="matrix(0.968273,0,0,1.032767,3.353553,0.646447)" + gradientUnits="userSpaceOnUse" + id="radialGradient3201-8-8-6" + xlink:href="#linearGradient15662-9-5-4" + inkscape:collect="always" /> + <linearGradient + id="linearGradient15662-9-5-4"> + <stop + style="stop-color:#ffffff;stop-opacity:1.0000000;" + offset="0.0000000" + id="stop15664-2-6-3" /> + <stop + style="stop-color:#f8f8f8;stop-opacity:1.0000000;" + offset="1.0000000" + id="stop15666-6-1-0" /> + </linearGradient> + <radialGradient + r="5.256" + fy="114.5684" + fx="20.892099" + cy="114.5684" + cx="20.892099" + gradientTransform="matrix(0.229703,0,0,0.229703,4.613529,3.979808)" + gradientUnits="userSpaceOnUse" + id="radialGradient3203-6-1-3" + xlink:href="#aigrd2-4-5-0" + inkscape:collect="always" /> + <radialGradient + gradientUnits="userSpaceOnUse" + fy="114.5684" + fx="20.892099" + r="5.256" + cy="114.5684" + cx="20.892099" + id="aigrd2-4-5-0"> + <stop + id="stop15566-9-9-9" + style="stop-color:#F0F0F0" + offset="0" /> + <stop + id="stop15568-5-8-2" + style="stop-color:#9a9a9a;stop-opacity:1.0000000;" + offset="1.0000000" /> + </radialGradient> + <radialGradient + r="5.257" + fy="64.567902" + fx="20.892099" + cy="64.567902" + cx="20.892099" + gradientTransform="matrix(0.229703,0,0,0.229703,4.613529,3.979808)" + gradientUnits="userSpaceOnUse" + id="radialGradient3205-0-4-5" + xlink:href="#aigrd3-4-8-4" + inkscape:collect="always" /> + <radialGradient + gradientUnits="userSpaceOnUse" + fy="64.567902" + fx="20.892099" + r="5.257" + cy="64.567902" + cx="20.892099" + id="aigrd3-4-8-4"> + <stop + id="stop15573-8-1-0" + style="stop-color:#F0F0F0" + offset="0" /> + <stop + id="stop15575-7-0-5" + style="stop-color:#9a9a9a;stop-opacity:1.0000000;" + offset="1.0000000" /> + </radialGradient> + <linearGradient + id="linearGradient259-3-8-40"> + <stop + style="stop-color:#fafafa;stop-opacity:1.0000000;" + offset="0.0000000" + id="stop260-1-8-6" /> + <stop + style="stop-color:#bbbbbb;stop-opacity:1.0000000;" + offset="1.0000000" + id="stop261-4-5-2" /> + </linearGradient> + <linearGradient + id="linearGradient269-2-9-90"> + <stop + style="stop-color:#a3a3a3;stop-opacity:1.0000000;" + offset="0.0000000" + id="stop270-0-6-8" /> + <stop + style="stop-color:#4c4c4c;stop-opacity:1.0000000;" + offset="1.0000000" + id="stop271-6-3-1" /> + </linearGradient> + <linearGradient + id="linearGradient15662-9-5-1"> + <stop + style="stop-color:#ffffff;stop-opacity:1.0000000;" + offset="0.0000000" + id="stop15664-2-6-1" /> + <stop + style="stop-color:#f8f8f8;stop-opacity:1.0000000;" + offset="1.0000000" + id="stop15666-6-1-03" /> + </linearGradient> + <radialGradient + gradientUnits="userSpaceOnUse" + fy="114.5684" + fx="20.892099" + r="5.256" + cy="114.5684" + cx="20.892099" + id="aigrd2-4-5-03"> + <stop + id="stop15566-9-9-91" + style="stop-color:#F0F0F0" + offset="0" /> + <stop + id="stop15568-5-8-9" + style="stop-color:#9a9a9a;stop-opacity:1.0000000;" + offset="1.0000000" /> + </radialGradient> + <radialGradient + gradientUnits="userSpaceOnUse" + fy="64.567902" + fx="20.892099" + r="5.257" + cy="64.567902" + cx="20.892099" + id="aigrd3-4-8-9"> + <stop + id="stop15573-8-1-3" + style="stop-color:#F0F0F0" + offset="0" /> + <stop + id="stop15575-7-0-3" + style="stop-color:#9a9a9a;stop-opacity:1.0000000;" + offset="1.0000000" /> + </radialGradient> + <radialGradient + inkscape:collect="always" + xlink:href="#linearGradient5330" + id="radialGradient5336" + cx="144.28572" + cy="673.07648" + fx="144.28572" + fy="673.07648" + r="115.71429" + gradientTransform="matrix(1,0,0,0.9074074,0,62.321902)" + gradientUnits="userSpaceOnUse" /> + <radialGradient + inkscape:collect="always" + xlink:href="#linearGradient3879-0-4" + id="radialGradient5519" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(1,0,0,0.9074074,0,62.321902)" + cx="144.28572" + cy="673.07648" + fx="144.28572" + fy="673.07648" + r="115.71429" /> + <linearGradient + y2="458.22222" + x2="-31.20402" + y1="511.62514" + x1="64.41948" + id="linearGradient854" + xlink:href="#linearGradient912" + gradientTransform="matrix(1.1228801,7.338931,4.6856018,-0.54366125,170.51026,417.75572)" + gradientUnits="userSpaceOnUse" /> + <radialGradient + id="radialGradient915" + xlink:href="#linearGradient912" /> + <linearGradient + id="linearGradient912"> + <stop + id="stop913" + offset="0.0000000" + style="stop-color:#f3f3f3;stop-opacity:1.0000000;" /> + <stop + id="stop855" + offset="0.37650406" + style="stop-color:#ffffff;stop-opacity:1.0000000;" /> + <stop + id="stop914" + offset="1.0000000" + style="stop-color:#e6ffff;stop-opacity:1.0000000;" /> + </linearGradient> + <radialGradient + inkscape:collect="always" + xlink:href="#linearGradient5330" + id="radialGradient6332" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(1,0,0,0.9074074,0,62.321902)" + cx="144.28572" + cy="673.07648" + fx="144.28572" + fy="673.07648" + r="115.71429" /> + <linearGradient + y2="458.22223" + x2="-31.20402" + y1="511.62515" + x1="64.419479" + id="linearGradient854-5" + xlink:href="#linearGradient912-6" + gradientTransform="matrix(1.1228801,7.338931,4.6856018,-0.54366125,178.51026,417.75572)" + gradientUnits="userSpaceOnUse" /> + <linearGradient + id="linearGradient912-6"> + <stop + id="stop913-2" + offset="0.0000000" + style="stop-color:#f3f3f3;stop-opacity:1.0000000;" /> + <stop + id="stop855-5" + offset="0.37650406" + style="stop-color:#ffffff;stop-opacity:1.0000000;" /> + <stop + id="stop914-9" + offset="1.0000000" + style="stop-color:#e6ffff;stop-opacity:1.0000000;" /> + </linearGradient> + <filter + inkscape:collect="always" + id="filter6431" + x="-0.12220462" + width="1.2444092" + y="-0.079324303" + height="1.1586486"> + <feGaussianBlur + inkscape:collect="always" + stdDeviation="17.002565" + id="feGaussianBlur6433" /> + </filter> + <linearGradient + y2="3.8451097" + x2="35.520542" + y1="3.9384086" + x1="34.300991" + gradientUnits="userSpaceOnUse" + id="linearGradient2045" + xlink:href="#linearGradient2711" + inkscape:collect="always" /> + <linearGradient + y2="3.8451097" + x2="35.520542" + y1="3.9384086" + x1="34.300991" + gradientUnits="userSpaceOnUse" + id="linearGradient2043" + xlink:href="#linearGradient2711" + inkscape:collect="always" /> + <linearGradient + y2="3.8451097" + x2="35.520542" + y1="3.9384086" + x1="34.300991" + gradientUnits="userSpaceOnUse" + id="linearGradient2041" + xlink:href="#linearGradient2711" + inkscape:collect="always" /> + <linearGradient + y2="3.8451097" + x2="35.520542" + y1="3.9384086" + x1="34.300991" + gradientUnits="userSpaceOnUse" + id="linearGradient2039" + xlink:href="#linearGradient2711" + inkscape:collect="always" /> + <linearGradient + y2="3.8451097" + x2="35.520542" + y1="3.9384086" + x1="34.300991" + gradientUnits="userSpaceOnUse" + id="linearGradient2037" + xlink:href="#linearGradient2711" + inkscape:collect="always" /> + <linearGradient + y2="74.098007" + x2="8.6485014" + y1="101.2846" + x1="13.62871" + gradientTransform="matrix(2.143634,0,0,0.466498,1,-0.508826)" + gradientUnits="userSpaceOnUse" + id="linearGradient2035" + xlink:href="#linearGradient2635" + inkscape:collect="always" /> + <linearGradient + y2="100.20015" + x2="8.1134233" + y1="88.509071" + x1="8.1134243" + gradientTransform="scale(2.309851,0.432928)" + gradientUnits="userSpaceOnUse" + id="linearGradient2033" + xlink:href="#linearGradient2752" + inkscape:collect="always" /> + <linearGradient + y2="100.20015" + x2="8.1134233" + y1="88.509071" + x1="8.1134243" + gradientTransform="scale(2.309851,0.432928)" + gradientUnits="userSpaceOnUse" + id="linearGradient2031" + xlink:href="#linearGradient2752" + inkscape:collect="always" /> + <linearGradient + y2="100.20015" + x2="8.1134233" + y1="88.509071" + x1="8.1134243" + gradientTransform="scale(2.309851,0.432928)" + gradientUnits="userSpaceOnUse" + id="linearGradient2029" + xlink:href="#linearGradient2752" + inkscape:collect="always" /> + <linearGradient + y2="31.246054" + x2="32.536823" + y1="5.3817744" + x1="10.390738" + gradientTransform="scale(1.104397,0.905471)" + gradientUnits="userSpaceOnUse" + id="linearGradient2027" + xlink:href="#linearGradient2253" + inkscape:collect="always" /> + <linearGradient + y2="52.536461" + x2="18.176752" + y1="48.643234" + x1="18.316999" + gradientTransform="scale(1.129863,0.885063)" + gradientUnits="userSpaceOnUse" + id="linearGradient2025" + xlink:href="#linearGradient2245" + inkscape:collect="always" /> + <radialGradient + r="8.7662792" + fy="67.501709" + fx="12.57571" + cy="67.501709" + cx="12.57571" + gradientTransform="scale(1.925808,0.519262)" + gradientUnits="userSpaceOnUse" + id="radialGradient2023" + xlink:href="#linearGradient2454" + inkscape:collect="always" /> + <linearGradient + y2="26.729263" + x2="17.199417" + y1="1.6537577" + x1="11.492236" + gradientTransform="matrix(1.238977,0,0,0.895955,0.590553,-1.331524)" + gradientUnits="userSpaceOnUse" + id="linearGradient2021" + xlink:href="#linearGradient2667" + inkscape:collect="always" /> + <linearGradient + y2="55.200756" + x2="34.974548" + y1="13.004725" + x1="17.698339" + gradientTransform="matrix(1.108069,0,0,0.902471,1,1)" + gradientUnits="userSpaceOnUse" + id="linearGradient2019" + xlink:href="#linearGradient2415" + inkscape:collect="always" /> + <linearGradient + y2="162.45061" + x2="3.7069974" + y1="171.29134" + x1="3.7069976" + gradientTransform="matrix(5.705159,0,0,0.17528,1,-0.679373)" + gradientUnits="userSpaceOnUse" + id="linearGradient2017" + xlink:href="#linearGradient2683" + inkscape:collect="always" /> + <linearGradient + y2="8.8666229" + x2="16.315819" + y1="32.622238" + x1="19.150396" + gradientTransform="matrix(1.174139,0,0,0.945431,0.721825,-1.331524)" + gradientUnits="userSpaceOnUse" + id="linearGradient2015" + xlink:href="#linearGradient2675" + inkscape:collect="always" /> + <linearGradient + y2="31.246054" + x2="32.536823" + y1="5.3817744" + x1="10.390738" + gradientTransform="scale(1.104397,0.905471)" + gradientUnits="userSpaceOnUse" + id="linearGradient2013" + xlink:href="#linearGradient2253" + inkscape:collect="always" /> + <linearGradient + y2="33.339787" + x2="34.784473" + y1="7.2293582" + x1="8.6116238" + gradientTransform="matrix(1.129863,0,0,0.885063,-1.625,-1.304372)" + gradientUnits="userSpaceOnUse" + id="linearGradient2011" + xlink:href="#linearGradient2245" + inkscape:collect="always" /> + <linearGradient + y2="64.892525" + x2="12.127711" + y1="53.535141" + x1="12.206709" + gradientTransform="scale(1.816345,0.550556)" + gradientUnits="userSpaceOnUse" + id="linearGradient2009" + xlink:href="#linearGradient2701" + inkscape:collect="always" /> + <radialGradient + r="8.7662792" + fy="67.501709" + fx="12.57571" + cy="67.501709" + cx="12.57571" + gradientTransform="scale(1.925808,0.519262)" + gradientUnits="userSpaceOnUse" + id="radialGradient2007" + xlink:href="#linearGradient2454" + inkscape:collect="always" /> + <linearGradient + y2="44.878883" + x2="-23.8857" + y1="49.953003" + x1="-23.8857" + gradientTransform="scale(1.492875,0.669848)" + gradientUnits="userSpaceOnUse" + id="linearGradient2005" + xlink:href="#linearGradient2985" + inkscape:collect="always" /> + <radialGradient + r="8.7662792" + fy="67.501709" + fx="12.57571" + cy="67.501709" + cx="12.57571" + gradientTransform="scale(1.925808,0.519262)" + gradientUnits="userSpaceOnUse" + id="radialGradient2003" + xlink:href="#linearGradient2454" + inkscape:collect="always" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient2253" + id="linearGradient1413" + gradientUnits="userSpaceOnUse" + gradientTransform="scale(1.104397,0.905471)" + x1="10.390738" + y1="5.3817744" + x2="32.536823" + y2="31.246054" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient2752" + id="linearGradient1411" + gradientUnits="userSpaceOnUse" + gradientTransform="scale(2.309851,0.432928)" + x1="8.1134243" + y1="88.509071" + x2="8.1134233" + y2="100.20015" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient2752" + id="linearGradient1409" + gradientUnits="userSpaceOnUse" + gradientTransform="scale(2.309851,0.432928)" + x1="8.1134243" + y1="88.509071" + x2="8.1134233" + y2="100.20015" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient2985" + id="linearGradient2991" + gradientTransform="scale(1.492875,0.669848)" + x1="-23.8857" + y1="49.953003" + x2="-23.8857" + y2="44.878883" + gradientUnits="userSpaceOnUse" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient2245" + id="linearGradient2981" + gradientUnits="userSpaceOnUse" + gradientTransform="scale(1.129863,0.885063)" + x1="18.316999" + y1="48.643234" + x2="18.176752" + y2="52.536461" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient2253" + id="linearGradient2979" + gradientTransform="scale(1.104397,0.905471)" + x1="10.390738" + y1="5.3817744" + x2="32.536823" + y2="31.246054" + gradientUnits="userSpaceOnUse" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient2752" + id="linearGradient2758" + gradientTransform="scale(2.309851,0.432928)" + x1="8.1134243" + y1="88.509071" + x2="8.1134233" + y2="100.20015" + gradientUnits="userSpaceOnUse" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient2635" + id="linearGradient2741" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(2.143634,0,0,0.466498,1,-0.508826)" + x1="13.62871" + y1="101.2846" + x2="8.6485014" + y2="74.098007" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient2711" + id="linearGradient2733" + gradientUnits="userSpaceOnUse" + x1="34.300991" + y1="3.9384086" + x2="35.520542" + y2="3.8451097" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient2711" + id="linearGradient2729" + gradientUnits="userSpaceOnUse" + x1="34.300991" + y1="3.9384086" + x2="35.520542" + y2="3.8451097" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient2711" + id="linearGradient2725" + gradientUnits="userSpaceOnUse" + x1="34.300991" + y1="3.9384086" + x2="35.520542" + y2="3.8451097" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient2711" + id="linearGradient2721" + gradientUnits="userSpaceOnUse" + x1="34.300991" + y1="3.9384086" + x2="35.520542" + y2="3.8451097" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient2711" + id="linearGradient2717" + x1="34.300991" + y1="3.9384086" + x2="35.520542" + y2="3.8451097" + gradientUnits="userSpaceOnUse" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient2701" + id="linearGradient2707" + gradientTransform="scale(1.816345,0.550556)" + x1="12.206709" + y1="53.535141" + x2="12.127711" + y2="64.892525" + gradientUnits="userSpaceOnUse" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient2683" + id="linearGradient2689" + gradientTransform="matrix(5.705159,0,0,0.17528,1,-0.679373)" + x1="3.7069976" + y1="171.29134" + x2="3.7069974" + y2="162.45061" + gradientUnits="userSpaceOnUse" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient2675" + id="linearGradient2681" + gradientTransform="matrix(1.174139,0,0,0.945431,0.721825,-1.331524)" + x1="19.150396" + y1="32.622238" + x2="16.315819" + y2="8.8666229" + gradientUnits="userSpaceOnUse" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient2667" + id="linearGradient2673" + gradientTransform="matrix(1.238977,0,0,0.895955,0.590553,-1.331524)" + x1="11.492236" + y1="1.6537577" + x2="17.199417" + y2="26.729263" + gradientUnits="userSpaceOnUse" /> + <radialGradient + inkscape:collect="always" + xlink:href="#linearGradient2454" + id="radialGradient2659" + gradientUnits="userSpaceOnUse" + gradientTransform="scale(1.925808,0.519262)" + cx="12.57571" + cy="67.501709" + fx="12.57571" + fy="67.501709" + r="8.7662792" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient2635" + id="linearGradient2655" + gradientUnits="userSpaceOnUse" + gradientTransform="scale(2.143634,0.466498)" + x1="13.62871" + y1="101.2846" + x2="8.6485014" + y2="74.098007" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient2623" + id="linearGradient2653" + gradientUnits="userSpaceOnUse" + gradientTransform="scale(1.983556,0.504145)" + x1="10.728384" + y1="84.029198" + x2="10.728384" + y2="92.57093" /> + <radialGradient + r="8.7662792" + fy="67.501709" + fx="12.57571" + cy="67.501709" + cx="12.57571" + gradientTransform="scale(1.925808,0.519262)" + gradientUnits="userSpaceOnUse" + id="radialGradient2464" + xlink:href="#linearGradient2454" + inkscape:collect="always" /> + <radialGradient + gradientUnits="userSpaceOnUse" + r="8.7662792" + fy="67.501709" + fx="12.57571" + cy="67.501709" + cx="12.57571" + gradientTransform="scale(1.925808,0.519262)" + id="radialGradient2460" + xlink:href="#linearGradient2454" + inkscape:collect="always" /> + <linearGradient + y2="-1.3221773" + x2="19.994572" + y1="30.078255" + x1="21.356108" + gradientTransform="matrix(1.02787,0,0,0.822296,1.523986,1.001198)" + gradientUnits="userSpaceOnUse" + id="linearGradient2445" + xlink:href="#linearGradient2379" + inkscape:collect="always" /> + <linearGradient + gradientUnits="userSpaceOnUse" + y2="55.200756" + x2="34.974548" + y1="13.004725" + x1="17.698339" + gradientTransform="matrix(1.108069,0,0,0.902471,1,1)" + id="linearGradient2421" + xlink:href="#linearGradient2415" + inkscape:collect="always" /> + <linearGradient + gradientUnits="userSpaceOnUse" + y2="39.03191" + x2="27.289009" + y1="10.842293" + x1="16.119127" + gradientTransform="matrix(1.289166,0,0,0.922731,-0.789284,-0.50338)" + id="linearGradient2334" + xlink:href="#linearGradient2328" + inkscape:collect="always" /> + <linearGradient + gradientUnits="userSpaceOnUse" + y2="53.734985" + x2="24.418941" + y1="9.323514" + x1="16.851954" + gradientTransform="matrix(1.208393,0,0,0.98441,-0.789284,-0.50338)" + id="linearGradient2313" + xlink:href="#linearGradient2307" + inkscape:collect="always" /> + <linearGradient + gradientUnits="userSpaceOnUse" + y2="33.339787" + x2="34.784473" + y1="7.2293582" + x1="8.6116238" + gradientTransform="matrix(1.129863,0,0,0.885063,-1.625,-1.304372)" + id="linearGradient2251" + xlink:href="#linearGradient2245" + inkscape:collect="always" /> + <linearGradient + id="linearGradient2245"> + <stop + id="stop2247" + offset="0.0000000" + style="stop-color:#dde1d9;stop-opacity:1.0000000;" /> + <stop + id="stop2249" + offset="1.0000000" + style="stop-color:#cacdc6;stop-opacity:1.0000000;" /> + </linearGradient> + <linearGradient + id="linearGradient2253"> + <stop + id="stop2255" + offset="0.0000000" + style="stop-color:#8f8f8f;stop-opacity:1.0000000;" /> + <stop + id="stop2257" + offset="1.0000000" + style="stop-color:#494949;stop-opacity:1.0000000;" /> + </linearGradient> + <linearGradient + id="linearGradient2307" + inkscape:collect="always"> + <stop + id="stop2309" + offset="0" + style="stop-color:#5a7aa4;stop-opacity:1;" /> + <stop + id="stop2311" + offset="1" + style="stop-color:#5a7aa4;stop-opacity:0;" /> + </linearGradient> + <linearGradient + id="linearGradient2328" + inkscape:collect="always"> + <stop + id="stop2330" + offset="0" + style="stop-color:#ffffff;stop-opacity:1;" /> + <stop + id="stop2332" + offset="1" + style="stop-color:#ffffff;stop-opacity:0;" /> + </linearGradient> + <linearGradient + id="linearGradient2379"> + <stop + id="stop2381" + offset="0.0000000" + style="stop-color:#1a4876;stop-opacity:1.0000000;" /> + <stop + id="stop2383" + offset="1.0000000" + style="stop-color:#3f54a3;stop-opacity:0.0000000;" /> + </linearGradient> + <linearGradient + id="linearGradient2415" + inkscape:collect="always"> + <stop + id="stop2417" + offset="0" + style="stop-color:#ffffff;stop-opacity:1;" /> + <stop + id="stop2419" + offset="1" + style="stop-color:#ffffff;stop-opacity:0;" /> + </linearGradient> + <linearGradient + id="linearGradient2454" + inkscape:collect="always"> + <stop + id="stop2456" + offset="0" + style="stop-color:#000000;stop-opacity:1;" /> + <stop + id="stop2458" + offset="1" + style="stop-color:#000000;stop-opacity:0;" /> + </linearGradient> + <linearGradient + id="linearGradient2623"> + <stop + style="stop-color:#dfdfde;stop-opacity:1.0000000;" + offset="0.0000000" + id="stop2625" /> + <stop + style="stop-color:#9d9f9a;stop-opacity:1.0000000;" + offset="1.0000000" + id="stop2627" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + id="linearGradient2635"> + <stop + style="stop-color:#f9fff5;stop-opacity:1;" + offset="0" + id="stop2637" /> + <stop + style="stop-color:#f9fff5;stop-opacity:0;" + offset="1" + id="stop2639" /> + </linearGradient> + <linearGradient + id="linearGradient2667"> + <stop + style="stop-color:#ffffff;stop-opacity:1.0000000;" + offset="0.0000000" + id="stop2669" /> + <stop + style="stop-color:#fcfcff;stop-opacity:0.0000000;" + offset="1.0000000" + id="stop2671" /> + </linearGradient> + <linearGradient + id="linearGradient2675"> + <stop + style="stop-color:#5b5b97;stop-opacity:1.0000000;" + offset="0.0000000" + id="stop2677" /> + <stop + style="stop-color:#1b1b43;stop-opacity:1.0000000;" + offset="1.0000000" + id="stop2679" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + id="linearGradient2683"> + <stop + style="stop-color:#000000;stop-opacity:1;" + offset="0" + id="stop2685" /> + <stop + style="stop-color:#000000;stop-opacity:0;" + offset="1" + id="stop2687" /> + </linearGradient> + <linearGradient + id="linearGradient2691"> + <stop + style="stop-color:#868686;stop-opacity:1.0000000;" + offset="0.0000000" + id="stop2693" /> + <stop + style="stop-color:#e9e9e9;stop-opacity:1.0000000;" + offset="1.0000000" + id="stop2695" /> + </linearGradient> + <linearGradient + id="linearGradient2701"> + <stop + style="stop-color:#585956;stop-opacity:1.0000000;" + offset="0.0000000" + id="stop2703" /> + <stop + style="stop-color:#bbbeb8;stop-opacity:1.0000000;" + offset="1.0000000" + id="stop2705" /> + </linearGradient> + <linearGradient + id="linearGradient2711"> + <stop + style="stop-color:#909090;stop-opacity:1.0000000;" + offset="0.0000000" + id="stop2713" /> + <stop + style="stop-color:#bebebe;stop-opacity:0.0000000;" + offset="1.0000000" + id="stop2715" /> + </linearGradient> + <linearGradient + id="linearGradient2752"> + <stop + style="stop-color:#9d9d9d;stop-opacity:1;" + offset="0" + id="stop2754" /> + <stop + style="stop-color:#b9b9b9;stop-opacity:1.0000000;" + offset="1.0000000" + id="stop2756" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + id="linearGradient2985"> + <stop + style="stop-color:#d8dfd6;stop-opacity:1;" + offset="0" + id="stop2987" /> + <stop + style="stop-color:#d8dfd6;stop-opacity:0;" + offset="1" + id="stop2989" /> + </linearGradient> + <radialGradient + r="8.7662792" + fy="67.501709" + fx="12.57571" + cy="67.501709" + cx="12.57571" + gradientTransform="scale(1.925808,0.519262)" + gradientUnits="userSpaceOnUse" + id="radialGradient2003-1" + xlink:href="#linearGradient2454-1" + inkscape:collect="always" /> + <linearGradient + id="linearGradient2454-1" + inkscape:collect="always"> + <stop + id="stop2456-9" + offset="0" + style="stop-color:#000000;stop-opacity:1;" /> + <stop + id="stop2458-1" + offset="1" + style="stop-color:#000000;stop-opacity:0;" /> + </linearGradient> + <linearGradient + y2="44.878883" + x2="-23.8857" + y1="49.953003" + x1="-23.8857" + gradientTransform="scale(1.492875,0.669848)" + gradientUnits="userSpaceOnUse" + id="linearGradient2005-3" + xlink:href="#linearGradient2985-8" + inkscape:collect="always" /> + <linearGradient + inkscape:collect="always" + id="linearGradient2985-8"> + <stop + style="stop-color:#d8dfd6;stop-opacity:1;" + offset="0" + id="stop2987-7" /> + <stop + style="stop-color:#d8dfd6;stop-opacity:0;" + offset="1" + id="stop2989-4" /> + </linearGradient> + <radialGradient + r="8.7662792" + fy="67.501709" + fx="12.57571" + cy="67.501709" + cx="12.57571" + gradientTransform="scale(1.925808,0.519262)" + gradientUnits="userSpaceOnUse" + id="radialGradient2007-9" + xlink:href="#linearGradient2454-1" + inkscape:collect="always" /> + <linearGradient + y2="64.892525" + x2="12.127711" + y1="53.535141" + x1="12.206709" + gradientTransform="scale(1.816345,0.550556)" + gradientUnits="userSpaceOnUse" + id="linearGradient2009-3" + xlink:href="#linearGradient2701-1" + inkscape:collect="always" /> + <linearGradient + id="linearGradient2701-1"> + <stop + style="stop-color:#585956;stop-opacity:1.0000000;" + offset="0.0000000" + id="stop2703-3" /> + <stop + style="stop-color:#bbbeb8;stop-opacity:1.0000000;" + offset="1.0000000" + id="stop2705-8" /> + </linearGradient> + <linearGradient + y2="33.339787" + x2="34.784473" + y1="7.2293582" + x1="8.6116238" + gradientTransform="matrix(1.129863,0,0,0.885063,-1.625,-1.304372)" + gradientUnits="userSpaceOnUse" + id="linearGradient2011-7" + xlink:href="#linearGradient2245-9" + inkscape:collect="always" /> + <linearGradient + id="linearGradient2245-9"> + <stop + id="stop2247-3" + offset="0.0000000" + style="stop-color:#dde1d9;stop-opacity:1.0000000;" /> + <stop + id="stop2249-8" + offset="1.0000000" + style="stop-color:#cacdc6;stop-opacity:1.0000000;" /> + </linearGradient> + <linearGradient + y2="31.246054" + x2="32.536823" + y1="5.3817744" + x1="10.390738" + gradientTransform="scale(1.104397,0.905471)" + gradientUnits="userSpaceOnUse" + id="linearGradient2013-8" + xlink:href="#linearGradient2253-4" + inkscape:collect="always" /> + <linearGradient + id="linearGradient2253-4"> + <stop + id="stop2255-0" + offset="0.0000000" + style="stop-color:#8f8f8f;stop-opacity:1.0000000;" /> + <stop + id="stop2257-0" + offset="1.0000000" + style="stop-color:#494949;stop-opacity:1.0000000;" /> + </linearGradient> + <linearGradient + y2="8.8666229" + x2="16.315819" + y1="32.622238" + x1="19.150396" + gradientTransform="matrix(1.174139,0,0,0.945431,0.721825,-1.331524)" + gradientUnits="userSpaceOnUse" + id="linearGradient2015-8" + xlink:href="#linearGradient2675-6" + inkscape:collect="always" /> + <linearGradient + id="linearGradient2675-6"> + <stop + style="stop-color:#5b5b97;stop-opacity:1.0000000;" + offset="0.0000000" + id="stop2677-8" /> + <stop + style="stop-color:#1b1b43;stop-opacity:1.0000000;" + offset="1.0000000" + id="stop2679-2" /> + </linearGradient> + <linearGradient + y2="162.45061" + x2="3.7069974" + y1="171.29134" + x1="3.7069976" + gradientTransform="matrix(5.705159,0,0,0.17528,1,-0.679373)" + gradientUnits="userSpaceOnUse" + id="linearGradient2017-3" + xlink:href="#linearGradient2683-8" + inkscape:collect="always" /> + <linearGradient + inkscape:collect="always" + id="linearGradient2683-8"> + <stop + style="stop-color:#000000;stop-opacity:1;" + offset="0" + id="stop2685-5" /> + <stop + style="stop-color:#000000;stop-opacity:0;" + offset="1" + id="stop2687-0" /> + </linearGradient> + <linearGradient + y2="55.200756" + x2="34.974548" + y1="13.004725" + x1="17.698339" + gradientTransform="matrix(1.108069,0,0,0.902471,1,1)" + gradientUnits="userSpaceOnUse" + id="linearGradient2019-5" + xlink:href="#linearGradient2415-9" + inkscape:collect="always" /> + <linearGradient + id="linearGradient2415-9" + inkscape:collect="always"> + <stop + id="stop2417-2" + offset="0" + style="stop-color:#ffffff;stop-opacity:1;" /> + <stop + id="stop2419-6" + offset="1" + style="stop-color:#ffffff;stop-opacity:0;" /> + </linearGradient> + <linearGradient + y2="26.729263" + x2="17.199417" + y1="1.6537577" + x1="11.492236" + gradientTransform="matrix(1.238977,0,0,0.895955,0.590553,-1.331524)" + gradientUnits="userSpaceOnUse" + id="linearGradient2021-8" + xlink:href="#linearGradient2667-5" + inkscape:collect="always" /> + <linearGradient + id="linearGradient2667-5"> + <stop + style="stop-color:#ffffff;stop-opacity:1.0000000;" + offset="0.0000000" + id="stop2669-2" /> + <stop + style="stop-color:#fcfcff;stop-opacity:0.0000000;" + offset="1.0000000" + id="stop2671-8" /> + </linearGradient> + <radialGradient + r="8.7662792" + fy="67.501709" + fx="12.57571" + cy="67.501709" + cx="12.57571" + gradientTransform="scale(1.925808,0.519262)" + gradientUnits="userSpaceOnUse" + id="radialGradient2023-3" + xlink:href="#linearGradient2454-1" + inkscape:collect="always" /> + <linearGradient + y2="52.536461" + x2="18.176752" + y1="48.643234" + x1="18.316999" + gradientTransform="scale(1.129863,0.885063)" + gradientUnits="userSpaceOnUse" + id="linearGradient2025-6" + xlink:href="#linearGradient2245-9" + inkscape:collect="always" /> + <linearGradient + id="linearGradient7446"> + <stop + id="stop7448" + offset="0.0000000" + style="stop-color:#dde1d9;stop-opacity:1.0000000;" /> + <stop + id="stop7450" + offset="1.0000000" + style="stop-color:#cacdc6;stop-opacity:1.0000000;" /> + </linearGradient> + <linearGradient + y2="31.246054" + x2="32.536823" + y1="5.3817744" + x1="10.390738" + gradientTransform="scale(1.104397,0.905471)" + gradientUnits="userSpaceOnUse" + id="linearGradient2027-7" + xlink:href="#linearGradient2253-4" + inkscape:collect="always" /> + <linearGradient + id="linearGradient7453"> + <stop + id="stop7455" + offset="0.0000000" + style="stop-color:#8f8f8f;stop-opacity:1.0000000;" /> + <stop + id="stop7457" + offset="1.0000000" + style="stop-color:#494949;stop-opacity:1.0000000;" /> + </linearGradient> + <linearGradient + y2="100.20015" + x2="8.1134233" + y1="88.509071" + x1="8.1134243" + gradientTransform="scale(2.309851,0.432928)" + gradientUnits="userSpaceOnUse" + id="linearGradient2029-8" + xlink:href="#linearGradient2752-7" + inkscape:collect="always" /> + <linearGradient + id="linearGradient2752-7"> + <stop + style="stop-color:#9d9d9d;stop-opacity:1;" + offset="0" + id="stop2754-2" /> + <stop + style="stop-color:#b9b9b9;stop-opacity:1.0000000;" + offset="1.0000000" + id="stop2756-6" /> + </linearGradient> + <linearGradient + y2="100.20015" + x2="8.1134233" + y1="88.509071" + x1="8.1134243" + gradientTransform="scale(2.309851,0.432928)" + gradientUnits="userSpaceOnUse" + id="linearGradient2031-6" + xlink:href="#linearGradient2752-7" + inkscape:collect="always" /> + <linearGradient + id="linearGradient7464"> + <stop + style="stop-color:#9d9d9d;stop-opacity:1;" + offset="0" + id="stop7466" /> + <stop + style="stop-color:#b9b9b9;stop-opacity:1.0000000;" + offset="1.0000000" + id="stop7468" /> + </linearGradient> + <linearGradient + y2="100.20015" + x2="8.1134233" + y1="88.509071" + x1="8.1134243" + gradientTransform="scale(2.309851,0.432928)" + gradientUnits="userSpaceOnUse" + id="linearGradient2033-2" + xlink:href="#linearGradient2752-7" + inkscape:collect="always" /> + <linearGradient + id="linearGradient7471"> + <stop + style="stop-color:#9d9d9d;stop-opacity:1;" + offset="0" + id="stop7473" /> + <stop + style="stop-color:#b9b9b9;stop-opacity:1.0000000;" + offset="1.0000000" + id="stop7475" /> + </linearGradient> + <linearGradient + y2="74.098007" + x2="8.6485014" + y1="101.2846" + x1="13.62871" + gradientTransform="matrix(2.143634,0,0,0.466498,1,-0.508826)" + gradientUnits="userSpaceOnUse" + id="linearGradient2035-9" + xlink:href="#linearGradient2635-7" + inkscape:collect="always" /> + <linearGradient + inkscape:collect="always" + id="linearGradient2635-7"> + <stop + style="stop-color:#f9fff5;stop-opacity:1;" + offset="0" + id="stop2637-0" /> + <stop + style="stop-color:#f9fff5;stop-opacity:0;" + offset="1" + id="stop2639-3" /> + </linearGradient> + <linearGradient + y2="3.8451097" + x2="35.520542" + y1="3.9384086" + x1="34.300991" + gradientUnits="userSpaceOnUse" + id="linearGradient2037-7" + xlink:href="#linearGradient2711-2" + inkscape:collect="always" /> + <linearGradient + id="linearGradient2711-2"> + <stop + style="stop-color:#909090;stop-opacity:1.0000000;" + offset="0.0000000" + id="stop2713-3" /> + <stop + style="stop-color:#bebebe;stop-opacity:0.0000000;" + offset="1.0000000" + id="stop2715-5" /> + </linearGradient> + <linearGradient + y2="3.8451097" + x2="35.520542" + y1="3.9384086" + x1="34.300991" + gradientUnits="userSpaceOnUse" + id="linearGradient2039-1" + xlink:href="#linearGradient2711-2" + inkscape:collect="always" /> + <linearGradient + id="linearGradient7486"> + <stop + style="stop-color:#909090;stop-opacity:1.0000000;" + offset="0.0000000" + id="stop7488" /> + <stop + style="stop-color:#bebebe;stop-opacity:0.0000000;" + offset="1.0000000" + id="stop7490" /> + </linearGradient> + <linearGradient + y2="3.8451097" + x2="35.520542" + y1="3.9384086" + x1="34.300991" + gradientUnits="userSpaceOnUse" + id="linearGradient2041-7" + xlink:href="#linearGradient2711-2" + inkscape:collect="always" /> + <linearGradient + id="linearGradient7493"> + <stop + style="stop-color:#909090;stop-opacity:1.0000000;" + offset="0.0000000" + id="stop7495" /> + <stop + style="stop-color:#bebebe;stop-opacity:0.0000000;" + offset="1.0000000" + id="stop7497" /> + </linearGradient> + <linearGradient + y2="3.8451097" + x2="35.520542" + y1="3.9384086" + x1="34.300991" + gradientUnits="userSpaceOnUse" + id="linearGradient2043-8" + xlink:href="#linearGradient2711-2" + inkscape:collect="always" /> + <linearGradient + id="linearGradient7500"> + <stop + style="stop-color:#909090;stop-opacity:1.0000000;" + offset="0.0000000" + id="stop7502" /> + <stop + style="stop-color:#bebebe;stop-opacity:0.0000000;" + offset="1.0000000" + id="stop7504" /> + </linearGradient> + <linearGradient + y2="3.8451097" + x2="35.520542" + y1="3.9384086" + x1="34.300991" + gradientUnits="userSpaceOnUse" + id="linearGradient2045-9" + xlink:href="#linearGradient2711-2" + inkscape:collect="always" /> + <linearGradient + id="linearGradient7507"> + <stop + style="stop-color:#909090;stop-opacity:1.0000000;" + offset="0.0000000" + id="stop7509" /> + <stop + style="stop-color:#bebebe;stop-opacity:0.0000000;" + offset="1.0000000" + id="stop7511" /> + </linearGradient> + <radialGradient + r="8.7662792" + fy="67.501709" + fx="12.57571" + cy="67.501709" + cx="12.57571" + gradientTransform="scale(1.925808,0.519262)" + gradientUnits="userSpaceOnUse" + id="radialGradient2003-1-5" + xlink:href="#linearGradient2454-1-6" + inkscape:collect="always" /> + <linearGradient + id="linearGradient2454-1-6" + inkscape:collect="always"> + <stop + id="stop2456-9-0" + offset="0" + style="stop-color:#000000;stop-opacity:1;" /> + <stop + id="stop2458-1-6" + offset="1" + style="stop-color:#000000;stop-opacity:0;" /> + </linearGradient> + <linearGradient + y2="44.878883" + x2="-23.8857" + y1="49.953003" + x1="-23.8857" + gradientTransform="scale(1.492875,0.669848)" + gradientUnits="userSpaceOnUse" + id="linearGradient2005-3-2" + xlink:href="#linearGradient2985-8-6" + inkscape:collect="always" /> + <linearGradient + inkscape:collect="always" + id="linearGradient2985-8-6"> + <stop + style="stop-color:#d8dfd6;stop-opacity:1;" + offset="0" + id="stop2987-7-9" /> + <stop + style="stop-color:#d8dfd6;stop-opacity:0;" + offset="1" + id="stop2989-4-9" /> + </linearGradient> + <radialGradient + r="8.7662792" + fy="67.501709" + fx="12.57571" + cy="67.501709" + cx="12.57571" + gradientTransform="scale(1.925808,0.519262)" + gradientUnits="userSpaceOnUse" + id="radialGradient2007-9-2" + xlink:href="#linearGradient2454-1-6" + inkscape:collect="always" /> + <linearGradient + y2="64.892525" + x2="12.127711" + y1="53.535141" + x1="12.206709" + gradientTransform="scale(1.816345,0.550556)" + gradientUnits="userSpaceOnUse" + id="linearGradient2009-3-9" + xlink:href="#linearGradient2701-1-6" + inkscape:collect="always" /> + <linearGradient + id="linearGradient2701-1-6"> + <stop + style="stop-color:#585956;stop-opacity:1.0000000;" + offset="0.0000000" + id="stop2703-3-5" /> + <stop + style="stop-color:#bbbeb8;stop-opacity:1.0000000;" + offset="1.0000000" + id="stop2705-8-5" /> + </linearGradient> + <linearGradient + y2="33.339787" + x2="34.784473" + y1="7.2293582" + x1="8.6116238" + gradientTransform="matrix(1.129863,0,0,0.885063,-1.625,-1.304372)" + gradientUnits="userSpaceOnUse" + id="linearGradient2011-7-3" + xlink:href="#linearGradient2245-9-8" + inkscape:collect="always" /> + <linearGradient + id="linearGradient2245-9-8"> + <stop + id="stop2247-3-6" + offset="0.0000000" + style="stop-color:#dde1d9;stop-opacity:1.0000000;" /> + <stop + id="stop2249-8-7" + offset="1.0000000" + style="stop-color:#cacdc6;stop-opacity:1.0000000;" /> + </linearGradient> + <linearGradient + y2="31.246054" + x2="32.536823" + y1="5.3817744" + x1="10.390738" + gradientTransform="scale(1.104397,0.905471)" + gradientUnits="userSpaceOnUse" + id="linearGradient2013-8-3" + xlink:href="#linearGradient2253-4-6" + inkscape:collect="always" /> + <linearGradient + id="linearGradient2253-4-6"> + <stop + id="stop2255-0-0" + offset="0.0000000" + style="stop-color:#8f8f8f;stop-opacity:1.0000000;" /> + <stop + id="stop2257-0-2" + offset="1.0000000" + style="stop-color:#494949;stop-opacity:1.0000000;" /> + </linearGradient> + <linearGradient + y2="8.8666229" + x2="16.315819" + y1="32.622238" + x1="19.150396" + gradientTransform="matrix(1.174139,0,0,0.945431,0.721825,-1.331524)" + gradientUnits="userSpaceOnUse" + id="linearGradient2015-8-6" + xlink:href="#linearGradient2675-6-9" + inkscape:collect="always" /> + <linearGradient + id="linearGradient2675-6-9"> + <stop + style="stop-color:#5b5b97;stop-opacity:1.0000000;" + offset="0.0000000" + id="stop2677-8-3" /> + <stop + style="stop-color:#1b1b43;stop-opacity:1.0000000;" + offset="1.0000000" + id="stop2679-2-0" /> + </linearGradient> + <linearGradient + y2="162.45061" + x2="3.7069974" + y1="171.29134" + x1="3.7069976" + gradientTransform="matrix(5.705159,0,0,0.17528,1,-0.679373)" + gradientUnits="userSpaceOnUse" + id="linearGradient2017-3-8" + xlink:href="#linearGradient2683-8-7" + inkscape:collect="always" /> + <linearGradient + inkscape:collect="always" + id="linearGradient2683-8-7"> + <stop + style="stop-color:#000000;stop-opacity:1;" + offset="0" + id="stop2685-5-6" /> + <stop + style="stop-color:#000000;stop-opacity:0;" + offset="1" + id="stop2687-0-5" /> + </linearGradient> + <linearGradient + y2="55.200756" + x2="34.974548" + y1="13.004725" + x1="17.698339" + gradientTransform="matrix(1.108069,0,0,0.902471,1,1)" + gradientUnits="userSpaceOnUse" + id="linearGradient2019-5-2" + xlink:href="#linearGradient2415-9-4" + inkscape:collect="always" /> + <linearGradient + id="linearGradient2415-9-4" + inkscape:collect="always"> + <stop + id="stop2417-2-0" + offset="0" + style="stop-color:#ffffff;stop-opacity:1;" /> + <stop + id="stop2419-6-0" + offset="1" + style="stop-color:#ffffff;stop-opacity:0;" /> + </linearGradient> + <linearGradient + y2="26.729263" + x2="17.199417" + y1="1.6537577" + x1="11.492236" + gradientTransform="matrix(1.238977,0,0,0.895955,0.590553,-1.331524)" + gradientUnits="userSpaceOnUse" + id="linearGradient2021-8-6" + xlink:href="#linearGradient2667-5-8" + inkscape:collect="always" /> + <linearGradient + id="linearGradient2667-5-8"> + <stop + style="stop-color:#ffffff;stop-opacity:1.0000000;" + offset="0.0000000" + id="stop2669-2-5" /> + <stop + style="stop-color:#fcfcff;stop-opacity:0.0000000;" + offset="1.0000000" + id="stop2671-8-4" /> + </linearGradient> + <radialGradient + r="8.7662792" + fy="67.501709" + fx="12.57571" + cy="67.501709" + cx="12.57571" + gradientTransform="scale(1.925808,0.519262)" + gradientUnits="userSpaceOnUse" + id="radialGradient2023-3-9" + xlink:href="#linearGradient2454-1-6" + inkscape:collect="always" /> + <linearGradient + y2="52.536461" + x2="18.176752" + y1="48.643234" + x1="18.316999" + gradientTransform="scale(1.129863,0.885063)" + gradientUnits="userSpaceOnUse" + id="linearGradient2025-6-4" + xlink:href="#linearGradient2245-9-8" + inkscape:collect="always" /> + <linearGradient + id="linearGradient7842"> + <stop + id="stop7844" + offset="0.0000000" + style="stop-color:#dde1d9;stop-opacity:1.0000000;" /> + <stop + id="stop7846" + offset="1.0000000" + style="stop-color:#cacdc6;stop-opacity:1.0000000;" /> + </linearGradient> + <linearGradient + y2="31.246054" + x2="32.536823" + y1="5.3817744" + x1="10.390738" + gradientTransform="scale(1.104397,0.905471)" + gradientUnits="userSpaceOnUse" + id="linearGradient2027-7-6" + xlink:href="#linearGradient2253-4-6" + inkscape:collect="always" /> + <linearGradient + id="linearGradient7849"> + <stop + id="stop7851" + offset="0.0000000" + style="stop-color:#8f8f8f;stop-opacity:1.0000000;" /> + <stop + id="stop7853" + offset="1.0000000" + style="stop-color:#494949;stop-opacity:1.0000000;" /> + </linearGradient> + <linearGradient + y2="100.20015" + x2="8.1134233" + y1="88.509071" + x1="8.1134243" + gradientTransform="scale(2.309851,0.432928)" + gradientUnits="userSpaceOnUse" + id="linearGradient2029-8-8" + xlink:href="#linearGradient2752-7-3" + inkscape:collect="always" /> + <linearGradient + id="linearGradient2752-7-3"> + <stop + style="stop-color:#9d9d9d;stop-opacity:1;" + offset="0" + id="stop2754-2-2" /> + <stop + style="stop-color:#b9b9b9;stop-opacity:1.0000000;" + offset="1.0000000" + id="stop2756-6-3" /> + </linearGradient> + <linearGradient + y2="100.20015" + x2="8.1134233" + y1="88.509071" + x1="8.1134243" + gradientTransform="scale(2.309851,0.432928)" + gradientUnits="userSpaceOnUse" + id="linearGradient2031-6-6" + xlink:href="#linearGradient2752-7-3" + inkscape:collect="always" /> + <linearGradient + id="linearGradient7860"> + <stop + style="stop-color:#9d9d9d;stop-opacity:1;" + offset="0" + id="stop7862" /> + <stop + style="stop-color:#b9b9b9;stop-opacity:1.0000000;" + offset="1.0000000" + id="stop7864" /> + </linearGradient> + <linearGradient + y2="100.20015" + x2="8.1134233" + y1="88.509071" + x1="8.1134243" + gradientTransform="scale(2.309851,0.432928)" + gradientUnits="userSpaceOnUse" + id="linearGradient2033-2-2" + xlink:href="#linearGradient2752-7-3" + inkscape:collect="always" /> + <linearGradient + id="linearGradient7867"> + <stop + style="stop-color:#9d9d9d;stop-opacity:1;" + offset="0" + id="stop7869" /> + <stop + style="stop-color:#b9b9b9;stop-opacity:1.0000000;" + offset="1.0000000" + id="stop7871" /> + </linearGradient> + <linearGradient + y2="74.098007" + x2="8.6485014" + y1="101.2846" + x1="13.62871" + gradientTransform="matrix(2.143634,0,0,0.466498,1,-0.508826)" + gradientUnits="userSpaceOnUse" + id="linearGradient2035-9-2" + xlink:href="#linearGradient2635-7-4" + inkscape:collect="always" /> + <linearGradient + inkscape:collect="always" + id="linearGradient2635-7-4"> + <stop + style="stop-color:#f9fff5;stop-opacity:1;" + offset="0" + id="stop2637-0-7" /> + <stop + style="stop-color:#f9fff5;stop-opacity:0;" + offset="1" + id="stop2639-3-0" /> + </linearGradient> + <linearGradient + y2="3.8451097" + x2="35.520542" + y1="3.9384086" + x1="34.300991" + gradientUnits="userSpaceOnUse" + id="linearGradient2037-7-4" + xlink:href="#linearGradient2711-2-9" + inkscape:collect="always" /> + <linearGradient + id="linearGradient2711-2-9"> + <stop + style="stop-color:#909090;stop-opacity:1.0000000;" + offset="0.0000000" + id="stop2713-3-6" /> + <stop + style="stop-color:#bebebe;stop-opacity:0.0000000;" + offset="1.0000000" + id="stop2715-5-5" /> + </linearGradient> + <linearGradient + y2="3.8451097" + x2="35.520542" + y1="3.9384086" + x1="34.300991" + gradientUnits="userSpaceOnUse" + id="linearGradient2039-1-4" + xlink:href="#linearGradient2711-2-9" + inkscape:collect="always" /> + <linearGradient + id="linearGradient7882"> + <stop + style="stop-color:#909090;stop-opacity:1.0000000;" + offset="0.0000000" + id="stop7884" /> + <stop + style="stop-color:#bebebe;stop-opacity:0.0000000;" + offset="1.0000000" + id="stop7886" /> + </linearGradient> + <linearGradient + y2="3.8451097" + x2="35.520542" + y1="3.9384086" + x1="34.300991" + gradientUnits="userSpaceOnUse" + id="linearGradient2041-7-6" + xlink:href="#linearGradient2711-2-9" + inkscape:collect="always" /> + <linearGradient + id="linearGradient7889"> + <stop + style="stop-color:#909090;stop-opacity:1.0000000;" + offset="0.0000000" + id="stop7891" /> + <stop + style="stop-color:#bebebe;stop-opacity:0.0000000;" + offset="1.0000000" + id="stop7893" /> + </linearGradient> + <linearGradient + y2="3.8451097" + x2="35.520542" + y1="3.9384086" + x1="34.300991" + gradientUnits="userSpaceOnUse" + id="linearGradient2043-8-4" + xlink:href="#linearGradient2711-2-9" + inkscape:collect="always" /> + <linearGradient + id="linearGradient7896"> + <stop + style="stop-color:#909090;stop-opacity:1.0000000;" + offset="0.0000000" + id="stop7898" /> + <stop + style="stop-color:#bebebe;stop-opacity:0.0000000;" + offset="1.0000000" + id="stop7900" /> + </linearGradient> + <linearGradient + y2="3.8451097" + x2="35.520542" + y1="3.9384086" + x1="34.300991" + gradientUnits="userSpaceOnUse" + id="linearGradient2045-9-2" + xlink:href="#linearGradient2711-2-9" + inkscape:collect="always" /> + <linearGradient + id="linearGradient7903"> + <stop + style="stop-color:#909090;stop-opacity:1.0000000;" + offset="0.0000000" + id="stop7905" /> + <stop + style="stop-color:#bebebe;stop-opacity:0.0000000;" + offset="1.0000000" + id="stop7907" /> + </linearGradient> + </defs> + <sodipodi:namedview + id="base" + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1.0" + inkscape:pageopacity="0.0" + inkscape:pageshadow="2" + inkscape:zoom="11.2" + inkscape:cx="1004.3144" + inkscape:cy="275.05557" + inkscape:document-units="px" + inkscape:current-layer="layer1" + showgrid="false" /> + <metadata + id="metadata7"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + <dc:title /> + </cc:Work> + </rdf:RDF> + </metadata> + <g + inkscape:label="Layer 1" + inkscape:groupmode="layer" + id="layer1" + transform="translate(0,-308.2677)"> + <path + sodipodi:type="arc" + style="opacity:0.25099996;color:#000000;fill:url(#radialGradient3909);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" + id="path3109-5" + sodipodi:cx="144.28572" + sodipodi:cy="673.07648" + sodipodi:rx="115.71429" + sodipodi:ry="105" + d="m 260.00001,673.07648 c 0,57.9899 -51.80705,105 -115.71429,105 -63.907235,0 -115.714286,-47.0101 -115.714286,-105 0,-57.9899 51.807051,-105 115.714286,-105 63.90724,0 115.71429,47.0101 115.71429,105 z" + transform="matrix(1,0,0,1.1360544,60.857137,-306.28931)" /> + <image + y="370.14789" + x="132.64285" + id="image3063-0" + xlink:href="file:///source/git/clean-pcp-gui/man/html/images/rack.jpg" + height="175.28572" + width="147.28572" /> + <path + sodipodi:type="arc" + style="opacity:0.25099996;color:#000000;fill:url(#radialGradient5519);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" + id="path3109-5-5" + sodipodi:cx="144.28572" + sodipodi:cy="673.07648" + sodipodi:rx="115.71429" + sodipodi:ry="105" + d="m 260.00001,673.07648 c 0,57.9899 -51.80705,105 -115.71429,105 -63.907235,0 -115.714286,-47.0101 -115.714286,-105 0,-57.9899 51.807051,-105 115.714286,-105 63.90724,0 115.71429,47.0101 115.71429,105 z" + transform="matrix(1,0,0,1.1360544,63.14284,115.9964)" /> + <image + y="793.39722" + x="133.30974" + id="image3063" + xlink:href="file:///source/git/clean-pcp-gui/man/html/images/rack.jpg" + height="175.28572" + width="147.28572" /> + <path + sodipodi:type="arc" + style="opacity:0.25099996;color:#000000;fill:url(#radialGradient3885);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" + id="path3109" + sodipodi:cx="144.28572" + sodipodi:cy="673.07648" + sodipodi:rx="115.71429" + sodipodi:ry="105" + d="m 260.00001,673.07648 c 0,57.9899 -51.80705,105 -115.71429,105 -63.907235,0 -115.714286,-47.0101 -115.714286,-105 0,-57.9899 51.807051,-105 115.714286,-105 63.90724,0 115.71429,47.0101 115.71429,105 z" + transform="matrix(1,0,0,1.1360544,-23.428574,-86.7179)" /> + <image + y="584.7193" + x="47.214283" + id="image3063-1-6" + xlink:href="file:///source/git/clean-pcp-gui/man/html/images/rack.jpg" + height="175.28572" + width="147.28572" /> + <path + sodipodi:type="arc" + style="opacity:0.24892704;color:#000000;fill:url(#radialGradient6332);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" + id="path3109-7" + sodipodi:cx="144.28572" + sodipodi:cy="673.07648" + sodipodi:rx="115.71429" + sodipodi:ry="105" + d="m 260.00001,673.07648 c 0,57.9899 -51.80705,105 -115.71429,105 -63.907235,0 -115.714286,-47.0101 -115.714286,-105 0,-57.9899 51.807051,-105 115.714286,-105 63.90724,0 115.71429,47.0101 115.71429,105 z" + transform="matrix(1,0,0,1.2244898,771.48948,-174.88997)" /> + <image + y="561.21387" + x="841.13232" + id="image4099" + xlink:href="file:///source/git/clean-pcp-gui/man/html/images/server.jpg" + height="29" + width="150.14285" /> + <g + id="g4500" + transform="matrix(10.71203,0,0,11.079441,828.98022,578.12464)"> + <g + inkscape:label="Shadow" + id="layer6" /> + <g + id="layer1-7" + inkscape:label="Base" + style="display:inline" /> + <g + style="display:inline" + inkscape:label="Text" + id="layer5"> + <g + transform="matrix(0.388981,0,0,0.327274,-1.220361,0.172154)" + id="g3161"> + <path + sodipodi:type="arc" + style="opacity:0.7836257;color:#000000;fill:url(#radialGradient3195);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2;marker:none;visibility:visible;display:inline;overflow:visible" + id="path3667" + sodipodi:cx="24.306795" + sodipodi:cy="42.07798" + sodipodi:rx="15.821514" + sodipodi:ry="4.5078058" + d="m 40.128309,42.07798 c 0,2.489592 -7.083533,4.507806 -15.821514,4.507806 -8.737981,0 -15.821514,-2.018214 -15.821514,-4.507806 0,-2.489592 7.083533,-4.507806 15.821514,-4.507806 8.737981,0 15.821514,2.018214 15.821514,4.507806 z" + transform="translate(0,0.707108)" /> + <rect + style="color:#000000;fill:url(#radialGradient3197);fill-opacity:1;fill-rule:nonzero;stroke:url(#radialGradient3199);stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dashoffset:0;marker:none;visibility:visible;display:block;overflow:visible" + id="rect15391" + width="34.875" + height="40.920494" + x="6.6035528" + y="3.6464462" + ry="1.1490486" /> + <rect + style="color:#000000;fill:none;stroke:url(#radialGradient3201);stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dashoffset:0;marker:none;visibility:visible;display:block;overflow:visible" + id="rect15660" + width="32.775887" + height="38.946384" + x="7.6660538" + y="4.5839462" + ry="0.14904857" + rx="0.14904857" /> + <g + style="display:inline" + transform="translate(0.646447,-0.03798933)" + id="g2270"> + <g + id="g1440" + style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-miterlimit:4" + transform="matrix(0.229703,0,0,0.229703,4.967081,4.244972)"> + <radialGradient + id="radialGradient1442" + cx="20.892099" + cy="114.5684" + r="5.256" + fx="20.892099" + fy="114.5684" + gradientUnits="userSpaceOnUse"> + <stop + offset="0" + style="stop-color:#F0F0F0" + id="stop1444" /> + <stop + offset="1" + style="stop-color:#474747" + id="stop1446" /> + </radialGradient> + <path + style="stroke:none" + d="m 23.428,113.07 c 0,1.973 -1.6,3.572 -3.573,3.572 -1.974,0 -3.573,-1.6 -3.573,-3.572 0,-1.974 1.6,-3.573 3.573,-3.573 1.973,0 3.573,1.6 3.573,3.573 z" + id="path1448" + inkscape:connector-curvature="0" /> + <radialGradient + id="radialGradient1450" + cx="20.892099" + cy="64.567902" + r="5.257" + fx="20.892099" + fy="64.567902" + gradientUnits="userSpaceOnUse"> + <stop + offset="0" + style="stop-color:#F0F0F0" + id="stop1452" /> + <stop + offset="1" + style="stop-color:#474747" + id="stop1454" /> + </radialGradient> + <path + style="stroke:none" + d="m 23.428,63.07 c 0,1.973 -1.6,3.573 -3.573,3.573 -1.974,0 -3.573,-1.6 -3.573,-3.573 0,-1.974 1.6,-3.573 3.573,-3.573 1.973,0 3.573,1.6 3.573,3.573 z" + id="path1456" + inkscape:connector-curvature="0" /> + </g> + <path + style="fill:url(#radialGradient3203);fill-rule:nonzero;stroke:none" + d="m 9.9950109,29.952326 c 0,0.453204 -0.3675248,0.820499 -0.8207288,0.820499 -0.4534338,0 -0.8207289,-0.367524 -0.8207289,-0.820499 0,-0.453434 0.3675248,-0.820729 0.8207289,-0.820729 0.453204,0 0.8207288,0.367525 0.8207288,0.820729 z" + id="path15570" + inkscape:connector-curvature="0" /> + <path + style="fill:url(#radialGradient3205);fill-rule:nonzero;stroke:none" + d="m 9.9950109,18.467176 c 0,0.453204 -0.3675248,0.820729 -0.8207288,0.820729 -0.4534338,0 -0.8207289,-0.367525 -0.8207289,-0.820729 0,-0.453434 0.3675248,-0.820729 0.8207289,-0.820729 0.453204,0 0.8207288,0.367525 0.8207288,0.820729 z" + id="path15577" + inkscape:connector-curvature="0" /> + </g> + <path + style="fill:none;stroke:#000000;stroke-width:0.98855311;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:0.01754384;display:inline" + d="m 11.505723,5.4942766 0,37.9065924" + id="path15672" + sodipodi:nodetypes="cc" + inkscape:connector-curvature="0" /> + <path + style="fill:none;stroke:#ffffff;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:0.20467828;display:inline" + d="m 12.5,5.0205154 0,38.0177126" + id="path15674" + sodipodi:nodetypes="cc" + inkscape:connector-curvature="0" /> + <g + transform="matrix(0.909091,0,0,1,2.363628,0)" + id="g2253"> + <rect + style="color:#000000;fill:#9b9b9b;fill-opacity:0.54970757;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:block;overflow:visible" + id="rect15686" + width="22.000004" + height="1" + x="15.000002" + y="9" + rx="0.15156493" + ry="0.065390877" /> + <rect + style="color:#000000;fill:#9b9b9b;fill-opacity:0.54970757;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:block;overflow:visible" + id="rect15688" + width="22.000004" + height="1" + x="15.000002" + y="11" + rx="0.15156493" + ry="0.065390877" /> + <rect + style="color:#000000;fill:#9b9b9b;fill-opacity:0.54970757;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:block;overflow:visible" + id="rect15690" + width="22.000004" + height="1" + x="15.000002" + y="13" + rx="0.15156493" + ry="0.065390877" /> + <rect + style="color:#000000;fill:#9b9b9b;fill-opacity:0.54970757;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:block;overflow:visible" + id="rect15692" + width="22.000004" + height="1" + x="15.000002" + y="15" + rx="0.15156493" + ry="0.065390877" /> + <rect + style="color:#000000;fill:#9b9b9b;fill-opacity:0.54970757;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:block;overflow:visible" + id="rect15694" + width="22.000004" + height="1" + x="15.000002" + y="17" + rx="0.15156493" + ry="0.065390877" /> + <rect + style="color:#000000;fill:#9b9b9b;fill-opacity:0.54970757;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:block;overflow:visible" + id="rect15696" + width="22.000004" + height="1" + x="15.000002" + y="19" + rx="0.15156493" + ry="0.065390877" /> + <rect + style="color:#000000;fill:#9b9b9b;fill-opacity:0.54970757;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:block;overflow:visible" + id="rect15698" + width="22.000004" + height="1" + x="15.000002" + y="21" + rx="0.15156493" + ry="0.065390877" /> + <rect + style="color:#000000;fill:#9b9b9b;fill-opacity:0.54970757;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:block;overflow:visible" + id="rect15700" + width="22.000004" + height="1" + x="15.000002" + y="23" + rx="0.15156493" + ry="0.065390877" /> + <rect + style="color:#000000;fill:#9b9b9b;fill-opacity:0.54970757;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:block;overflow:visible" + id="rect15732" + width="9.9000053" + height="1" + x="14.999992" + y="25" + rx="0.068204239" + ry="0.065390877" /> + <rect + style="color:#000000;fill:#9b9b9b;fill-opacity:0.54970757;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:block;overflow:visible" + id="rect15736" + width="22.000004" + height="1" + x="14.999992" + y="29" + rx="0.15156493" + ry="0.065390877" /> + <rect + style="color:#000000;fill:#9b9b9b;fill-opacity:0.54970757;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:block;overflow:visible" + id="rect15738" + width="22.000004" + height="1" + x="14.999992" + y="31" + rx="0.15156493" + ry="0.065390877" /> + <rect + style="color:#000000;fill:#9b9b9b;fill-opacity:0.54970757;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:block;overflow:visible" + id="rect15740" + width="22.000004" + height="1" + x="14.999992" + y="33" + rx="0.15156493" + ry="0.065390877" /> + <rect + style="color:#000000;fill:#9b9b9b;fill-opacity:0.54970757;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:block;overflow:visible" + id="rect15742" + width="22.000004" + height="1" + x="14.999992" + y="35" + rx="0.15156493" + ry="0.065390877" /> + <rect + style="color:#000000;fill:#9b9b9b;fill-opacity:0.54970757;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:block;overflow:visible" + id="rect15744" + width="15.400014" + height="1" + x="14.999992" + y="37" + rx="0.10609552" + ry="0.065390877" /> + </g> + </g> + </g> + </g> + <g + id="g4500-1" + transform="matrix(6.0278296,0,0,7.3216608,835.90486,631.73013)"> + <g + inkscape:label="Shadow" + id="layer6-7" /> + <g + id="layer1-7-2" + inkscape:label="Base" + style="display:inline" /> + <g + style="display:inline" + inkscape:label="Text" + id="layer5-7"> + <g + transform="matrix(0.388981,0,0,0.327274,-1.220361,0.172154)" + id="g3161-2"> + <path + sodipodi:type="arc" + style="opacity:0.7836257;color:#000000;fill:url(#radialGradient3195-8);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2;marker:none;visibility:visible;display:inline;overflow:visible" + id="path3667-2" + sodipodi:cx="24.306795" + sodipodi:cy="42.07798" + sodipodi:rx="15.821514" + sodipodi:ry="4.5078058" + d="m 40.128309,42.07798 c 0,2.489592 -7.083533,4.507806 -15.821514,4.507806 -8.737981,0 -15.821514,-2.018214 -15.821514,-4.507806 0,-2.489592 7.083533,-4.507806 15.821514,-4.507806 8.737981,0 15.821514,2.018214 15.821514,4.507806 z" + transform="translate(0,0.707108)" /> + <rect + style="color:#000000;fill:url(#radialGradient3197-4);fill-opacity:1;fill-rule:nonzero;stroke:url(#radialGradient3199-9);stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dashoffset:0;marker:none;visibility:visible;display:block;overflow:visible" + id="rect15391-6" + width="34.875" + height="40.920494" + x="6.6035528" + y="3.6464462" + ry="1.1490486" /> + <rect + style="color:#000000;fill:none;stroke:url(#radialGradient3201-8);stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dashoffset:0;marker:none;visibility:visible;display:block;overflow:visible" + id="rect15660-1" + width="32.775887" + height="38.946384" + x="7.6660538" + y="4.5839462" + ry="0.14904857" + rx="0.14904857" /> + <g + style="display:inline" + transform="translate(0.646447,-0.03798933)" + id="g2270-0"> + <g + id="g1440-6" + style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-miterlimit:4" + transform="matrix(0.229703,0,0,0.229703,4.967081,4.244972)"> + <radialGradient + id="radialGradient1442-1" + cx="20.892099" + cy="114.5684" + r="5.256" + fx="20.892099" + fy="114.5684" + gradientUnits="userSpaceOnUse"> + <stop + offset="0" + style="stop-color:#F0F0F0" + id="stop1444-5" /> + <stop + offset="1" + style="stop-color:#474747" + id="stop1446-9" /> + </radialGradient> + <path + style="stroke:none" + d="m 23.428,113.07 c 0,1.973 -1.6,3.572 -3.573,3.572 -1.974,0 -3.573,-1.6 -3.573,-3.572 0,-1.974 1.6,-3.573 3.573,-3.573 1.973,0 3.573,1.6 3.573,3.573 z" + id="path1448-4" + inkscape:connector-curvature="0" /> + <radialGradient + id="radialGradient1450-9" + cx="20.892099" + cy="64.567902" + r="5.257" + fx="20.892099" + fy="64.567902" + gradientUnits="userSpaceOnUse"> + <stop + offset="0" + style="stop-color:#F0F0F0" + id="stop1452-0" /> + <stop + offset="1" + style="stop-color:#474747" + id="stop1454-9" /> + </radialGradient> + <path + style="stroke:none" + d="m 23.428,63.07 c 0,1.973 -1.6,3.573 -3.573,3.573 -1.974,0 -3.573,-1.6 -3.573,-3.573 0,-1.974 1.6,-3.573 3.573,-3.573 1.973,0 3.573,1.6 3.573,3.573 z" + id="path1456-1" + inkscape:connector-curvature="0" /> + </g> + <path + style="fill:url(#radialGradient3203-6);fill-rule:nonzero;stroke:none" + d="m 9.9950109,29.952326 c 0,0.453204 -0.3675248,0.820499 -0.8207288,0.820499 -0.4534338,0 -0.8207289,-0.367524 -0.8207289,-0.820499 0,-0.453434 0.3675248,-0.820729 0.8207289,-0.820729 0.453204,0 0.8207288,0.367525 0.8207288,0.820729 z" + id="path15570-7" + inkscape:connector-curvature="0" /> + <path + style="fill:url(#radialGradient3205-0);fill-rule:nonzero;stroke:none" + d="m 9.9950109,18.467176 c 0,0.453204 -0.3675248,0.820729 -0.8207288,0.820729 -0.4534338,0 -0.8207289,-0.367525 -0.8207289,-0.820729 0,-0.453434 0.3675248,-0.820729 0.8207289,-0.820729 0.453204,0 0.8207288,0.367525 0.8207288,0.820729 z" + id="path15577-7" + inkscape:connector-curvature="0" /> + </g> + <path + style="fill:none;stroke:#000000;stroke-width:0.98855311;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:0.01754384;display:inline" + d="m 11.505723,5.4942766 0,37.9065924" + id="path15672-1" + sodipodi:nodetypes="cc" + inkscape:connector-curvature="0" /> + <path + style="fill:none;stroke:#ffffff;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:0.20467828;display:inline" + d="m 12.5,5.0205154 0,38.0177126" + id="path15674-1" + sodipodi:nodetypes="cc" + inkscape:connector-curvature="0" /> + <g + transform="matrix(0.909091,0,0,1,2.363628,0)" + id="g2253-5"> + <rect + style="color:#000000;fill:#9b9b9b;fill-opacity:0.54970757;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:block;overflow:visible" + id="rect15686-9" + width="22.000004" + height="1" + x="15.000002" + y="9" + rx="0.15156493" + ry="0.065390877" /> + <rect + style="color:#000000;fill:#9b9b9b;fill-opacity:0.54970757;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:block;overflow:visible" + id="rect15688-7" + width="22.000004" + height="1" + x="15.000002" + y="11" + rx="0.15156493" + ry="0.065390877" /> + <rect + style="color:#000000;fill:#9b9b9b;fill-opacity:0.54970757;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:block;overflow:visible" + id="rect15690-7" + width="22.000004" + height="1" + x="15.000002" + y="13" + rx="0.15156493" + ry="0.065390877" /> + <rect + style="color:#000000;fill:#9b9b9b;fill-opacity:0.54970757;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:block;overflow:visible" + id="rect15692-6" + width="22.000004" + height="1" + x="15.000002" + y="15" + rx="0.15156493" + ry="0.065390877" /> + <rect + style="color:#000000;fill:#9b9b9b;fill-opacity:0.54970757;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:block;overflow:visible" + id="rect15694-7" + width="22.000004" + height="1" + x="15.000002" + y="17" + rx="0.15156493" + ry="0.065390877" /> + <rect + style="color:#000000;fill:#9b9b9b;fill-opacity:0.54970757;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:block;overflow:visible" + id="rect15696-3" + width="22.000004" + height="1" + x="15.000002" + y="19" + rx="0.15156493" + ry="0.065390877" /> + <rect + style="color:#000000;fill:#9b9b9b;fill-opacity:0.54970757;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:block;overflow:visible" + id="rect15698-6" + width="22.000004" + height="1" + x="15.000002" + y="21" + rx="0.15156493" + ry="0.065390877" /> + <rect + style="color:#000000;fill:#9b9b9b;fill-opacity:0.54970757;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:block;overflow:visible" + id="rect15700-5" + width="22.000004" + height="1" + x="15.000002" + y="23" + rx="0.15156493" + ry="0.065390877" /> + <rect + style="color:#000000;fill:#9b9b9b;fill-opacity:0.54970757;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:block;overflow:visible" + id="rect15732-6" + width="9.9000053" + height="1" + x="14.999992" + y="25" + rx="0.068204239" + ry="0.065390877" /> + <rect + style="color:#000000;fill:#9b9b9b;fill-opacity:0.54970757;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:block;overflow:visible" + id="rect15736-3" + width="22.000004" + height="1" + x="14.999992" + y="29" + rx="0.15156493" + ry="0.065390877" /> + <rect + style="color:#000000;fill:#9b9b9b;fill-opacity:0.54970757;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:block;overflow:visible" + id="rect15738-9" + width="22.000004" + height="1" + x="14.999992" + y="31" + rx="0.15156493" + ry="0.065390877" /> + <rect + style="color:#000000;fill:#9b9b9b;fill-opacity:0.54970757;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:block;overflow:visible" + id="rect15740-4" + width="22.000004" + height="1" + x="14.999992" + y="33" + rx="0.15156493" + ry="0.065390877" /> + <rect + style="color:#000000;fill:#9b9b9b;fill-opacity:0.54970757;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:block;overflow:visible" + id="rect15742-8" + width="22.000004" + height="1" + x="14.999992" + y="35" + rx="0.15156493" + ry="0.065390877" /> + <rect + style="color:#000000;fill:#9b9b9b;fill-opacity:0.54970757;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:block;overflow:visible" + id="rect15744-1" + width="15.400014" + height="1" + x="14.999992" + y="37" + rx="0.10609552" + ry="0.065390877" /> + </g> + </g> + </g> + </g> + <g + id="g4500-1-3" + transform="matrix(6.0278296,0,0,7.3216608,866.19057,610.01584)"> + <g + inkscape:label="Shadow" + id="layer6-7-0" /> + <g + id="layer1-7-2-4" + inkscape:label="Base" + style="display:inline" /> + <g + style="display:inline" + inkscape:label="Text" + id="layer5-7-4"> + <g + transform="matrix(0.388981,0,0,0.327274,-1.220361,0.172154)" + id="g3161-2-4"> + <path + sodipodi:type="arc" + style="opacity:0.7836257;color:#000000;fill:url(#radialGradient3195-8-2);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2;marker:none;visibility:visible;display:inline;overflow:visible" + id="path3667-2-4" + sodipodi:cx="24.306795" + sodipodi:cy="42.07798" + sodipodi:rx="15.821514" + sodipodi:ry="4.5078058" + d="m 40.128309,42.07798 c 0,2.489592 -7.083533,4.507806 -15.821514,4.507806 -8.737981,0 -15.821514,-2.018214 -15.821514,-4.507806 0,-2.489592 7.083533,-4.507806 15.821514,-4.507806 8.737981,0 15.821514,2.018214 15.821514,4.507806 z" + transform="translate(0,0.707108)" /> + <rect + style="color:#000000;fill:url(#radialGradient3197-4-0);fill-opacity:1;fill-rule:nonzero;stroke:url(#radialGradient3199-9-0);stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dashoffset:0;marker:none;visibility:visible;display:block;overflow:visible" + id="rect15391-6-7" + width="34.875" + height="40.920494" + x="6.6035528" + y="3.6464462" + ry="1.1490486" /> + <rect + style="color:#000000;fill:none;stroke:url(#radialGradient3201-8-8);stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dashoffset:0;marker:none;visibility:visible;display:block;overflow:visible" + id="rect15660-1-6" + width="32.775887" + height="38.946384" + x="7.6660538" + y="4.5839462" + ry="0.14904857" + rx="0.14904857" /> + <g + style="display:inline" + transform="translate(0.646447,-0.03798933)" + id="g2270-0-3"> + <g + id="g1440-6-1" + style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-miterlimit:4" + transform="matrix(0.229703,0,0,0.229703,4.967081,4.244972)"> + <radialGradient + id="radialGradient1442-1-7" + cx="20.892099" + cy="114.5684" + r="5.256" + fx="20.892099" + fy="114.5684" + gradientUnits="userSpaceOnUse"> + <stop + offset="0" + style="stop-color:#F0F0F0" + id="stop1444-5-5" /> + <stop + offset="1" + style="stop-color:#474747" + id="stop1446-9-9" /> + </radialGradient> + <path + style="stroke:none" + d="m 23.428,113.07 c 0,1.973 -1.6,3.572 -3.573,3.572 -1.974,0 -3.573,-1.6 -3.573,-3.572 0,-1.974 1.6,-3.573 3.573,-3.573 1.973,0 3.573,1.6 3.573,3.573 z" + id="path1448-4-6" + inkscape:connector-curvature="0" /> + <radialGradient + id="radialGradient1450-9-2" + cx="20.892099" + cy="64.567902" + r="5.257" + fx="20.892099" + fy="64.567902" + gradientUnits="userSpaceOnUse"> + <stop + offset="0" + style="stop-color:#F0F0F0" + id="stop1452-0-1" /> + <stop + offset="1" + style="stop-color:#474747" + id="stop1454-9-7" /> + </radialGradient> + <path + style="stroke:none" + d="m 23.428,63.07 c 0,1.973 -1.6,3.573 -3.573,3.573 -1.974,0 -3.573,-1.6 -3.573,-3.573 0,-1.974 1.6,-3.573 3.573,-3.573 1.973,0 3.573,1.6 3.573,3.573 z" + id="path1456-1-8" + inkscape:connector-curvature="0" /> + </g> + <path + style="fill:url(#radialGradient3203-6-1);fill-rule:nonzero;stroke:none" + d="m 9.9950109,29.952326 c 0,0.453204 -0.3675248,0.820499 -0.8207288,0.820499 -0.4534338,0 -0.8207289,-0.367524 -0.8207289,-0.820499 0,-0.453434 0.3675248,-0.820729 0.8207289,-0.820729 0.453204,0 0.8207288,0.367525 0.8207288,0.820729 z" + id="path15570-7-5" + inkscape:connector-curvature="0" /> + <path + style="fill:url(#radialGradient3205-0-4);fill-rule:nonzero;stroke:none" + d="m 9.9950109,18.467176 c 0,0.453204 -0.3675248,0.820729 -0.8207288,0.820729 -0.4534338,0 -0.8207289,-0.367525 -0.8207289,-0.820729 0,-0.453434 0.3675248,-0.820729 0.8207289,-0.820729 0.453204,0 0.8207288,0.367525 0.8207288,0.820729 z" + id="path15577-7-7" + inkscape:connector-curvature="0" /> + </g> + <path + style="fill:none;stroke:#000000;stroke-width:0.98855311;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:0.01754384;display:inline" + d="m 11.505723,5.4942766 0,37.9065924" + id="path15672-1-4" + sodipodi:nodetypes="cc" + inkscape:connector-curvature="0" /> + <path + style="fill:none;stroke:#ffffff;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:0.20467828;display:inline" + d="m 12.5,5.0205154 0,38.0177126" + id="path15674-1-1" + sodipodi:nodetypes="cc" + inkscape:connector-curvature="0" /> + <g + transform="matrix(0.909091,0,0,1,2.363628,0)" + id="g2253-5-8"> + <rect + style="color:#000000;fill:#9b9b9b;fill-opacity:0.54970757;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:block;overflow:visible" + id="rect15686-9-5" + width="22.000004" + height="1" + x="15.000002" + y="9" + rx="0.15156493" + ry="0.065390877" /> + <rect + style="color:#000000;fill:#9b9b9b;fill-opacity:0.54970757;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:block;overflow:visible" + id="rect15688-7-9" + width="22.000004" + height="1" + x="15.000002" + y="11" + rx="0.15156493" + ry="0.065390877" /> + <rect + style="color:#000000;fill:#9b9b9b;fill-opacity:0.54970757;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:block;overflow:visible" + id="rect15690-7-7" + width="22.000004" + height="1" + x="15.000002" + y="13" + rx="0.15156493" + ry="0.065390877" /> + <rect + style="color:#000000;fill:#9b9b9b;fill-opacity:0.54970757;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:block;overflow:visible" + id="rect15692-6-5" + width="22.000004" + height="1" + x="15.000002" + y="15" + rx="0.15156493" + ry="0.065390877" /> + <rect + style="color:#000000;fill:#9b9b9b;fill-opacity:0.54970757;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:block;overflow:visible" + id="rect15694-7-3" + width="22.000004" + height="1" + x="15.000002" + y="17" + rx="0.15156493" + ry="0.065390877" /> + <rect + style="color:#000000;fill:#9b9b9b;fill-opacity:0.54970757;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:block;overflow:visible" + id="rect15696-3-8" + width="22.000004" + height="1" + x="15.000002" + y="19" + rx="0.15156493" + ry="0.065390877" /> + <rect + style="color:#000000;fill:#9b9b9b;fill-opacity:0.54970757;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:block;overflow:visible" + id="rect15698-6-8" + width="22.000004" + height="1" + x="15.000002" + y="21" + rx="0.15156493" + ry="0.065390877" /> + <rect + style="color:#000000;fill:#9b9b9b;fill-opacity:0.54970757;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:block;overflow:visible" + id="rect15700-5-3" + width="22.000004" + height="1" + x="15.000002" + y="23" + rx="0.15156493" + ry="0.065390877" /> + <rect + style="color:#000000;fill:#9b9b9b;fill-opacity:0.54970757;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:block;overflow:visible" + id="rect15732-6-1" + width="9.9000053" + height="1" + x="14.999992" + y="25" + rx="0.068204239" + ry="0.065390877" /> + <rect + style="color:#000000;fill:#9b9b9b;fill-opacity:0.54970757;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:block;overflow:visible" + id="rect15736-3-8" + width="22.000004" + height="1" + x="14.999992" + y="29" + rx="0.15156493" + ry="0.065390877" /> + <rect + style="color:#000000;fill:#9b9b9b;fill-opacity:0.54970757;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:block;overflow:visible" + id="rect15738-9-9" + width="22.000004" + height="1" + x="14.999992" + y="31" + rx="0.15156493" + ry="0.065390877" /> + <rect + style="color:#000000;fill:#9b9b9b;fill-opacity:0.54970757;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:block;overflow:visible" + id="rect15740-4-6" + width="22.000004" + height="1" + x="14.999992" + y="33" + rx="0.15156493" + ry="0.065390877" /> + <rect + style="color:#000000;fill:#9b9b9b;fill-opacity:0.54970757;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:block;overflow:visible" + id="rect15742-8-4" + width="22.000004" + height="1" + x="14.999992" + y="35" + rx="0.15156493" + ry="0.065390877" /> + <rect + style="color:#000000;fill:#9b9b9b;fill-opacity:0.54970757;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:block;overflow:visible" + id="rect15744-1-3" + width="15.400014" + height="1" + x="14.999992" + y="37" + rx="0.10609552" + ry="0.065390877" /> + </g> + </g> + </g> + </g> + <g + id="g4500-1-3-9" + transform="matrix(6.0278296,0,0,7.3216608,899.61914,584.01585)"> + <g + inkscape:label="Shadow" + id="layer6-7-0-4" /> + <g + id="layer1-7-2-4-6" + inkscape:label="Base" + style="display:inline" /> + <g + style="display:inline" + inkscape:label="Text" + id="layer5-7-4-9"> + <g + transform="matrix(0.388981,0,0,0.327274,-1.220361,0.172154)" + id="g3161-2-4-2"> + <path + sodipodi:type="arc" + style="opacity:0.7836257;color:#000000;fill:url(#radialGradient3195-8-2-3);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2;marker:none;visibility:visible;display:inline;overflow:visible" + id="path3667-2-4-2" + sodipodi:cx="24.306795" + sodipodi:cy="42.07798" + sodipodi:rx="15.821514" + sodipodi:ry="4.5078058" + d="m 40.128309,42.07798 c 0,2.489592 -7.083533,4.507806 -15.821514,4.507806 -8.737981,0 -15.821514,-2.018214 -15.821514,-4.507806 0,-2.489592 7.083533,-4.507806 15.821514,-4.507806 8.737981,0 15.821514,2.018214 15.821514,4.507806 z" + transform="translate(0,0.707108)" /> + <rect + style="color:#000000;fill:url(#radialGradient3197-4-0-0);fill-opacity:1;fill-rule:nonzero;stroke:url(#radialGradient3199-9-0-8);stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dashoffset:0;marker:none;visibility:visible;display:block;overflow:visible" + id="rect15391-6-7-4" + width="34.875" + height="40.920494" + x="6.6035528" + y="3.6464462" + ry="1.1490486" /> + <rect + style="color:#000000;fill:none;stroke:url(#radialGradient3201-8-8-6);stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dashoffset:0;marker:none;visibility:visible;display:block;overflow:visible" + id="rect15660-1-6-7" + width="32.775887" + height="38.946384" + x="7.6660538" + y="4.5839462" + ry="0.14904857" + rx="0.14904857" /> + <g + style="display:inline" + transform="translate(0.646447,-0.03798933)" + id="g2270-0-3-7"> + <g + id="g1440-6-1-5" + style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-miterlimit:4" + transform="matrix(0.229703,0,0,0.229703,4.967081,4.244972)"> + <radialGradient + id="radialGradient1442-1-7-4" + cx="20.892099" + cy="114.5684" + r="5.256" + fx="20.892099" + fy="114.5684" + gradientUnits="userSpaceOnUse"> + <stop + offset="0" + style="stop-color:#F0F0F0" + id="stop1444-5-5-8" /> + <stop + offset="1" + style="stop-color:#474747" + id="stop1446-9-9-1" /> + </radialGradient> + <path + style="stroke:none" + d="m 23.428,113.07 c 0,1.973 -1.6,3.572 -3.573,3.572 -1.974,0 -3.573,-1.6 -3.573,-3.572 0,-1.974 1.6,-3.573 3.573,-3.573 1.973,0 3.573,1.6 3.573,3.573 z" + id="path1448-4-6-2" + inkscape:connector-curvature="0" /> + <radialGradient + id="radialGradient1450-9-2-8" + cx="20.892099" + cy="64.567902" + r="5.257" + fx="20.892099" + fy="64.567902" + gradientUnits="userSpaceOnUse"> + <stop + offset="0" + style="stop-color:#F0F0F0" + id="stop1452-0-1-9" /> + <stop + offset="1" + style="stop-color:#474747" + id="stop1454-9-7-3" /> + </radialGradient> + <path + style="stroke:none" + d="m 23.428,63.07 c 0,1.973 -1.6,3.573 -3.573,3.573 -1.974,0 -3.573,-1.6 -3.573,-3.573 0,-1.974 1.6,-3.573 3.573,-3.573 1.973,0 3.573,1.6 3.573,3.573 z" + id="path1456-1-8-6" + inkscape:connector-curvature="0" /> + </g> + <path + style="fill:url(#radialGradient3203-6-1-3);fill-rule:nonzero;stroke:none" + d="m 9.9950109,29.952326 c 0,0.453204 -0.3675248,0.820499 -0.8207288,0.820499 -0.4534338,0 -0.8207289,-0.367524 -0.8207289,-0.820499 0,-0.453434 0.3675248,-0.820729 0.8207289,-0.820729 0.453204,0 0.8207288,0.367525 0.8207288,0.820729 z" + id="path15570-7-5-8" + inkscape:connector-curvature="0" /> + <path + style="fill:url(#radialGradient3205-0-4-5);fill-rule:nonzero;stroke:none" + d="m 9.9950109,18.467176 c 0,0.453204 -0.3675248,0.820729 -0.8207288,0.820729 -0.4534338,0 -0.8207289,-0.367525 -0.8207289,-0.820729 0,-0.453434 0.3675248,-0.820729 0.8207289,-0.820729 0.453204,0 0.8207288,0.367525 0.8207288,0.820729 z" + id="path15577-7-7-0" + inkscape:connector-curvature="0" /> + </g> + <path + style="fill:none;stroke:#000000;stroke-width:0.98855311;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:0.01754384;display:inline" + d="m 11.505723,5.4942766 0,37.9065924" + id="path15672-1-4-2" + sodipodi:nodetypes="cc" + inkscape:connector-curvature="0" /> + <path + style="fill:none;stroke:#ffffff;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:0.20467828;display:inline" + d="m 12.5,5.0205154 0,38.0177126" + id="path15674-1-1-1" + sodipodi:nodetypes="cc" + inkscape:connector-curvature="0" /> + <g + transform="matrix(0.909091,0,0,1,2.363628,0)" + id="g2253-5-8-0"> + <rect + style="color:#000000;fill:#9b9b9b;fill-opacity:0.54970757;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:block;overflow:visible" + id="rect15686-9-5-5" + width="22.000004" + height="1" + x="15.000002" + y="9" + rx="0.15156493" + ry="0.065390877" /> + <rect + style="color:#000000;fill:#9b9b9b;fill-opacity:0.54970757;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:block;overflow:visible" + id="rect15688-7-9-1" + width="22.000004" + height="1" + x="15.000002" + y="11" + rx="0.15156493" + ry="0.065390877" /> + <rect + style="color:#000000;fill:#9b9b9b;fill-opacity:0.54970757;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:block;overflow:visible" + id="rect15690-7-7-1" + width="22.000004" + height="1" + x="15.000002" + y="13" + rx="0.15156493" + ry="0.065390877" /> + <rect + style="color:#000000;fill:#9b9b9b;fill-opacity:0.54970757;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:block;overflow:visible" + id="rect15692-6-5-0" + width="22.000004" + height="1" + x="15.000002" + y="15" + rx="0.15156493" + ry="0.065390877" /> + <rect + style="color:#000000;fill:#9b9b9b;fill-opacity:0.54970757;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:block;overflow:visible" + id="rect15694-7-3-8" + width="22.000004" + height="1" + x="15.000002" + y="17" + rx="0.15156493" + ry="0.065390877" /> + <rect + style="color:#000000;fill:#9b9b9b;fill-opacity:0.54970757;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:block;overflow:visible" + id="rect15696-3-8-5" + width="22.000004" + height="1" + x="15.000002" + y="19" + rx="0.15156493" + ry="0.065390877" /> + <rect + style="color:#000000;fill:#9b9b9b;fill-opacity:0.54970757;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:block;overflow:visible" + id="rect15698-6-8-0" + width="22.000004" + height="1" + x="15.000002" + y="21" + rx="0.15156493" + ry="0.065390877" /> + <rect + style="color:#000000;fill:#9b9b9b;fill-opacity:0.54970757;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:block;overflow:visible" + id="rect15700-5-3-6" + width="22.000004" + height="1" + x="15.000002" + y="23" + rx="0.15156493" + ry="0.065390877" /> + <rect + style="color:#000000;fill:#9b9b9b;fill-opacity:0.54970757;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:block;overflow:visible" + id="rect15732-6-1-4" + width="9.9000053" + height="1" + x="14.999992" + y="25" + rx="0.068204239" + ry="0.065390877" /> + <rect + style="color:#000000;fill:#9b9b9b;fill-opacity:0.54970757;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:block;overflow:visible" + id="rect15736-3-8-6" + width="22.000004" + height="1" + x="14.999992" + y="29" + rx="0.15156493" + ry="0.065390877" /> + <rect + style="color:#000000;fill:#9b9b9b;fill-opacity:0.54970757;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:block;overflow:visible" + id="rect15738-9-9-2" + width="22.000004" + height="1" + x="14.999992" + y="31" + rx="0.15156493" + ry="0.065390877" /> + <rect + style="color:#000000;fill:#9b9b9b;fill-opacity:0.54970757;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:block;overflow:visible" + id="rect15740-4-6-5" + width="22.000004" + height="1" + x="14.999992" + y="33" + rx="0.15156493" + ry="0.065390877" /> + <rect + style="color:#000000;fill:#9b9b9b;fill-opacity:0.54970757;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:block;overflow:visible" + id="rect15742-8-4-8" + width="22.000004" + height="1" + x="14.999992" + y="35" + rx="0.15156493" + ry="0.065390877" /> + <rect + style="color:#000000;fill:#9b9b9b;fill-opacity:0.54970757;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:block;overflow:visible" + id="rect15744-1-3-6" + width="15.400014" + height="1" + x="14.999992" + y="37" + rx="0.10609552" + ry="0.065390877" /> + </g> + </g> + </g> + </g> + <g + id="layer1-3" + inkscape:label="Layer 1" + transform="matrix(5.9350697,0,0,5.5679597,867.91807,625.30765)"> + <g + transform="matrix(1,0,0,0.9887078,0,0.2484274)" + id="g3213"> + <path + transform="matrix(0.6655116,0,0,0.7692168,-5.0588175,-10.231117)" + d="m 40.65864,37.967922 c 0,2.172292 -7.400116,3.933282 -16.528622,3.933282 -9.128505,0 -16.5286214,-1.76099 -16.5286214,-3.933282 0,-2.172291 7.4001164,-3.933281 16.5286214,-3.933281 9.128506,0 16.528622,1.76099 16.528622,3.933281 z" + sodipodi:ry="3.9332814" + sodipodi:rx="16.528622" + sodipodi:cy="37.967922" + sodipodi:cx="24.130018" + id="path4475" + style="opacity:0.17112301;fill:url(#radialGradient3224);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible" + sodipodi:type="arc" /> + <path + style="fill:#dcdcdc;fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient3226);stroke-width:0.96507967;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible" + d="m 8.5612859,0.34327135 c -3.7448625,0 -6.7841713,3.34291215 -6.7841713,7.46185735 0,4.1189453 3.0393088,7.4618573 6.7841713,7.4618573 1.6009641,0 3.0141551,-0.700595 4.1748741,-1.721967 -0.0945,0.509549 -0.0359,1.030033 0.347907,1.396707 l 5.044641,4.821508 c 0.567502,0.542164 1.420559,0.471128 1.913484,-0.153064 0.492924,-0.624192 0.42834,-1.562462 -0.139163,-2.104626 l -5.04464,-4.821508 c -0.308974,-0.295179 -0.686882,-0.382571 -1.061114,-0.325261 0.914092,-1.271454 1.548182,-2.8080659 1.548182,-4.5536463 0,-4.1189452 -3.039309,-7.46185735 -6.7841711,-7.46185735 z m -0.034791,0.6205309 c 3.5149611,0 6.1156251,2.42352985 6.1156251,6.72652865 0,4.3901881 -2.676294,6.7265291 -6.1156251,6.7265291 -3.3601307,0 -6.1156247,-2.772282 -6.1156247,-6.7265291 0,-4.040493 2.6799511,-6.7265287 6.1156247,-6.72652865 z" + id="path2844" + sodipodi:nodetypes="csscccscccscczzzz" + inkscape:connector-curvature="0" /> + <path + id="path4430" + d="m 8.5499378,0.31128806 c -3.7569679,0 -6.8061015,3.35371814 -6.8061015,7.48597784 0,4.1322601 3.0491336,7.4859781 6.8061015,7.4859781 1.6061392,0 3.0238982,-0.70286 4.1883702,-1.727533 -0.0948,0.511196 -0.03602,1.033362 0.349031,1.401221 l 5.060947,4.837093 c 0.569337,0.543917 1.425152,0.472652 1.91967,-0.153558 0.494518,-0.626209 0.429724,-1.567513 -0.139612,-2.111429 l -5.060948,-4.837094 c -0.309972,-0.296132 -0.689102,-0.383808 -1.064544,-0.326312 0.917047,-1.275564 1.553187,-2.817143 1.553187,-4.5683661 0,-4.1322597 -3.049133,-7.48597784 -6.8061012,-7.48597784 z M 8.5150347,1.9236525 c 2.8899753,1e-7 5.2354623,2.5797832 5.2354623,5.7584447 0,3.1786618 -2.345487,5.7584438 -5.2354623,5.7584438 -2.8899755,0 -5.2354627,-2.579782 -5.2354627,-5.7584438 1e-7,-3.1786615 2.3454872,-5.7584447 5.2354627,-5.7584447 z" + style="fill:#dcdcdc;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.00000036;marker:none;visibility:visible;display:inline;overflow:visible" + inkscape:connector-curvature="0" /> + <path + sodipodi:nodetypes="ccccc" + id="path4438" + d="m 18.168039,19.793519 c -0.22024,-1.150385 0.64292,-2.434902 1.649045,-2.423239 0,0 -4.95091,-4.685224 -4.95091,-4.685224 -1.354916,-0.0287 -1.964423,1.150096 -1.737735,2.327869 l 5.0396,4.780594 z" + style="fill:url(#linearGradient3228);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible" + inkscape:connector-curvature="0" /> + <path + transform="matrix(0.5731738,0,0,0.6304294,-1.5853926,-4.3735706)" + d="m 28.549437,18.920233 c 0,6.101942 -4.946602,11.048544 -11.048544,11.048544 -6.101943,0 -11.0485443,-4.946602 -11.0485443,-11.048544 0,-6.101943 4.9466013,-11.0485442 11.0485443,-11.0485442 6.101942,0 11.048544,4.9466012 11.048544,11.0485442 z" + sodipodi:ry="11.048544" + sodipodi:rx="11.048544" + sodipodi:cy="18.920233" + sodipodi:cx="17.500893" + id="path4450" + style="fill:none;stroke:url(#linearGradient3230);stroke-width:0.8027336;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible" + sodipodi:type="arc" /> + <path + sodipodi:type="arc" + style="fill:url(#radialGradient3232);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible" + id="path4485" + sodipodi:cx="24.130018" + sodipodi:cy="37.967922" + sodipodi:rx="16.528622" + sodipodi:ry="3.9332814" + d="m 40.65864,37.967922 c 0,2.172292 -7.400116,3.933282 -16.528622,3.933282 -9.128505,0 -16.5286214,-1.76099 -16.5286214,-3.933282 0,-2.172291 7.4001164,-3.933281 16.5286214,-3.933281 9.128506,0 16.528622,1.76099 16.528622,3.933281 z" + transform="matrix(0.2290242,0,0,0.3085091,4.1194028,6.6568292)" /> + <rect + transform="matrix(0.7209552,0.6929817,-0.6127617,0.7902677,0,0)" + ry="0.91988331" + rx="1.0267676" + y="-0.82936758" + x="18.625082" + height="2.1635909" + width="9.1536846" + id="rect4495" + style="opacity:0.43315507;fill:none;stroke:#ffffff;stroke-width:0.48389873;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible" /> + <path + transform="matrix(0.6435107,0,0,0.7077924,-2.8732256,-5.4474068)" + d="m 25.897786,18.478292 c 0,4.588661 -3.719844,8.308506 -8.308505,8.308506 -4.588661,0 -8.308505,-3.719845 -8.308505,-8.308506 0,-4.58866 3.719844,-8.308505 8.308505,-8.308505 4.588661,0 8.308505,3.719845 8.308505,8.308505 z" + sodipodi:ry="8.3085051" + sodipodi:rx="8.3085051" + sodipodi:cy="18.478292" + sodipodi:cx="17.589281" + id="path4452" + style="fill:url(#radialGradient3234);fill-opacity:1;fill-rule:evenodd;stroke:#093288;stroke-width:0.71499395;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dashoffset:0;marker:none;visibility:visible" + sodipodi:type="arc" /> + <path + id="path4462" + d="M 8.599769,2.0802586 C 6.0222861,1.9592439 3.832837,3.7642898 3.7065327,6.1143856 3.6700554,6.7931036 3.8445229,7.4273551 4.1241764,8.0114996 4.7328427,8.2489207 5.3836918,8.4215706 6.0825624,8.4543832 9.1368601,8.5977848 11.694035,6.5183369 12.029878,3.7854215 11.222754,2.822084 10.028909,2.1473578 8.599769,2.0802586 z" + style="opacity:0.40248964;fill:url(#radialGradient3236);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible" + inkscape:connector-curvature="0" /> + </g> + </g> + <path + sodipodi:nodetypes="cccccccccccccccc" + id="path853-1" + d="m 464.23207,653.04219 c -34.40454,-1.53163 -90.63387,-41.71387 -85.64033,-70.26908 6.67877,-35.80898 42.87928,-56.14669 75.76112,-34.92309 -21.84275,-19.61883 -46.08051,-72.07973 13.91159,-108.99955 45.25043,-23.84757 83.22642,24.41021 82.095,40.65256 -9.21279,-29.75938 57.66336,-113.47326 102.62959,-84.87137 46.80339,36.24004 17.31616,135.11373 -15.91395,143.16054 48.11614,-14.8819 73.56575,88.22109 5.14343,98.78365 31.12639,-11.18088 76.84163,59.18596 69.11249,96.05785 -6.80494,45.87748 -53.47616,45.87135 -68.26068,42.25172 10.10803,33.50757 30.40849,85.45334 -9.98582,114.19371 -39.06863,21.29904 -87.01923,16.89488 -104.87548,-2.61617 -17.35187,-21.50291 -20.49471,-46.83332 -1.59692,-78.99566 -15.53749,25.58341 -79.37443,18.32339 -96.49679,-3.52328 -19.46083,-24.90454 -27.36788,-56.62111 -24.2976,-86.28737 1.1457,-24.28379 20.548,-64.75524 58.41433,-64.61446 z" + style="opacity:0.153;fill:#1c2bb1;fill-opacity:1;fill-rule:evenodd;stroke:none;filter:url(#filter6431)" + inkscape:connector-curvature="0" /> + <path + sodipodi:nodetypes="cccccccccccccccc" + id="path853" + d="m 454.6058,645.64132 c -34.40454,-1.53163 -90.63387,-41.71387 -85.64033,-70.26908 6.67877,-35.80898 42.87928,-56.14669 75.76112,-34.92309 -21.84275,-19.61883 -46.08051,-72.07973 13.91159,-108.99955 45.25043,-23.84757 83.22642,24.41021 82.095,40.65256 -9.21279,-29.75938 57.66336,-113.47326 102.62959,-84.87137 46.80339,36.24004 17.31616,135.11373 -15.91395,143.16054 48.11614,-14.8819 73.56575,88.22109 5.14343,98.78365 31.12639,-11.18088 76.84163,59.18596 69.11249,96.05785 -6.80494,45.87748 -53.47616,45.87135 -68.26068,42.25172 10.10803,33.50757 30.40849,85.45334 -9.98582,114.19371 -39.06863,21.29904 -87.01923,16.89488 -104.87548,-2.61617 -17.35187,-21.50291 -20.49471,-46.83332 -1.59692,-78.99566 -15.53749,25.58341 -79.37443,18.32339 -96.49679,-3.52328 -19.46083,-24.90454 -27.36788,-56.62111 -24.2976,-86.28737 1.1457,-24.28379 20.548,-64.75524 58.41433,-64.61446 z" + style="fill:url(#linearGradient854);fill-rule:evenodd;stroke:#000000;stroke-width:3.42814374;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none" + inkscape:connector-curvature="0" /> + <g + id="g5722" + transform="translate(-381.08637,-43.436559)"> + <path + inkscape:connector-curvature="0" + id="path5647-1" + d="m 669.99529,844.65261 c 83.15229,-83.1523 83.15229,-83.1523 83.15229,-83.1523" + style="opacity:0.90000006;fill:none;stroke:#030000;stroke-width:5;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" /> + <path + inkscape:connector-curvature="0" + id="path5649-2" + d="m 753.88771,760.96455 c 0,16.66751 0,16.66751 0,16.66751" + style="opacity:0.90000006;fill:none;stroke:#030000;stroke-width:5;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" /> + <path + inkscape:connector-curvature="0" + id="path5649-8-9" + d="m 753.78309,760.84726 c -16.6675,0 -16.6675,0 -16.6675,0" + style="opacity:0.90000006;fill:none;stroke:#030000;stroke-width:5;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" /> + </g> + <g + id="g5757" + transform="translate(-598.83517,-151.25004)"> + <path + inkscape:connector-curvature="0" + id="path5647-8" + d="M 802.29517,742.83264 C 942.84625,777.0538 942.84625,777.0538 942.84625,777.0538" + style="opacity:0.90000006;fill:none;stroke:#030000;stroke-width:5;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" /> + <path + inkscape:connector-curvature="0" + id="path5649-0" + d="M 942.20503,775.99548 C 932.40327,762.5147 932.40327,762.5147 932.40327,762.5147" + style="opacity:0.90000006;fill:none;stroke:#030000;stroke-width:5;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" /> + <path + inkscape:connector-curvature="0" + id="path5649-8-92" + d="m 942.18939,778.15187 c -13.48077,9.80175 -13.48077,9.80175 -13.48077,9.80175" + style="opacity:0.90000006;fill:none;stroke:#030000;stroke-width:5;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" /> + </g> + <g + id="g5915" + transform="translate(-68,0)"> + <path + inkscape:connector-curvature="0" + id="path5647-1-1" + d="m 250.24339,924.91621 c -1e-5,-117.59511 -1e-5,-117.59511 -1e-5,-117.59511" + style="fill:none;stroke:#ffffff;stroke-width:5;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" /> + <path + inkscape:connector-curvature="0" + id="path5647-1-1-4" + d="m 225.79828,952.17492 c -1e-5,-145.09639 -1e-5,-145.09639 -1e-5,-145.09639" + style="fill:none;stroke:#ffffff;stroke-width:5;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" /> + <g + transform="translate(-4,0)" + id="g5834"> + <path + style="fill:none;stroke:#ffffff;stroke-width:5;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" + d="m 254.29713,807.35861 c 7.63347,8.13855 7.63347,8.13855 7.63347,8.13855" + id="path5649-2-8" + inkscape:connector-curvature="0" /> + <path + style="fill:none;stroke:#ffffff;stroke-width:5;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" + d="m 254.18314,807.10607 c -7.63347,8.13855 -7.63347,8.13855 -7.63347,8.13855" + id="path5649-2-8-1" + inkscape:connector-curvature="0" /> + </g> + <g + id="g5834-6" + transform="translate(-28.378807,-0.1262667)"> + <path + style="fill:none;stroke:#ffffff;stroke-width:5;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" + d="m 254.29713,807.35861 c 7.63347,8.13855 7.63347,8.13855 7.63347,8.13855" + id="path5649-2-8-3" + inkscape:connector-curvature="0" /> + <path + style="fill:none;stroke:#ffffff;stroke-width:5;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" + d="m 254.18314,807.10607 c -7.63347,8.13855 -7.63347,8.13855 -7.63347,8.13855" + id="path5649-2-8-1-8" + inkscape:connector-curvature="0" /> + </g> + <path + inkscape:connector-curvature="0" + id="path5647-1-1-5" + d="m 275.07468,902.4815 c -10e-6,-95.09507 -10e-6,-95.09507 -10e-6,-95.09507" + style="fill:none;stroke:#ffffff;stroke-width:5;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" /> + <g + transform="translate(20.83129,0.06533)" + id="g5834-5"> + <path + style="fill:none;stroke:#ffffff;stroke-width:5;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" + d="m 254.29713,807.35861 c 7.63347,8.13855 7.63347,8.13855 7.63347,8.13855" + id="path5649-2-8-0" + inkscape:connector-curvature="0" /> + <path + style="fill:none;stroke:#ffffff;stroke-width:5;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" + d="m 254.18314,807.10607 c -7.63347,8.13855 -7.63347,8.13855 -7.63347,8.13855" + id="path5649-2-8-1-1" + inkscape:connector-curvature="0" /> + </g> + <path + inkscape:connector-curvature="0" + id="path5647-1-1-2" + d="m 300.24339,877.05907 c -10e-6,-69.73797 -10e-6,-69.73797 -10e-6,-69.73797" + style="fill:none;stroke:#ffffff;stroke-width:5;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" /> + <g + transform="translate(46,2.3999999e-6)" + id="g5834-64"> + <path + style="fill:none;stroke:#ffffff;stroke-width:5;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" + d="m 254.29713,807.35861 c 7.63347,8.13855 7.63347,8.13855 7.63347,8.13855" + id="path5649-2-8-8" + inkscape:connector-curvature="0" /> + <path + style="fill:none;stroke:#ffffff;stroke-width:5;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" + d="m 254.18314,807.10607 c -7.63347,8.13855 -7.63347,8.13855 -7.63347,8.13855" + id="path5649-2-8-1-5" + inkscape:connector-curvature="0" /> + </g> + <path + inkscape:connector-curvature="0" + id="path5647-1-1-6" + d="m 326.24339,852.41621 c -10e-6,-45.09511 -10e-6,-45.09511 -10e-6,-45.09511" + style="fill:none;stroke:#ffffff;stroke-width:5;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" /> + <g + transform="translate(72,2.3999999e-6)" + id="g5834-2"> + <path + style="fill:none;stroke:#ffffff;stroke-width:5;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" + d="m 254.29713,807.35861 c 7.63347,8.13855 7.63347,8.13855 7.63347,8.13855" + id="path5649-2-8-5" + inkscape:connector-curvature="0" /> + <path + style="fill:none;stroke:#ffffff;stroke-width:5;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" + d="m 254.18314,807.10607 c -7.63347,8.13855 -7.63347,8.13855 -7.63347,8.13855" + id="path5649-2-8-1-2" + inkscape:connector-curvature="0" /> + </g> + </g> + <g + transform="translate(-154.9793,-208.42947)" + id="g5915-6"> + <path + inkscape:connector-curvature="0" + id="path5647-1-1-9" + d="m 250.24339,924.91621 c -1e-5,-117.59511 -1e-5,-117.59511 -1e-5,-117.59511" + style="fill:none;stroke:#ffffff;stroke-width:5;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" /> + <path + inkscape:connector-curvature="0" + id="path5647-1-1-4-1" + d="m 225.79828,952.17492 c -1e-5,-145.09639 -1e-5,-145.09639 -1e-5,-145.09639" + style="fill:none;stroke:#ffffff;stroke-width:5;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" /> + <g + transform="translate(-4,0)" + id="g5834-3"> + <path + style="fill:none;stroke:#ffffff;stroke-width:5;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" + d="m 254.29713,807.35861 c 7.63347,8.13855 7.63347,8.13855 7.63347,8.13855" + id="path5649-2-8-31" + inkscape:connector-curvature="0" /> + <path + style="fill:none;stroke:#ffffff;stroke-width:5;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" + d="m 254.18314,807.10607 c -7.63347,8.13855 -7.63347,8.13855 -7.63347,8.13855" + id="path5649-2-8-1-52" + inkscape:connector-curvature="0" /> + </g> + <g + id="g5834-6-6" + transform="translate(-28.378807,-0.1262667)"> + <path + style="fill:none;stroke:#ffffff;stroke-width:5;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" + d="m 254.29713,807.35861 c 7.63347,8.13855 7.63347,8.13855 7.63347,8.13855" + id="path5649-2-8-3-9" + inkscape:connector-curvature="0" /> + <path + style="fill:none;stroke:#ffffff;stroke-width:5;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" + d="m 254.18314,807.10607 c -7.63347,8.13855 -7.63347,8.13855 -7.63347,8.13855" + id="path5649-2-8-1-8-4" + inkscape:connector-curvature="0" /> + </g> + <path + inkscape:connector-curvature="0" + id="path5647-1-1-5-4" + d="m 275.07468,902.4815 c -10e-6,-95.09507 -10e-6,-95.09507 -10e-6,-95.09507" + style="fill:none;stroke:#ffffff;stroke-width:5;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" /> + <g + transform="translate(20.83129,0.06533)" + id="g5834-5-6"> + <path + style="fill:none;stroke:#ffffff;stroke-width:5;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" + d="m 254.29713,807.35861 c 7.63347,8.13855 7.63347,8.13855 7.63347,8.13855" + id="path5649-2-8-0-0" + inkscape:connector-curvature="0" /> + <path + style="fill:none;stroke:#ffffff;stroke-width:5;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" + d="m 254.18314,807.10607 c -7.63347,8.13855 -7.63347,8.13855 -7.63347,8.13855" + id="path5649-2-8-1-1-7" + inkscape:connector-curvature="0" /> + </g> + <path + inkscape:connector-curvature="0" + id="path5647-1-1-2-4" + d="m 300.24339,877.05907 c -10e-6,-69.73797 -10e-6,-69.73797 -10e-6,-69.73797" + style="fill:none;stroke:#ffffff;stroke-width:5;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" /> + <g + transform="translate(46,2.3999999e-6)" + id="g5834-64-3"> + <path + style="fill:none;stroke:#ffffff;stroke-width:5;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" + d="m 254.29713,807.35861 c 7.63347,8.13855 7.63347,8.13855 7.63347,8.13855" + id="path5649-2-8-8-7" + inkscape:connector-curvature="0" /> + <path + style="fill:none;stroke:#ffffff;stroke-width:5;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" + d="m 254.18314,807.10607 c -7.63347,8.13855 -7.63347,8.13855 -7.63347,8.13855" + id="path5649-2-8-1-5-9" + inkscape:connector-curvature="0" /> + </g> + <path + inkscape:connector-curvature="0" + id="path5647-1-1-6-0" + d="m 326.24339,852.41621 c -10e-6,-45.09511 -10e-6,-45.09511 -10e-6,-45.09511" + style="fill:none;stroke:#ffffff;stroke-width:5;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" /> + <g + transform="translate(72,2.3999999e-6)" + id="g5834-2-0"> + <path + style="fill:none;stroke:#ffffff;stroke-width:5;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" + d="m 254.29713,807.35861 c 7.63347,8.13855 7.63347,8.13855 7.63347,8.13855" + id="path5649-2-8-5-2" + inkscape:connector-curvature="0" /> + <path + style="fill:none;stroke:#ffffff;stroke-width:5;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" + d="m 254.18314,807.10607 c -7.63347,8.13855 -7.63347,8.13855 -7.63347,8.13855" + id="path5649-2-8-1-2-2" + inkscape:connector-curvature="0" /> + </g> + </g> + <g + transform="translate(-68.90787,-423.21518)" + id="g5915-69"> + <path + inkscape:connector-curvature="0" + id="path5647-1-1-0" + d="m 250.24339,924.91621 c -1e-5,-117.59511 -1e-5,-117.59511 -1e-5,-117.59511" + style="fill:none;stroke:#ffffff;stroke-width:5;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" /> + <path + inkscape:connector-curvature="0" + id="path5647-1-1-4-3" + d="m 225.79828,952.17492 c -1e-5,-145.09639 -1e-5,-145.09639 -1e-5,-145.09639" + style="fill:none;stroke:#ffffff;stroke-width:5;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" /> + <g + transform="translate(-4,0)" + id="g5834-55"> + <path + style="fill:none;stroke:#ffffff;stroke-width:5;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" + d="m 254.29713,807.35861 c 7.63347,8.13855 7.63347,8.13855 7.63347,8.13855" + id="path5649-2-8-87" + inkscape:connector-curvature="0" /> + <path + style="fill:none;stroke:#ffffff;stroke-width:5;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" + d="m 254.18314,807.10607 c -7.63347,8.13855 -7.63347,8.13855 -7.63347,8.13855" + id="path5649-2-8-1-17" + inkscape:connector-curvature="0" /> + </g> + <g + id="g5834-6-0" + transform="translate(-28.378807,-0.1262667)"> + <path + style="fill:none;stroke:#ffffff;stroke-width:5;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" + d="m 254.29713,807.35861 c 7.63347,8.13855 7.63347,8.13855 7.63347,8.13855" + id="path5649-2-8-3-6" + inkscape:connector-curvature="0" /> + <path + style="fill:none;stroke:#ffffff;stroke-width:5;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" + d="m 254.18314,807.10607 c -7.63347,8.13855 -7.63347,8.13855 -7.63347,8.13855" + id="path5649-2-8-1-8-0" + inkscape:connector-curvature="0" /> + </g> + <path + inkscape:connector-curvature="0" + id="path5647-1-1-5-41" + d="m 275.07468,902.4815 c -10e-6,-95.09507 -10e-6,-95.09507 -10e-6,-95.09507" + style="fill:none;stroke:#ffffff;stroke-width:5;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" /> + <g + transform="translate(20.83129,0.06533)" + id="g5834-5-3"> + <path + style="fill:none;stroke:#ffffff;stroke-width:5;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" + d="m 254.29713,807.35861 c 7.63347,8.13855 7.63347,8.13855 7.63347,8.13855" + id="path5649-2-8-0-02" + inkscape:connector-curvature="0" /> + <path + style="fill:none;stroke:#ffffff;stroke-width:5;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" + d="m 254.18314,807.10607 c -7.63347,8.13855 -7.63347,8.13855 -7.63347,8.13855" + id="path5649-2-8-1-1-9" + inkscape:connector-curvature="0" /> + </g> + <path + inkscape:connector-curvature="0" + id="path5647-1-1-2-6" + d="m 300.24339,877.05907 c -10e-6,-69.73797 -10e-6,-69.73797 -10e-6,-69.73797" + style="fill:none;stroke:#ffffff;stroke-width:5;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" /> + <g + transform="translate(46,2.3999999e-6)" + id="g5834-64-0"> + <path + style="fill:none;stroke:#ffffff;stroke-width:5;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" + d="m 254.29713,807.35861 c 7.63347,8.13855 7.63347,8.13855 7.63347,8.13855" + id="path5649-2-8-8-9" + inkscape:connector-curvature="0" /> + <path + style="fill:none;stroke:#ffffff;stroke-width:5;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" + d="m 254.18314,807.10607 c -7.63347,8.13855 -7.63347,8.13855 -7.63347,8.13855" + id="path5649-2-8-1-5-3" + inkscape:connector-curvature="0" /> + </g> + <path + inkscape:connector-curvature="0" + id="path5647-1-1-6-5" + d="m 326.24339,852.41621 c -10e-6,-45.09511 -10e-6,-45.09511 -10e-6,-45.09511" + style="fill:none;stroke:#ffffff;stroke-width:5;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" /> + <g + transform="translate(72,2.3999999e-6)" + id="g5834-2-4"> + <path + style="fill:none;stroke:#ffffff;stroke-width:5;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" + d="m 254.29713,807.35861 c 7.63347,8.13855 7.63347,8.13855 7.63347,8.13855" + id="path5649-2-8-5-3" + inkscape:connector-curvature="0" /> + <path + style="fill:none;stroke:#ffffff;stroke-width:5;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" + d="m 254.18314,807.10607 c -7.63347,8.13855 -7.63347,8.13855 -7.63347,8.13855" + id="path5649-2-8-1-2-6" + inkscape:connector-curvature="0" /> + </g> + </g> + <g + id="g5757-4" + transform="matrix(0.96592577,0.25881901,0.25881901,-0.96592577,-270.37522,1148.3182)" + style="stroke-width:10.00000095;stroke-miterlimit:4;stroke-dasharray:none"> + <g + id="g6147" + transform="matrix(0.90919541,0.41636968,-0.41636968,0.90919541,356.68251,-289.80107)"> + <path + sodipodi:nodetypes="cc" + style="opacity:0.90000006;fill:none;stroke:#030000;stroke-width:8.35892296;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" + d="m 844.88702,754.98458 c 98.46431,22.94404 97.08442,22.5743 97.08442,22.5743" + id="path5647-8-3" + inkscape:connector-curvature="0" /> + <path + style="opacity:0.90000006;fill:none;stroke:#030000;stroke-width:10.00000095;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" + d="M 942.20503,775.99548 C 932.40327,762.5147 932.40327,762.5147 932.40327,762.5147" + id="path5649-0-1" + inkscape:connector-curvature="0" /> + <path + style="opacity:0.90000006;fill:none;stroke:#030000;stroke-width:10.00000095;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" + d="m 942.18939,778.15187 c -13.48077,9.80175 -13.48077,9.80175 -13.48077,9.80175" + id="path5649-8-92-9" + inkscape:connector-curvature="0" /> + </g> + </g> + <g + id="g5722-1" + transform="matrix(1,0,0,-1,-382.79865,1227.6835)"> + <path + inkscape:connector-curvature="0" + id="path5647-1-0" + d="m 669.99529,844.65261 c 83.15229,-83.1523 83.15229,-83.1523 83.15229,-83.1523" + style="opacity:0.90000006;fill:none;stroke:#030000;stroke-width:5;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" /> + <path + inkscape:connector-curvature="0" + id="path5649-2-9" + d="m 753.88771,760.96455 c 0,16.66751 0,16.66751 0,16.66751" + style="opacity:0.90000006;fill:none;stroke:#030000;stroke-width:5;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" /> + <path + inkscape:connector-curvature="0" + id="path5649-8-9-4" + d="m 753.78309,760.84726 c -16.6675,0 -16.6675,0 -16.6675,0" + style="opacity:0.90000006;fill:none;stroke:#030000;stroke-width:5;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" /> + </g> + <g + inkscape:label="Layer 1" + id="layer1-74" + transform="matrix(2.985984,0,0,2.985984,799.15302,803.95774)"> + <g + transform="matrix(0.486246,0,0,0.481106,-0.9712,-0.678179)" + id="g1974"> + <path + sodipodi:type="arc" + style="color:#000000;fill:url(#radialGradient2003);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible" + id="path2452" + sodipodi:cx="24.218407" + sodipodi:cy="35.051105" + sodipodi:rx="16.882174" + sodipodi:ry="4.552" + d="m 41.10058,35.051105 c 0,2.514001 -7.558406,4.552001 -16.882173,4.552001 -9.323767,0 -16.8821739,-2.038 -16.8821739,-4.552001 0,-2.514 7.5584069,-4.552 16.8821739,-4.552 9.323767,0 16.882173,2.038 16.882173,4.552 z" + transform="matrix(1,0,0,1.368932,-1.978553,-13.61713)" /> + <path + sodipodi:type="arc" + style="color:#000000;fill:#adb0aa;fill-opacity:1;fill-rule:evenodd;stroke:#4b4d4a;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible" + id="path2407" + sodipodi:cx="-35.658386" + sodipodi:cy="29.716238" + sodipodi:rx="9.3944187" + sodipodi:ry="3.939595" + d="m -26.263968,29.716238 c 0,2.175778 -4.206024,3.939595 -9.394418,3.939595 -5.188394,0 -9.394419,-1.763817 -9.394419,-3.939595 0,-2.175778 4.206025,-3.939595 9.394419,-3.939595 5.188394,0 9.394418,1.763817 9.394418,3.939595 z" + transform="translate(57.53339,3.203427)" /> + <path + transform="matrix(0.940273,0,0,0.940273,55.40361,4.271194)" + d="m -26.263968,29.716238 c 0,2.175778 -4.206024,3.939595 -9.394418,3.939595 -5.188394,0 -9.394419,-1.763817 -9.394419,-3.939595 0,-2.175778 4.206025,-3.939595 9.394419,-3.939595 5.188394,0 9.394418,1.763817 9.394418,3.939595 z" + sodipodi:ry="3.939595" + sodipodi:rx="9.3944187" + sodipodi:cy="29.716238" + sodipodi:cx="-35.658386" + id="path1825" + style="color:#000000;fill:none;stroke:#7b7f7a;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible" + sodipodi:type="arc" /> + <path + sodipodi:type="arc" + style="color:#000000;fill:none;stroke:url(#linearGradient2005);stroke-width:0.68065339;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible" + id="path2983" + sodipodi:cx="-35.658386" + sodipodi:cy="29.716238" + sodipodi:rx="9.3944187" + sodipodi:ry="3.939595" + d="m -26.263968,29.716238 c 0,2.175778 -4.206024,3.939595 -9.394418,3.939595 -5.188394,0 -9.394419,-1.763817 -9.394419,-3.939595 0,-2.175778 4.206025,-3.939595 9.394419,-3.939595 5.188394,0 9.394418,1.763817 9.394418,3.939595 z" + transform="matrix(0.940273,0,0,0.940273,55.40361,3.521194)" /> + <path + sodipodi:nodetypes="ccccccccccccccccc" + style="fill:#d0d0d0;fill-opacity:1;fill-rule:evenodd;stroke:#979797;stroke-width:0.40000001;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1" + d="m 25.6875,28.766243 -0.0625,1 c 0,0 4.324108,3.599166 9,4.202507 2.337946,0.30167 4.753675,0.702412 6.75,1.1875 1.996325,0.485088 3.588356,1.119606 4.125,1.65625 0.310411,0.310411 0.451063,0.573639 0.5,0.78125 0.04894,0.207611 0.03822,0.354815 -0.09375,0.5625 -0.263933,0.41537 -1.079857,0.967652 -2.46875,1.40625 C 40.659715,40.439695 35.717076,41 28.875,41 l 0,1 c 6.895998,0 11.863665,-0.527671 14.84375,-1.46875 1.490042,-0.47054 2.524942,-1.015687 3.03125,-1.8125 C 47.003154,38.320344 47.107321,37.830301 47,37.375 46.892679,36.919699 46.615445,36.490445 46.21875,36.09375 45.34118,35.21618 43.681912,34.68731 41.625,34.1875 39.568088,33.68769 37.109264,33.273171 34.75,32.96875 30.031473,32.359908 25.6875,28.766243 25.6875,28.766243 z" + id="path2411" + inkscape:connector-curvature="0" /> + <path + transform="matrix(1,0,0,1.368932,-1.978553,-19.02126)" + d="m 41.10058,35.051105 c 0,2.514001 -7.558406,4.552001 -16.882173,4.552001 -9.323767,0 -16.8821739,-2.038 -16.8821739,-4.552001 0,-2.514 7.5584069,-4.552 16.8821739,-4.552 9.323767,0 16.882173,2.038 16.882173,4.552 z" + sodipodi:ry="4.552" + sodipodi:rx="16.882174" + sodipodi:cy="35.051105" + sodipodi:cx="24.218407" + id="path2462" + style="color:#000000;fill:url(#radialGradient2007);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible" + sodipodi:type="arc" /> + <rect + y="30.703611" + x="17.472397" + height="2.7400389" + width="9.0396729" + id="rect2699" + style="color:#000000;fill:url(#linearGradient2009);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.60872948;marker:none;visibility:visible;display:inline;overflow:visible" /> + <path + style="color:#000000;fill:url(#linearGradient2011);fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient2013);stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible" + d="m 7.0809024,1.6956221 29.5881946,0 c 0.911342,0 1.624147,0.5834818 1.666752,1.401587 l 1.332044,25.5781139 c 0.05821,1.117735 -0.901056,2.020305 -2.020305,2.020305 l -31.545176,0 c -1.1192491,0 -2.078514,-0.90257 -2.0203052,-2.020305 L 5.4141506,3.0972091 c 0.040284,-0.7735346 0.5475027,-1.401587 1.6667518,-1.401587 z" + id="rect2404" + sodipodi:nodetypes="cssssssss" + inkscape:connector-curvature="0" /> + <path + sodipodi:nodetypes="ccccc" + id="path2377" + d="m 8.4105348,4.3058272 -1.242195,22.0453168 27.6503892,0 L 33.483712,4.3992558 8.4105348,4.3058272 z" + style="fill:url(#linearGradient2015);fill-opacity:1;fill-rule:evenodd;stroke:#000079;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" + inkscape:connector-curvature="0" /> + <path + style="fill:none;stroke:url(#linearGradient2017);stroke-width:0.99618119;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:0.24840764" + d="m 6.1774331,28.735789 31.4284769,0" + id="path2393" + inkscape:connector-curvature="0" /> + <path + sodipodi:nodetypes="cssssssss" + id="path2397" + d="M 6.9145985,2.7063396 36.760101,2.6685383 c 0.283697,-3.593e-4 0.559302,0.2372498 0.582105,0.6525438 L 38.704098,28.12433 c 0.05804,1.057031 -0.539749,1.785871 -1.598371,1.785871 l -30.5239687,0 c -1.0586228,0 -1.5930144,-0.728791 -1.5358714,-1.785871 L 6.3699773,3.6301633 C 6.4086732,2.9143326 6.5363627,2.7068187 6.9145985,2.7063396 z" + style="color:#000000;fill:none;stroke:url(#linearGradient2019);stroke-width:0.99999964;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:0.70063692;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible" + inkscape:connector-curvature="0" /> + <path + sodipodi:nodetypes="ccccc" + style="opacity:0.53142856;fill:url(#linearGradient2021);fill-opacity:1;fill-rule:evenodd;stroke:none" + d="M 8.7115364,4.7463626 7.9090069,22.616693 C 18.953645,20.216063 19.33047,12.124494 33.063039,9.4699426 L 32.901567,4.8124267 8.7115364,4.7463626 z" + id="path2443" + inkscape:connector-curvature="0" /> + <path + transform="matrix(1.264398,0,0,1.291262,-6.216332,-4.000423)" + d="m 41.10058,35.051105 c 0,2.514001 -7.558406,4.552001 -16.882173,4.552001 -9.323767,0 -16.8821739,-2.038 -16.8821739,-4.552001 0,-2.514 7.5584069,-4.552 16.8821739,-4.552 9.323767,0 16.882173,2.038 16.882173,4.552 z" + sodipodi:ry="4.552" + sodipodi:rx="16.882174" + sodipodi:cy="35.051105" + sodipodi:cx="24.218407" + id="path2657" + style="color:#000000;fill:url(#radialGradient2023);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible" + sodipodi:type="arc" /> + <path + sodipodi:nodetypes="cssssssss" + id="path2409" + d="m 6.4621839,36.817452 31.0024061,0 c 1.119249,0 0.977355,0.271438 1.092227,0.612846 l 2.834646,8.42481 c 0.114872,0.341409 0.02702,0.612846 -1.092227,0.612846 l -36.6716978,0 c -1.1192491,0 -1.2070995,-0.271437 -1.0922275,-0.612846 l 2.8346457,-8.42481 c 0.114872,-0.341409 -0.027022,-0.612846 1.0922275,-0.612846 z" + style="color:#000000;fill:url(#linearGradient2025);fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient2027);stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible" + inkscape:connector-curvature="0" /> + <path + sodipodi:nodetypes="ccccccccc" + id="path2611" + d="m 6.3916892,38.829113 -1.7677669,5.126525 5.4800777,0 0.53033,-2.032932 14.849242,0 0.549679,2.075114 6.167835,0 -1.679378,-5.168707 -24.1300188,0 z" + style="fill:#7a7d77;fill-opacity:1;fill-rule:evenodd;stroke:none" + inkscape:connector-curvature="0" /> + <path + id="path2613" + d="m 11.076272,42.27626 -0.441942,1.679379 14.760854,0 -0.441942,-1.767767 -13.87697,0.08839 z" + style="fill:#777874;fill-opacity:1;fill-rule:evenodd;stroke:none" + inkscape:connector-curvature="0" /> + <path + style="color:#000000;fill:#777a75;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.25pt;marker:none;visibility:visible;display:inline;overflow:visible" + d="m 37.592776,38.829114 1.679379,5.038136 -5.480078,-0.08839 -1.502602,-4.861359 5.303301,-0.08839 z" + id="path2619" + inkscape:connector-curvature="0" /> + <path + id="path2615" + d="m 37.592776,38.298786 1.679379,5.038136 -5.480078,-0.08839 -1.502602,-4.861359 5.303301,-0.08839 z" + style="color:#000000;fill:url(#linearGradient2029);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.25pt;marker:none;visibility:visible;display:inline;overflow:visible" + inkscape:connector-curvature="0" /> + <path + style="fill:url(#linearGradient2031);fill-opacity:1;fill-rule:evenodd;stroke:none" + d="m 6.3916892,38.210397 -1.7677669,5.126525 5.4800777,0 0.53033,-2.032932 14.849242,0 0.549679,2.075114 6.167835,0 -1.679378,-5.168707 -24.1300188,0 z" + id="path2617" + sodipodi:nodetypes="ccccccccc" + inkscape:connector-curvature="0" /> + <path + style="color:#000000;fill:url(#linearGradient2033);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.25pt;marker:none;visibility:visible;display:inline;overflow:visible" + d="m 11.076272,41.745932 -0.441942,1.679379 14.760854,0 -0.441942,-1.767767 -13.87697,0.08839 z" + id="path2621" + inkscape:connector-curvature="0" /> + <path + style="color:#000000;fill:none;stroke:url(#linearGradient2035);stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible" + d="m 6.1278189,37.578116 31.8258151,0 2.637179,8.092563 -37.2610701,0 2.798076,-8.092563 z" + id="path2631" + sodipodi:nodetypes="ccccc" + inkscape:connector-curvature="0" /> + <path + transform="matrix(1.331237,0,0,0.658449,-10.41933,2.853866)" + d="m 35.620504,3.9384086 c 0,0.4637476 -0.375941,0.8396893 -0.839689,0.8396893 -0.463747,0 -0.839689,-0.3759417 -0.839689,-0.8396893 0,-0.4637476 0.375942,-0.8396893 0.839689,-0.8396893 0.463748,0 0.839689,0.3759417 0.839689,0.8396893 z" + sodipodi:ry="0.83968931" + sodipodi:rx="0.83968931" + sodipodi:cy="3.9384086" + sodipodi:cx="34.780815" + id="path2709" + style="color:#000000;fill:url(#linearGradient2037);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.5;marker:none;visibility:visible;display:inline;overflow:visible" + sodipodi:type="arc" /> + <path + sodipodi:type="arc" + style="color:#000000;fill:url(#linearGradient2039);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.5;marker:none;visibility:visible;display:inline;overflow:visible" + id="path2719" + sodipodi:cx="34.780815" + sodipodi:cy="3.9384086" + sodipodi:rx="0.83968931" + sodipodi:ry="0.83968931" + d="m 35.620504,3.9384086 c 0,0.4637476 -0.375941,0.8396893 -0.839689,0.8396893 -0.463747,0 -0.839689,-0.3759417 -0.839689,-0.8396893 0,-0.4637476 0.375942,-0.8396893 0.839689,-0.8396893 0.463748,0 0.839689,0.3759417 0.839689,0.8396893 z" + transform="matrix(1.331237,0,0,0.658449,-10.30573,4.959651)" /> + <path + transform="matrix(1.331237,0,0,0.658449,-10.19213,6.959651)" + d="m 35.620504,3.9384086 c 0,0.4637476 -0.375941,0.8396893 -0.839689,0.8396893 -0.463747,0 -0.839689,-0.3759417 -0.839689,-0.8396893 0,-0.4637476 0.375942,-0.8396893 0.839689,-0.8396893 0.463748,0 0.839689,0.3759417 0.839689,0.8396893 z" + sodipodi:ry="0.83968931" + sodipodi:rx="0.83968931" + sodipodi:cy="3.9384086" + sodipodi:cx="34.780815" + id="path2723" + style="color:#000000;fill:url(#linearGradient2041);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.5;marker:none;visibility:visible;display:inline;overflow:visible" + sodipodi:type="arc" /> + <path + sodipodi:type="arc" + style="color:#000000;fill:url(#linearGradient2043);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.5;marker:none;visibility:visible;display:inline;overflow:visible" + id="path2727" + sodipodi:cx="34.780815" + sodipodi:cy="3.9384086" + sodipodi:rx="0.83968931" + sodipodi:ry="0.83968931" + d="m 35.620504,3.9384086 c 0,0.4637476 -0.375941,0.8396893 -0.839689,0.8396893 -0.463747,0 -0.839689,-0.3759417 -0.839689,-0.8396893 0,-0.4637476 0.375942,-0.8396893 0.839689,-0.8396893 0.463748,0 0.839689,0.3759417 0.839689,0.8396893 z" + transform="matrix(1.331237,0,0,0.658449,-10.07853,8.959651)" /> + <path + transform="matrix(1.331237,0,0,0.658449,-9.96493,10.95965)" + d="m 35.620504,3.9384086 c 0,0.4637476 -0.375941,0.8396893 -0.839689,0.8396893 -0.463747,0 -0.839689,-0.3759417 -0.839689,-0.8396893 0,-0.4637476 0.375942,-0.8396893 0.839689,-0.8396893 0.463748,0 0.839689,0.3759417 0.839689,0.8396893 z" + sodipodi:ry="0.83968931" + sodipodi:rx="0.83968931" + sodipodi:cy="3.9384086" + sodipodi:cx="34.780815" + id="path2731" + style="color:#000000;fill:url(#linearGradient2045);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.5;marker:none;visibility:visible;display:inline;overflow:visible" + sodipodi:type="arc" /> + <path + id="text2735" + d="m 20,27.317666 0.281716,0 c 0.08376,1e-6 0.147985,0.01866 0.19266,0.05599 0.04497,0.03703 0.06745,0.08994 0.06745,0.158714 -1e-6,0.06907 -0.02248,0.122268 -0.06745,0.159595 -0.04467,0.03703 -0.108895,0.05555 -0.19266,0.05555 l -0.111981,0 0,0.22837 -0.169735,0 0,-0.658219 m 0.169735,0.123003 0,0.183843 0.0939,0 c 0.03292,0 0.05834,-0.0079 0.07627,-0.02381 0.01793,-0.01617 0.02689,-0.03894 0.02689,-0.06834 0,-0.02939 -0.009,-0.05202 -0.02689,-0.06789 -0.01793,-0.01587 -0.04335,-0.02381 -0.07627,-0.02381 l -0.0939,0 m 0.792244,-0.0119 c -0.05173,1e-6 -0.09185,0.01911 -0.120358,0.05731 -0.02851,0.03821 -0.04276,0.092 -0.04276,0.161359 0,0.06907 0.01425,0.122709 0.04276,0.160918 0.02851,0.03821 0.06863,0.05731 0.120358,0.05731 0.05202,0 0.09229,-0.0191 0.120799,-0.05731 0.02851,-0.03821 0.04276,-0.09185 0.04276,-0.160918 -10e-7,-0.06936 -0.01425,-0.123149 -0.04276,-0.161359 -0.02851,-0.03821 -0.06878,-0.05731 -0.120799,-0.05731 m 0,-0.123003 c 0.105808,1e-6 0.188692,0.03027 0.248651,0.09082 0.05996,0.06055 0.08994,0.144165 0.08994,0.250855 -1e-6,0.106397 -0.02998,0.189868 -0.08994,0.250414 -0.05996,0.06055 -0.142843,0.09082 -0.248651,0.09082 -0.105515,0 -0.188399,-0.03027 -0.248651,-0.09082 -0.05996,-0.06055 -0.08994,-0.144017 -0.08994,-0.250414 0,-0.10669 0.02998,-0.190309 0.08994,-0.250855 0.06025,-0.06055 0.143136,-0.09082 0.248651,-0.09082 m 0.466441,0.0119 0.189574,0 0.239393,0.451451 0,-0.451451 0.160918,0 0,0.658219 -0.189575,0 -0.239392,-0.451451 0,0.451451 -0.160918,0 0,-0.658219 m 0.663069,0 0.185606,0 0.149896,0.234543 0.149896,-0.234543 0.186048,0 -0.250856,0.380912 0,0.277307 -0.169735,0 0,-0.277307 -0.250855,-0.380912" + style="font-size:0.9029026px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;writing-mode:lr-tb;text-anchor:start;fill:#4a4a4a;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans" + inkscape:connector-curvature="0" /> + </g> + </g> + <g + inkscape:label="Layer 1" + id="layer1-74-4" + transform="matrix(2.985984,0,0,2.985984,880.29588,818.24344)"> + <g + transform="matrix(0.486246,0,0,0.481106,-0.9712,-0.678179)" + id="g1974-1"> + <path + sodipodi:type="arc" + style="color:#000000;fill:url(#radialGradient2003-1);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible" + id="path2452-6" + sodipodi:cx="24.218407" + sodipodi:cy="35.051105" + sodipodi:rx="16.882174" + sodipodi:ry="4.552" + d="m 41.10058,35.051105 c 0,2.514001 -7.558406,4.552001 -16.882173,4.552001 -9.323767,0 -16.8821739,-2.038 -16.8821739,-4.552001 0,-2.514 7.5584069,-4.552 16.8821739,-4.552 9.323767,0 16.882173,2.038 16.882173,4.552 z" + transform="matrix(1,0,0,1.368932,-1.978553,-13.61713)" /> + <path + sodipodi:type="arc" + style="color:#000000;fill:#adb0aa;fill-opacity:1;fill-rule:evenodd;stroke:#4b4d4a;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible" + id="path2407-4" + sodipodi:cx="-35.658386" + sodipodi:cy="29.716238" + sodipodi:rx="9.3944187" + sodipodi:ry="3.939595" + d="m -26.263968,29.716238 c 0,2.175778 -4.206024,3.939595 -9.394418,3.939595 -5.188394,0 -9.394419,-1.763817 -9.394419,-3.939595 0,-2.175778 4.206025,-3.939595 9.394419,-3.939595 5.188394,0 9.394418,1.763817 9.394418,3.939595 z" + transform="translate(57.53339,3.203427)" /> + <path + transform="matrix(0.940273,0,0,0.940273,55.40361,4.271194)" + d="m -26.263968,29.716238 c 0,2.175778 -4.206024,3.939595 -9.394418,3.939595 -5.188394,0 -9.394419,-1.763817 -9.394419,-3.939595 0,-2.175778 4.206025,-3.939595 9.394419,-3.939595 5.188394,0 9.394418,1.763817 9.394418,3.939595 z" + sodipodi:ry="3.939595" + sodipodi:rx="9.3944187" + sodipodi:cy="29.716238" + sodipodi:cx="-35.658386" + id="path1825-3" + style="color:#000000;fill:none;stroke:#7b7f7a;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible" + sodipodi:type="arc" /> + <path + sodipodi:type="arc" + style="color:#000000;fill:none;stroke:url(#linearGradient2005-3);stroke-width:0.68065339;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible" + id="path2983-5" + sodipodi:cx="-35.658386" + sodipodi:cy="29.716238" + sodipodi:rx="9.3944187" + sodipodi:ry="3.939595" + d="m -26.263968,29.716238 c 0,2.175778 -4.206024,3.939595 -9.394418,3.939595 -5.188394,0 -9.394419,-1.763817 -9.394419,-3.939595 0,-2.175778 4.206025,-3.939595 9.394419,-3.939595 5.188394,0 9.394418,1.763817 9.394418,3.939595 z" + transform="matrix(0.940273,0,0,0.940273,55.40361,3.521194)" /> + <path + sodipodi:nodetypes="ccccccccccccccccc" + style="fill:#d0d0d0;fill-opacity:1;fill-rule:evenodd;stroke:#979797;stroke-width:0.40000001;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1" + d="m 25.6875,28.766243 -0.0625,1 c 0,0 4.324108,3.599166 9,4.202507 2.337946,0.30167 4.753675,0.702412 6.75,1.1875 1.996325,0.485088 3.588356,1.119606 4.125,1.65625 0.310411,0.310411 0.451063,0.573639 0.5,0.78125 0.04894,0.207611 0.03822,0.354815 -0.09375,0.5625 -0.263933,0.41537 -1.079857,0.967652 -2.46875,1.40625 C 40.659715,40.439695 35.717076,41 28.875,41 l 0,1 c 6.895998,0 11.863665,-0.527671 14.84375,-1.46875 1.490042,-0.47054 2.524942,-1.015687 3.03125,-1.8125 C 47.003154,38.320344 47.107321,37.830301 47,37.375 46.892679,36.919699 46.615445,36.490445 46.21875,36.09375 45.34118,35.21618 43.681912,34.68731 41.625,34.1875 39.568088,33.68769 37.109264,33.273171 34.75,32.96875 30.031473,32.359908 25.6875,28.766243 25.6875,28.766243 z" + id="path2411-4" + inkscape:connector-curvature="0" /> + <path + transform="matrix(1,0,0,1.368932,-1.978553,-19.02126)" + d="m 41.10058,35.051105 c 0,2.514001 -7.558406,4.552001 -16.882173,4.552001 -9.323767,0 -16.8821739,-2.038 -16.8821739,-4.552001 0,-2.514 7.5584069,-4.552 16.8821739,-4.552 9.323767,0 16.882173,2.038 16.882173,4.552 z" + sodipodi:ry="4.552" + sodipodi:rx="16.882174" + sodipodi:cy="35.051105" + sodipodi:cx="24.218407" + id="path2462-8" + style="color:#000000;fill:url(#radialGradient2007-9);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible" + sodipodi:type="arc" /> + <rect + y="30.703611" + x="17.472397" + height="2.7400389" + width="9.0396729" + id="rect2699-7" + style="color:#000000;fill:url(#linearGradient2009-3);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.60872948;marker:none;visibility:visible;display:inline;overflow:visible" /> + <path + style="color:#000000;fill:url(#linearGradient2011-7);fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient2013-8);stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible" + d="m 7.0809024,1.6956221 29.5881946,0 c 0.911342,0 1.624147,0.5834818 1.666752,1.401587 l 1.332044,25.5781139 c 0.05821,1.117735 -0.901056,2.020305 -2.020305,2.020305 l -31.545176,0 c -1.1192491,0 -2.078514,-0.90257 -2.0203052,-2.020305 L 5.4141506,3.0972091 c 0.040284,-0.7735346 0.5475027,-1.401587 1.6667518,-1.401587 z" + id="rect2404-3" + sodipodi:nodetypes="cssssssss" + inkscape:connector-curvature="0" /> + <path + sodipodi:nodetypes="ccccc" + id="path2377-3" + d="m 8.4105348,4.3058272 -1.242195,22.0453168 27.6503892,0 L 33.483712,4.3992558 8.4105348,4.3058272 z" + style="fill:url(#linearGradient2015-8);fill-opacity:1;fill-rule:evenodd;stroke:#000079;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" + inkscape:connector-curvature="0" /> + <path + style="fill:none;stroke:url(#linearGradient2017-3);stroke-width:0.99618119;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:0.24840764" + d="m 6.1774331,28.735789 31.4284769,0" + id="path2393-5" + inkscape:connector-curvature="0" /> + <path + sodipodi:nodetypes="cssssssss" + id="path2397-0" + d="M 6.9145985,2.7063396 36.760101,2.6685383 c 0.283697,-3.593e-4 0.559302,0.2372498 0.582105,0.6525438 L 38.704098,28.12433 c 0.05804,1.057031 -0.539749,1.785871 -1.598371,1.785871 l -30.5239687,0 c -1.0586228,0 -1.5930144,-0.728791 -1.5358714,-1.785871 L 6.3699773,3.6301633 C 6.4086732,2.9143326 6.5363627,2.7068187 6.9145985,2.7063396 z" + style="color:#000000;fill:none;stroke:url(#linearGradient2019-5);stroke-width:0.99999964;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:0.70063692;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible" + inkscape:connector-curvature="0" /> + <path + sodipodi:nodetypes="ccccc" + style="opacity:0.53142856;fill:url(#linearGradient2021-8);fill-opacity:1;fill-rule:evenodd;stroke:none" + d="M 8.7115364,4.7463626 7.9090069,22.616693 C 18.953645,20.216063 19.33047,12.124494 33.063039,9.4699426 L 32.901567,4.8124267 8.7115364,4.7463626 z" + id="path2443-1" + inkscape:connector-curvature="0" /> + <path + transform="matrix(1.264398,0,0,1.291262,-6.216332,-4.000423)" + d="m 41.10058,35.051105 c 0,2.514001 -7.558406,4.552001 -16.882173,4.552001 -9.323767,0 -16.8821739,-2.038 -16.8821739,-4.552001 0,-2.514 7.5584069,-4.552 16.8821739,-4.552 9.323767,0 16.882173,2.038 16.882173,4.552 z" + sodipodi:ry="4.552" + sodipodi:rx="16.882174" + sodipodi:cy="35.051105" + sodipodi:cx="24.218407" + id="path2657-4" + style="color:#000000;fill:url(#radialGradient2023-3);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible" + sodipodi:type="arc" /> + <path + sodipodi:nodetypes="cssssssss" + id="path2409-5" + d="m 6.4621839,36.817452 31.0024061,0 c 1.119249,0 0.977355,0.271438 1.092227,0.612846 l 2.834646,8.42481 c 0.114872,0.341409 0.02702,0.612846 -1.092227,0.612846 l -36.6716978,0 c -1.1192491,0 -1.2070995,-0.271437 -1.0922275,-0.612846 l 2.8346457,-8.42481 c 0.114872,-0.341409 -0.027022,-0.612846 1.0922275,-0.612846 z" + style="color:#000000;fill:url(#linearGradient2025-6);fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient2027-7);stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible" + inkscape:connector-curvature="0" /> + <path + sodipodi:nodetypes="ccccccccc" + id="path2611-7" + d="m 6.3916892,38.829113 -1.7677669,5.126525 5.4800777,0 0.53033,-2.032932 14.849242,0 0.549679,2.075114 6.167835,0 -1.679378,-5.168707 -24.1300188,0 z" + style="fill:#7a7d77;fill-opacity:1;fill-rule:evenodd;stroke:none" + inkscape:connector-curvature="0" /> + <path + id="path2613-0" + d="m 11.076272,42.27626 -0.441942,1.679379 14.760854,0 -0.441942,-1.767767 -13.87697,0.08839 z" + style="fill:#777874;fill-opacity:1;fill-rule:evenodd;stroke:none" + inkscape:connector-curvature="0" /> + <path + style="color:#000000;fill:#777a75;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.25pt;marker:none;visibility:visible;display:inline;overflow:visible" + d="m 37.592776,38.829114 1.679379,5.038136 -5.480078,-0.08839 -1.502602,-4.861359 5.303301,-0.08839 z" + id="path2619-7" + inkscape:connector-curvature="0" /> + <path + id="path2615-8" + d="m 37.592776,38.298786 1.679379,5.038136 -5.480078,-0.08839 -1.502602,-4.861359 5.303301,-0.08839 z" + style="color:#000000;fill:url(#linearGradient2029-8);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.25pt;marker:none;visibility:visible;display:inline;overflow:visible" + inkscape:connector-curvature="0" /> + <path + style="fill:url(#linearGradient2031-6);fill-opacity:1;fill-rule:evenodd;stroke:none" + d="m 6.3916892,38.210397 -1.7677669,5.126525 5.4800777,0 0.53033,-2.032932 14.849242,0 0.549679,2.075114 6.167835,0 -1.679378,-5.168707 -24.1300188,0 z" + id="path2617-9" + sodipodi:nodetypes="ccccccccc" + inkscape:connector-curvature="0" /> + <path + style="color:#000000;fill:url(#linearGradient2033-2);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.25pt;marker:none;visibility:visible;display:inline;overflow:visible" + d="m 11.076272,41.745932 -0.441942,1.679379 14.760854,0 -0.441942,-1.767767 -13.87697,0.08839 z" + id="path2621-9" + inkscape:connector-curvature="0" /> + <path + style="color:#000000;fill:none;stroke:url(#linearGradient2035-9);stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible" + d="m 6.1278189,37.578116 31.8258151,0 2.637179,8.092563 -37.2610701,0 2.798076,-8.092563 z" + id="path2631-3" + sodipodi:nodetypes="ccccc" + inkscape:connector-curvature="0" /> + <path + transform="matrix(1.331237,0,0,0.658449,-10.41933,2.853866)" + d="m 35.620504,3.9384086 c 0,0.4637476 -0.375941,0.8396893 -0.839689,0.8396893 -0.463747,0 -0.839689,-0.3759417 -0.839689,-0.8396893 0,-0.4637476 0.375942,-0.8396893 0.839689,-0.8396893 0.463748,0 0.839689,0.3759417 0.839689,0.8396893 z" + sodipodi:ry="0.83968931" + sodipodi:rx="0.83968931" + sodipodi:cy="3.9384086" + sodipodi:cx="34.780815" + id="path2709-9" + style="color:#000000;fill:url(#linearGradient2037-7);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.5;marker:none;visibility:visible;display:inline;overflow:visible" + sodipodi:type="arc" /> + <path + sodipodi:type="arc" + style="color:#000000;fill:url(#linearGradient2039-1);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.5;marker:none;visibility:visible;display:inline;overflow:visible" + id="path2719-4" + sodipodi:cx="34.780815" + sodipodi:cy="3.9384086" + sodipodi:rx="0.83968931" + sodipodi:ry="0.83968931" + d="m 35.620504,3.9384086 c 0,0.4637476 -0.375941,0.8396893 -0.839689,0.8396893 -0.463747,0 -0.839689,-0.3759417 -0.839689,-0.8396893 0,-0.4637476 0.375942,-0.8396893 0.839689,-0.8396893 0.463748,0 0.839689,0.3759417 0.839689,0.8396893 z" + transform="matrix(1.331237,0,0,0.658449,-10.30573,4.959651)" /> + <path + transform="matrix(1.331237,0,0,0.658449,-10.19213,6.959651)" + d="m 35.620504,3.9384086 c 0,0.4637476 -0.375941,0.8396893 -0.839689,0.8396893 -0.463747,0 -0.839689,-0.3759417 -0.839689,-0.8396893 0,-0.4637476 0.375942,-0.8396893 0.839689,-0.8396893 0.463748,0 0.839689,0.3759417 0.839689,0.8396893 z" + sodipodi:ry="0.83968931" + sodipodi:rx="0.83968931" + sodipodi:cy="3.9384086" + sodipodi:cx="34.780815" + id="path2723-6" + style="color:#000000;fill:url(#linearGradient2041-7);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.5;marker:none;visibility:visible;display:inline;overflow:visible" + sodipodi:type="arc" /> + <path + sodipodi:type="arc" + style="color:#000000;fill:url(#linearGradient2043-8);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.5;marker:none;visibility:visible;display:inline;overflow:visible" + id="path2727-4" + sodipodi:cx="34.780815" + sodipodi:cy="3.9384086" + sodipodi:rx="0.83968931" + sodipodi:ry="0.83968931" + d="m 35.620504,3.9384086 c 0,0.4637476 -0.375941,0.8396893 -0.839689,0.8396893 -0.463747,0 -0.839689,-0.3759417 -0.839689,-0.8396893 0,-0.4637476 0.375942,-0.8396893 0.839689,-0.8396893 0.463748,0 0.839689,0.3759417 0.839689,0.8396893 z" + transform="matrix(1.331237,0,0,0.658449,-10.07853,8.959651)" /> + <path + transform="matrix(1.331237,0,0,0.658449,-9.96493,10.95965)" + d="m 35.620504,3.9384086 c 0,0.4637476 -0.375941,0.8396893 -0.839689,0.8396893 -0.463747,0 -0.839689,-0.3759417 -0.839689,-0.8396893 0,-0.4637476 0.375942,-0.8396893 0.839689,-0.8396893 0.463748,0 0.839689,0.3759417 0.839689,0.8396893 z" + sodipodi:ry="0.83968931" + sodipodi:rx="0.83968931" + sodipodi:cy="3.9384086" + sodipodi:cx="34.780815" + id="path2731-5" + style="color:#000000;fill:url(#linearGradient2045-9);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.5;marker:none;visibility:visible;display:inline;overflow:visible" + sodipodi:type="arc" /> + <path + id="text2735-5" + d="m 20,27.317666 0.281716,0 c 0.08376,1e-6 0.147985,0.01866 0.19266,0.05599 0.04497,0.03703 0.06745,0.08994 0.06745,0.158714 -1e-6,0.06907 -0.02248,0.122268 -0.06745,0.159595 -0.04467,0.03703 -0.108895,0.05555 -0.19266,0.05555 l -0.111981,0 0,0.22837 -0.169735,0 0,-0.658219 m 0.169735,0.123003 0,0.183843 0.0939,0 c 0.03292,0 0.05834,-0.0079 0.07627,-0.02381 0.01793,-0.01617 0.02689,-0.03894 0.02689,-0.06834 0,-0.02939 -0.009,-0.05202 -0.02689,-0.06789 -0.01793,-0.01587 -0.04335,-0.02381 -0.07627,-0.02381 l -0.0939,0 m 0.792244,-0.0119 c -0.05173,1e-6 -0.09185,0.01911 -0.120358,0.05731 -0.02851,0.03821 -0.04276,0.092 -0.04276,0.161359 0,0.06907 0.01425,0.122709 0.04276,0.160918 0.02851,0.03821 0.06863,0.05731 0.120358,0.05731 0.05202,0 0.09229,-0.0191 0.120799,-0.05731 0.02851,-0.03821 0.04276,-0.09185 0.04276,-0.160918 -10e-7,-0.06936 -0.01425,-0.123149 -0.04276,-0.161359 -0.02851,-0.03821 -0.06878,-0.05731 -0.120799,-0.05731 m 0,-0.123003 c 0.105808,1e-6 0.188692,0.03027 0.248651,0.09082 0.05996,0.06055 0.08994,0.144165 0.08994,0.250855 -1e-6,0.106397 -0.02998,0.189868 -0.08994,0.250414 -0.05996,0.06055 -0.142843,0.09082 -0.248651,0.09082 -0.105515,0 -0.188399,-0.03027 -0.248651,-0.09082 -0.05996,-0.06055 -0.08994,-0.144017 -0.08994,-0.250414 0,-0.10669 0.02998,-0.190309 0.08994,-0.250855 0.06025,-0.06055 0.143136,-0.09082 0.248651,-0.09082 m 0.466441,0.0119 0.189574,0 0.239393,0.451451 0,-0.451451 0.160918,0 0,0.658219 -0.189575,0 -0.239392,-0.451451 0,0.451451 -0.160918,0 0,-0.658219 m 0.663069,0 0.185606,0 0.149896,0.234543 0.149896,-0.234543 0.186048,0 -0.250856,0.380912 0,0.277307 -0.169735,0 0,-0.277307 -0.250855,-0.380912" + style="font-size:0.9029026px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;writing-mode:lr-tb;text-anchor:start;fill:#4a4a4a;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans" + inkscape:connector-curvature="0" /> + </g> + </g> + <g + inkscape:label="Layer 1" + id="layer1-74-4-5" + transform="matrix(2.985984,0,0,2.985984,968.01017,810.24344)"> + <g + transform="matrix(0.486246,0,0,0.481106,-0.9712,-0.678179)" + id="g1974-1-1"> + <path + sodipodi:type="arc" + style="color:#000000;fill:url(#radialGradient2003-1-5);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible" + id="path2452-6-6" + sodipodi:cx="24.218407" + sodipodi:cy="35.051105" + sodipodi:rx="16.882174" + sodipodi:ry="4.552" + d="m 41.10058,35.051105 c 0,2.514001 -7.558406,4.552001 -16.882173,4.552001 -9.323767,0 -16.8821739,-2.038 -16.8821739,-4.552001 0,-2.514 7.5584069,-4.552 16.8821739,-4.552 9.323767,0 16.882173,2.038 16.882173,4.552 z" + transform="matrix(1,0,0,1.368932,-1.978553,-13.61713)" /> + <path + sodipodi:type="arc" + style="color:#000000;fill:#adb0aa;fill-opacity:1;fill-rule:evenodd;stroke:#4b4d4a;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible" + id="path2407-4-1" + sodipodi:cx="-35.658386" + sodipodi:cy="29.716238" + sodipodi:rx="9.3944187" + sodipodi:ry="3.939595" + d="m -26.263968,29.716238 c 0,2.175778 -4.206024,3.939595 -9.394418,3.939595 -5.188394,0 -9.394419,-1.763817 -9.394419,-3.939595 0,-2.175778 4.206025,-3.939595 9.394419,-3.939595 5.188394,0 9.394418,1.763817 9.394418,3.939595 z" + transform="translate(57.53339,3.203427)" /> + <path + transform="matrix(0.940273,0,0,0.940273,55.40361,4.271194)" + d="m -26.263968,29.716238 c 0,2.175778 -4.206024,3.939595 -9.394418,3.939595 -5.188394,0 -9.394419,-1.763817 -9.394419,-3.939595 0,-2.175778 4.206025,-3.939595 9.394419,-3.939595 5.188394,0 9.394418,1.763817 9.394418,3.939595 z" + sodipodi:ry="3.939595" + sodipodi:rx="9.3944187" + sodipodi:cy="29.716238" + sodipodi:cx="-35.658386" + id="path1825-3-3" + style="color:#000000;fill:none;stroke:#7b7f7a;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible" + sodipodi:type="arc" /> + <path + sodipodi:type="arc" + style="color:#000000;fill:none;stroke:url(#linearGradient2005-3-2);stroke-width:0.68065339;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible" + id="path2983-5-7" + sodipodi:cx="-35.658386" + sodipodi:cy="29.716238" + sodipodi:rx="9.3944187" + sodipodi:ry="3.939595" + d="m -26.263968,29.716238 c 0,2.175778 -4.206024,3.939595 -9.394418,3.939595 -5.188394,0 -9.394419,-1.763817 -9.394419,-3.939595 0,-2.175778 4.206025,-3.939595 9.394419,-3.939595 5.188394,0 9.394418,1.763817 9.394418,3.939595 z" + transform="matrix(0.940273,0,0,0.940273,55.40361,3.521194)" /> + <path + sodipodi:nodetypes="ccccccccccccccccc" + style="fill:#d0d0d0;fill-opacity:1;fill-rule:evenodd;stroke:#979797;stroke-width:0.40000001;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1" + d="m 25.6875,28.766243 -0.0625,1 c 0,0 4.324108,3.599166 9,4.202507 2.337946,0.30167 4.753675,0.702412 6.75,1.1875 1.996325,0.485088 3.588356,1.119606 4.125,1.65625 0.310411,0.310411 0.451063,0.573639 0.5,0.78125 0.04894,0.207611 0.03822,0.354815 -0.09375,0.5625 -0.263933,0.41537 -1.079857,0.967652 -2.46875,1.40625 C 40.659715,40.439695 35.717076,41 28.875,41 l 0,1 c 6.895998,0 11.863665,-0.527671 14.84375,-1.46875 1.490042,-0.47054 2.524942,-1.015687 3.03125,-1.8125 C 47.003154,38.320344 47.107321,37.830301 47,37.375 46.892679,36.919699 46.615445,36.490445 46.21875,36.09375 45.34118,35.21618 43.681912,34.68731 41.625,34.1875 39.568088,33.68769 37.109264,33.273171 34.75,32.96875 30.031473,32.359908 25.6875,28.766243 25.6875,28.766243 z" + id="path2411-4-7" + inkscape:connector-curvature="0" /> + <path + transform="matrix(1,0,0,1.368932,-1.978553,-19.02126)" + d="m 41.10058,35.051105 c 0,2.514001 -7.558406,4.552001 -16.882173,4.552001 -9.323767,0 -16.8821739,-2.038 -16.8821739,-4.552001 0,-2.514 7.5584069,-4.552 16.8821739,-4.552 9.323767,0 16.882173,2.038 16.882173,4.552 z" + sodipodi:ry="4.552" + sodipodi:rx="16.882174" + sodipodi:cy="35.051105" + sodipodi:cx="24.218407" + id="path2462-8-1" + style="color:#000000;fill:url(#radialGradient2007-9-2);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible" + sodipodi:type="arc" /> + <rect + y="30.703611" + x="17.472397" + height="2.7400389" + width="9.0396729" + id="rect2699-7-2" + style="color:#000000;fill:url(#linearGradient2009-3-9);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.60872948;marker:none;visibility:visible;display:inline;overflow:visible" /> + <path + style="color:#000000;fill:url(#linearGradient2011-7-3);fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient2013-8-3);stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible" + d="m 7.0809024,1.6956221 29.5881946,0 c 0.911342,0 1.624147,0.5834818 1.666752,1.401587 l 1.332044,25.5781139 c 0.05821,1.117735 -0.901056,2.020305 -2.020305,2.020305 l -31.545176,0 c -1.1192491,0 -2.078514,-0.90257 -2.0203052,-2.020305 L 5.4141506,3.0972091 c 0.040284,-0.7735346 0.5475027,-1.401587 1.6667518,-1.401587 z" + id="rect2404-3-1" + sodipodi:nodetypes="cssssssss" + inkscape:connector-curvature="0" /> + <path + sodipodi:nodetypes="ccccc" + id="path2377-3-0" + d="m 8.4105348,4.3058272 -1.242195,22.0453168 27.6503892,0 L 33.483712,4.3992558 8.4105348,4.3058272 z" + style="fill:url(#linearGradient2015-8-6);fill-opacity:1;fill-rule:evenodd;stroke:#000079;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" + inkscape:connector-curvature="0" /> + <path + style="fill:none;stroke:url(#linearGradient2017-3-8);stroke-width:0.99618119;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:0.24840764" + d="m 6.1774331,28.735789 31.4284769,0" + id="path2393-5-8" + inkscape:connector-curvature="0" /> + <path + sodipodi:nodetypes="cssssssss" + id="path2397-0-9" + d="M 6.9145985,2.7063396 36.760101,2.6685383 c 0.283697,-3.593e-4 0.559302,0.2372498 0.582105,0.6525438 L 38.704098,28.12433 c 0.05804,1.057031 -0.539749,1.785871 -1.598371,1.785871 l -30.5239687,0 c -1.0586228,0 -1.5930144,-0.728791 -1.5358714,-1.785871 L 6.3699773,3.6301633 C 6.4086732,2.9143326 6.5363627,2.7068187 6.9145985,2.7063396 z" + style="color:#000000;fill:none;stroke:url(#linearGradient2019-5-2);stroke-width:0.99999964;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:0.70063692;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible" + inkscape:connector-curvature="0" /> + <path + sodipodi:nodetypes="ccccc" + style="opacity:0.53142856;fill:url(#linearGradient2021-8-6);fill-opacity:1;fill-rule:evenodd;stroke:none" + d="M 8.7115364,4.7463626 7.9090069,22.616693 C 18.953645,20.216063 19.33047,12.124494 33.063039,9.4699426 L 32.901567,4.8124267 8.7115364,4.7463626 z" + id="path2443-1-0" + inkscape:connector-curvature="0" /> + <path + transform="matrix(1.264398,0,0,1.291262,-6.216332,-4.000423)" + d="m 41.10058,35.051105 c 0,2.514001 -7.558406,4.552001 -16.882173,4.552001 -9.323767,0 -16.8821739,-2.038 -16.8821739,-4.552001 0,-2.514 7.5584069,-4.552 16.8821739,-4.552 9.323767,0 16.882173,2.038 16.882173,4.552 z" + sodipodi:ry="4.552" + sodipodi:rx="16.882174" + sodipodi:cy="35.051105" + sodipodi:cx="24.218407" + id="path2657-4-1" + style="color:#000000;fill:url(#radialGradient2023-3-9);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible" + sodipodi:type="arc" /> + <path + sodipodi:nodetypes="cssssssss" + id="path2409-5-3" + d="m 6.4621839,36.817452 31.0024061,0 c 1.119249,0 0.977355,0.271438 1.092227,0.612846 l 2.834646,8.42481 c 0.114872,0.341409 0.02702,0.612846 -1.092227,0.612846 l -36.6716978,0 c -1.1192491,0 -1.2070995,-0.271437 -1.0922275,-0.612846 l 2.8346457,-8.42481 c 0.114872,-0.341409 -0.027022,-0.612846 1.0922275,-0.612846 z" + style="color:#000000;fill:url(#linearGradient2025-6-4);fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient2027-7-6);stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible" + inkscape:connector-curvature="0" /> + <path + sodipodi:nodetypes="ccccccccc" + id="path2611-7-4" + d="m 6.3916892,38.829113 -1.7677669,5.126525 5.4800777,0 0.53033,-2.032932 14.849242,0 0.549679,2.075114 6.167835,0 -1.679378,-5.168707 -24.1300188,0 z" + style="fill:#7a7d77;fill-opacity:1;fill-rule:evenodd;stroke:none" + inkscape:connector-curvature="0" /> + <path + id="path2613-0-8" + d="m 11.076272,42.27626 -0.441942,1.679379 14.760854,0 -0.441942,-1.767767 -13.87697,0.08839 z" + style="fill:#777874;fill-opacity:1;fill-rule:evenodd;stroke:none" + inkscape:connector-curvature="0" /> + <path + style="color:#000000;fill:#777a75;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.25pt;marker:none;visibility:visible;display:inline;overflow:visible" + d="m 37.592776,38.829114 1.679379,5.038136 -5.480078,-0.08839 -1.502602,-4.861359 5.303301,-0.08839 z" + id="path2619-7-5" + inkscape:connector-curvature="0" /> + <path + id="path2615-8-8" + d="m 37.592776,38.298786 1.679379,5.038136 -5.480078,-0.08839 -1.502602,-4.861359 5.303301,-0.08839 z" + style="color:#000000;fill:url(#linearGradient2029-8-8);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.25pt;marker:none;visibility:visible;display:inline;overflow:visible" + inkscape:connector-curvature="0" /> + <path + style="fill:url(#linearGradient2031-6-6);fill-opacity:1;fill-rule:evenodd;stroke:none" + d="m 6.3916892,38.210397 -1.7677669,5.126525 5.4800777,0 0.53033,-2.032932 14.849242,0 0.549679,2.075114 6.167835,0 -1.679378,-5.168707 -24.1300188,0 z" + id="path2617-9-2" + sodipodi:nodetypes="ccccccccc" + inkscape:connector-curvature="0" /> + <path + style="color:#000000;fill:url(#linearGradient2033-2-2);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.25pt;marker:none;visibility:visible;display:inline;overflow:visible" + d="m 11.076272,41.745932 -0.441942,1.679379 14.760854,0 -0.441942,-1.767767 -13.87697,0.08839 z" + id="path2621-9-2" + inkscape:connector-curvature="0" /> + <path + style="color:#000000;fill:none;stroke:url(#linearGradient2035-9-2);stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible" + d="m 6.1278189,37.578116 31.8258151,0 2.637179,8.092563 -37.2610701,0 2.798076,-8.092563 z" + id="path2631-3-0" + sodipodi:nodetypes="ccccc" + inkscape:connector-curvature="0" /> + <path + transform="matrix(1.331237,0,0,0.658449,-10.41933,2.853866)" + d="m 35.620504,3.9384086 c 0,0.4637476 -0.375941,0.8396893 -0.839689,0.8396893 -0.463747,0 -0.839689,-0.3759417 -0.839689,-0.8396893 0,-0.4637476 0.375942,-0.8396893 0.839689,-0.8396893 0.463748,0 0.839689,0.3759417 0.839689,0.8396893 z" + sodipodi:ry="0.83968931" + sodipodi:rx="0.83968931" + sodipodi:cy="3.9384086" + sodipodi:cx="34.780815" + id="path2709-9-6" + style="color:#000000;fill:url(#linearGradient2037-7-4);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.5;marker:none;visibility:visible;display:inline;overflow:visible" + sodipodi:type="arc" /> + <path + sodipodi:type="arc" + style="color:#000000;fill:url(#linearGradient2039-1-4);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.5;marker:none;visibility:visible;display:inline;overflow:visible" + id="path2719-4-3" + sodipodi:cx="34.780815" + sodipodi:cy="3.9384086" + sodipodi:rx="0.83968931" + sodipodi:ry="0.83968931" + d="m 35.620504,3.9384086 c 0,0.4637476 -0.375941,0.8396893 -0.839689,0.8396893 -0.463747,0 -0.839689,-0.3759417 -0.839689,-0.8396893 0,-0.4637476 0.375942,-0.8396893 0.839689,-0.8396893 0.463748,0 0.839689,0.3759417 0.839689,0.8396893 z" + transform="matrix(1.331237,0,0,0.658449,-10.30573,4.959651)" /> + <path + transform="matrix(1.331237,0,0,0.658449,-10.19213,6.959651)" + d="m 35.620504,3.9384086 c 0,0.4637476 -0.375941,0.8396893 -0.839689,0.8396893 -0.463747,0 -0.839689,-0.3759417 -0.839689,-0.8396893 0,-0.4637476 0.375942,-0.8396893 0.839689,-0.8396893 0.463748,0 0.839689,0.3759417 0.839689,0.8396893 z" + sodipodi:ry="0.83968931" + sodipodi:rx="0.83968931" + sodipodi:cy="3.9384086" + sodipodi:cx="34.780815" + id="path2723-6-6" + style="color:#000000;fill:url(#linearGradient2041-7-6);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.5;marker:none;visibility:visible;display:inline;overflow:visible" + sodipodi:type="arc" /> + <path + sodipodi:type="arc" + style="color:#000000;fill:url(#linearGradient2043-8-4);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.5;marker:none;visibility:visible;display:inline;overflow:visible" + id="path2727-4-1" + sodipodi:cx="34.780815" + sodipodi:cy="3.9384086" + sodipodi:rx="0.83968931" + sodipodi:ry="0.83968931" + d="m 35.620504,3.9384086 c 0,0.4637476 -0.375941,0.8396893 -0.839689,0.8396893 -0.463747,0 -0.839689,-0.3759417 -0.839689,-0.8396893 0,-0.4637476 0.375942,-0.8396893 0.839689,-0.8396893 0.463748,0 0.839689,0.3759417 0.839689,0.8396893 z" + transform="matrix(1.331237,0,0,0.658449,-10.07853,8.959651)" /> + <path + transform="matrix(1.331237,0,0,0.658449,-9.96493,10.95965)" + d="m 35.620504,3.9384086 c 0,0.4637476 -0.375941,0.8396893 -0.839689,0.8396893 -0.463747,0 -0.839689,-0.3759417 -0.839689,-0.8396893 0,-0.4637476 0.375942,-0.8396893 0.839689,-0.8396893 0.463748,0 0.839689,0.3759417 0.839689,0.8396893 z" + sodipodi:ry="0.83968931" + sodipodi:rx="0.83968931" + sodipodi:cy="3.9384086" + sodipodi:cx="34.780815" + id="path2731-5-0" + style="color:#000000;fill:url(#linearGradient2045-9-2);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.5;marker:none;visibility:visible;display:inline;overflow:visible" + sodipodi:type="arc" /> + <path + id="text2735-5-5" + d="m 20,27.317666 0.281716,0 c 0.08376,1e-6 0.147985,0.01866 0.19266,0.05599 0.04497,0.03703 0.06745,0.08994 0.06745,0.158714 -1e-6,0.06907 -0.02248,0.122268 -0.06745,0.159595 -0.04467,0.03703 -0.108895,0.05555 -0.19266,0.05555 l -0.111981,0 0,0.22837 -0.169735,0 0,-0.658219 m 0.169735,0.123003 0,0.183843 0.0939,0 c 0.03292,0 0.05834,-0.0079 0.07627,-0.02381 0.01793,-0.01617 0.02689,-0.03894 0.02689,-0.06834 0,-0.02939 -0.009,-0.05202 -0.02689,-0.06789 -0.01793,-0.01587 -0.04335,-0.02381 -0.07627,-0.02381 l -0.0939,0 m 0.792244,-0.0119 c -0.05173,1e-6 -0.09185,0.01911 -0.120358,0.05731 -0.02851,0.03821 -0.04276,0.092 -0.04276,0.161359 0,0.06907 0.01425,0.122709 0.04276,0.160918 0.02851,0.03821 0.06863,0.05731 0.120358,0.05731 0.05202,0 0.09229,-0.0191 0.120799,-0.05731 0.02851,-0.03821 0.04276,-0.09185 0.04276,-0.160918 -10e-7,-0.06936 -0.01425,-0.123149 -0.04276,-0.161359 -0.02851,-0.03821 -0.06878,-0.05731 -0.120799,-0.05731 m 0,-0.123003 c 0.105808,1e-6 0.188692,0.03027 0.248651,0.09082 0.05996,0.06055 0.08994,0.144165 0.08994,0.250855 -1e-6,0.106397 -0.02998,0.189868 -0.08994,0.250414 -0.05996,0.06055 -0.142843,0.09082 -0.248651,0.09082 -0.105515,0 -0.188399,-0.03027 -0.248651,-0.09082 -0.05996,-0.06055 -0.08994,-0.144017 -0.08994,-0.250414 0,-0.10669 0.02998,-0.190309 0.08994,-0.250855 0.06025,-0.06055 0.143136,-0.09082 0.248651,-0.09082 m 0.466441,0.0119 0.189574,0 0.239393,0.451451 0,-0.451451 0.160918,0 0,0.658219 -0.189575,0 -0.239392,-0.451451 0,0.451451 -0.160918,0 0,-0.658219 m 0.663069,0 0.185606,0 0.149896,0.234543 0.149896,-0.234543 0.186048,0 -0.250856,0.380912 0,0.277307 -0.169735,0 0,-0.277307 -0.250855,-0.380912" + style="font-size:0.9029026px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;writing-mode:lr-tb;text-anchor:start;fill:#4a4a4a;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans" + inkscape:connector-curvature="0" /> + </g> + </g> + <g + id="g3827"> + <path + inkscape:connector-curvature="0" + id="path5647-1-4" + d="m 830.32618,790.03857 c 25.6904,-33.65986 25.6904,-33.65986 25.6904,-33.65986" + style="opacity:0.90000006;fill:none;stroke:#030000;stroke-width:1.76822448;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" /> + <path + inkscape:connector-curvature="0" + id="path5649-2-2" + d="m 856.24525,756.16184 c 0,6.74697 0,6.74697 0,6.74697" + style="opacity:0.90000006;fill:none;stroke:#030000;stroke-width:1.76822448;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" /> + <path + inkscape:connector-curvature="0" + id="path5649-8-9-0" + d="m 856.21292,756.11436 c -5.14952,0 -5.14952,0 -5.14952,0" + style="opacity:0.90000006;fill:none;stroke:#030000;stroke-width:1.76822448;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" /> + </g> + <g + id="g5722-7-0" + transform="matrix(0.29032369,-0.10566918,0.13844899,0.38038547,594.73803,551.66662)"> + <path + inkscape:connector-curvature="0" + id="path5647-1-4-3" + d="m 669.99529,844.65261 c 83.15229,-83.1523 83.15229,-83.1523 83.15229,-83.1523" + style="opacity:0.90000006;fill:none;stroke:#030000;stroke-width:5;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" /> + <path + inkscape:connector-curvature="0" + id="path5649-2-2-3" + d="m 753.88771,760.96455 c 0,16.66751 0,16.66751 0,16.66751" + style="opacity:0.90000006;fill:none;stroke:#030000;stroke-width:5;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" /> + <path + inkscape:connector-curvature="0" + id="path5649-8-9-0-9" + d="m 753.78309,760.84726 c -16.6675,0 -16.6675,0 -16.6675,0" + style="opacity:0.90000006;fill:none;stroke:#030000;stroke-width:5;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" /> + </g> + <g + id="g5722-7-04" + transform="matrix(0.15447801,-0.26756376,0.35056515,0.20239888,581.41817,807.87524)"> + <path + inkscape:connector-curvature="0" + id="path5647-1-4-33" + d="m 669.99529,844.65261 c 83.15229,-83.1523 83.15229,-83.1523 83.15229,-83.1523" + style="opacity:0.90000006;fill:none;stroke:#030000;stroke-width:5;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" /> + <path + inkscape:connector-curvature="0" + id="path5649-2-2-4" + d="m 753.88771,760.96455 c 0,16.66751 0,16.66751 0,16.66751" + style="opacity:0.90000006;fill:none;stroke:#030000;stroke-width:5;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" /> + <path + inkscape:connector-curvature="0" + id="path5649-8-9-0-2" + d="m 753.78309,760.84726 c -16.6675,0 -16.6675,0 -16.6675,0" + style="opacity:0.90000006;fill:none;stroke:#030000;stroke-width:5;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" /> + </g> + <g + transform="matrix(-1,0,0,-1,1685.5536,1546.8494)" + id="g3827-3"> + <path + inkscape:connector-curvature="0" + id="path5647-1-4-2" + d="m 830.32618,790.03857 c 25.6904,-33.65986 25.6904,-33.65986 25.6904,-33.65986" + style="opacity:0.90000006;fill:none;stroke:#030000;stroke-width:1.76822448;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" /> + <path + inkscape:connector-curvature="0" + id="path5649-2-2-0" + d="m 856.24525,756.16184 c 0,6.74697 0,6.74697 0,6.74697" + style="opacity:0.90000006;fill:none;stroke:#030000;stroke-width:1.76822448;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" /> + <path + inkscape:connector-curvature="0" + id="path5649-8-9-0-6" + d="m 856.21292,756.11436 c -5.14952,0 -5.14952,0 -5.14952,0" + style="opacity:0.90000006;fill:none;stroke:#030000;stroke-width:1.76822448;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" /> + </g> + <g + id="g5722-7-0-1" + transform="matrix(-0.29032369,0.10566918,-0.13844899,-0.38038547,1230.2287,1012.1938)"> + <path + inkscape:connector-curvature="0" + id="path5647-1-4-3-5" + d="m 669.99529,844.65261 c 83.15229,-83.1523 83.15229,-83.1523 83.15229,-83.1523" + style="opacity:0.90000006;fill:none;stroke:#030000;stroke-width:5;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" /> + <path + inkscape:connector-curvature="0" + id="path5649-2-2-3-5" + d="m 753.88771,760.96455 c 0,16.66751 0,16.66751 0,16.66751" + style="opacity:0.90000006;fill:none;stroke:#030000;stroke-width:5;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" /> + <path + inkscape:connector-curvature="0" + id="path5649-8-9-0-9-4" + d="m 753.78309,760.84726 c -16.6675,0 -16.6675,0 -16.6675,0" + style="opacity:0.90000006;fill:none;stroke:#030000;stroke-width:5;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" /> + </g> + <g + id="g5722-7-04-7" + transform="matrix(-0.15447801,0.26756376,-0.35056515,-0.20239888,1364.2001,751.75086)"> + <path + inkscape:connector-curvature="0" + id="path5647-1-4-33-6" + d="m 669.99529,844.65261 c 83.15229,-83.1523 83.15229,-83.1523 83.15229,-83.1523" + style="opacity:0.90000006;fill:none;stroke:#030000;stroke-width:5;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" /> + <path + inkscape:connector-curvature="0" + id="path5649-2-2-4-5" + d="m 753.88771,760.96455 c 0,16.66751 0,16.66751 0,16.66751" + style="opacity:0.90000006;fill:none;stroke:#030000;stroke-width:5;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" /> + <path + inkscape:connector-curvature="0" + id="path5649-8-9-0-2-6" + d="m 753.78309,760.84726 c -16.6675,0 -16.6675,0 -16.6675,0" + style="opacity:0.90000006;fill:none;stroke:#030000;stroke-width:5;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" /> + </g> + </g> +</svg> diff --git a/man/html/images/tngconsole.png b/man/html/images/tngconsole.png Binary files differnew file mode 100644 index 0000000..6a733e1 --- /dev/null +++ b/man/html/images/tngconsole.png diff --git a/man/html/images/trace_1.png b/man/html/images/trace_1.png Binary files differnew file mode 100644 index 0000000..deceec1 --- /dev/null +++ b/man/html/images/trace_1.png diff --git a/man/html/images/trace_buffer.png b/man/html/images/trace_buffer.png Binary files differnew file mode 100644 index 0000000..a069d52 --- /dev/null +++ b/man/html/images/trace_buffer.png diff --git a/man/html/images/trace_example.png b/man/html/images/trace_example.png Binary files differnew file mode 100644 index 0000000..37d29f7 --- /dev/null +++ b/man/html/images/trace_example.png diff --git a/man/html/images/trace_libpcp.png b/man/html/images/trace_libpcp.png Binary files differnew file mode 100644 index 0000000..5a4c38d --- /dev/null +++ b/man/html/images/trace_libpcp.png diff --git a/man/html/images/xenln.png b/man/html/images/xenln.png Binary files differnew file mode 100644 index 0000000..8895c34 --- /dev/null +++ b/man/html/images/xenln.png diff --git a/man/html/images/xnmevents.png b/man/html/images/xnmevents.png Binary files differnew file mode 100644 index 0000000..7b60aec --- /dev/null +++ b/man/html/images/xnmevents.png diff --git a/man/html/importdata/GNUmakefile b/man/html/importdata/GNUmakefile new file mode 100644 index 0000000..2fa2570 --- /dev/null +++ b/man/html/importdata/GNUmakefile @@ -0,0 +1,20 @@ +TOPDIR = ../../.. +include $(TOPDIR)/src/include/builddefs + +BUNDLE = importdata +SCRIPT = mover2pcp +LSRCFILES = $(SCRIPT) \ + README moverv1 moverv2 moverv3 moverv4 \ + mk.mover.log mover.log + +default: + +include $(BUILDRULES) + +install install-dev: default + $(INSTALL) -m 755 -d $(PCP_BOOKS_DIR)/html/$(BUNDLE) + $(INSTALL) -m 644 $(SCRIPT) $(PCP_BOOKS_DIR)/html/$(BUNDLE)/$(SCRIPT) + +default_pcp : default + +install_pcp : install diff --git a/man/html/importdata/README b/man/html/importdata/README new file mode 100644 index 0000000..befc9e2 --- /dev/null +++ b/man/html/importdata/README @@ -0,0 +1,9 @@ +mover2pcp - example used in lab.importdata.html in pcp-doc + + mover.log - sample log file + mk.mover.log - script to create fake mover.log + moverv1 - minimalist version 1 + moverv2 - minimalist version 2 + moverv3 - minimalist version 3 + moverv4 - minimalist version 4 + mover2pcp - final script diff --git a/man/html/importdata/mk.mover.log b/man/html/importdata/mk.mover.log new file mode 100755 index 0000000..0d182d6 --- /dev/null +++ b/man/html/importdata/mk.mover.log @@ -0,0 +1,35 @@ +#!/bin/sh +# +# Generate a mover.log to be used with mover2pcp +# + +find $HOME -type f \ +| sed -e 5000q \ +| while read f +do + stat --format="%n %s" "$f" +done \ +| awk ' +BEGIN { now = systime(); start = now - 30*24*3600 + maxbatch = 60; + want = int(rand()*maxbatch); + n = c[0] = c[1] = c[2] = max_b = b = 0 + } + #debug# { print } + { want--; + if (want < 0) { + if (rand() < 0.15) { + # 15% of the time, output a no activity line + n = c[0] = c[1] = c[2] = max_b = b = 0 + } + printf "%s %d files (%d, %d, %d) %d bytes (%d)\n", strftime("%Y-%m-%d %H:%M:%S", start), n, c[0], c[1], c[2], b, max_b + start += 30; + want = int(rand()*maxbatch); + n = c[0] = c[1] = c[2] = max_b = b = 0 + } + n++; b += $2 + if ($2 <= 1024) c[0]++ + else if ($2 <= 1024*1024) c[1]++ + else c[2]++ + if ($2 > max_b) max_b = $2 + }' diff --git a/man/html/importdata/mover.log b/man/html/importdata/mover.log new file mode 100644 index 0000000..70700cd --- /dev/null +++ b/man/html/importdata/mover.log @@ -0,0 +1,161 @@ +2010-07-04 13:46:29 14 files (6, 8, 0) 142512 bytes (92098) +2010-07-04 13:46:59 51 files (28, 23, 0) 132761 bytes (33239) +2010-07-04 13:47:29 36 files (23, 12, 1) 5733152 bytes (5688400) +2010-07-04 13:47:59 49 files (40, 9, 0) 118418 bytes (70669) +2010-07-04 13:48:29 30 files (7, 23, 0) 210531 bytes (52261) +2010-07-04 13:48:59 23 files (6, 17, 0) 81048 bytes (15175) +2010-07-04 13:49:29 55 files (31, 24, 0) 190841 bytes (27908) +2010-07-04 13:49:59 54 files (49, 5, 0) 14078 bytes (1213) +2010-07-04 13:50:29 38 files (19, 19, 0) 82398 bytes (16781) +2010-07-04 13:50:59 0 files (0, 0, 0) 0 bytes (0) +2010-07-04 13:51:29 31 files (8, 23, 0) 202755 bytes (41984) +2010-07-04 13:51:59 0 files (0, 0, 0) 0 bytes (0) +2010-07-04 13:52:29 7 files (4, 3, 0) 15954 bytes (8789) +2010-07-04 13:52:59 1 files (1, 0, 0) 719 bytes (719) +2010-07-04 13:53:29 7 files (2, 5, 0) 28976 bytes (10804) +2010-07-04 13:53:59 16 files (5, 11, 0) 619501 bytes (471054) +2010-07-04 13:54:29 54 files (24, 28, 2) 4097068 bytes (1451420) +2010-07-04 13:54:59 44 files (11, 33, 0) 280558 bytes (35925) +2010-07-04 13:55:29 56 files (16, 40, 0) 209611 bytes (27890) +2010-07-04 13:55:59 54 files (13, 41, 0) 265851 bytes (23801) +2010-07-04 13:56:29 20 files (5, 15, 0) 63906 bytes (21526) +2010-07-04 13:56:59 60 files (19, 41, 0) 149357 bytes (59852) +2010-07-04 13:57:29 43 files (13, 30, 0) 204814 bytes (105994) +2010-07-04 13:57:59 57 files (20, 37, 0) 257186 bytes (30296) +2010-07-04 13:58:29 7 files (2, 5, 0) 47402 bytes (28647) +2010-07-04 13:58:59 34 files (17, 17, 0) 110547 bytes (43668) +2010-07-04 13:59:29 5 files (0, 5, 0) 16039 bytes (5628) +2010-07-04 13:59:59 12 files (1, 11, 0) 92010 bytes (19725) +2010-07-04 14:00:29 39 files (11, 28, 0) 224461 bytes (78750) +2010-07-04 14:00:59 3 files (1, 2, 0) 3257 bytes (2123) +2010-07-04 14:01:29 0 files (0, 0, 0) 0 bytes (0) +2010-07-04 14:01:59 10 files (3, 7, 0) 22664 bytes (8319) +2010-07-04 14:02:29 42 files (15, 27, 0) 158907 bytes (63403) +2010-07-04 14:02:59 42 files (14, 28, 0) 179235 bytes (45308) +2010-07-04 14:03:29 28 files (4, 24, 0) 89672 bytes (21398) +2010-07-04 14:03:59 28 files (3, 25, 0) 410717 bytes (221626) +2010-07-04 14:04:29 6 files (0, 6, 0) 20810 bytes (5443) +2010-07-04 14:04:59 57 files (8, 49, 0) 242260 bytes (40168) +2010-07-04 14:05:29 0 files (0, 0, 0) 0 bytes (0) +2010-07-04 14:05:59 15 files (6, 9, 0) 61522 bytes (14739) +2010-07-04 14:06:29 27 files (11, 16, 0) 146905 bytes (86884) +2010-07-04 14:06:59 53 files (16, 37, 0) 272658 bytes (103530) +2010-07-04 14:07:29 57 files (1, 56, 0) 672539 bytes (66131) +2010-07-04 14:07:59 51 files (24, 27, 0) 197605 bytes (48368) +2010-07-04 14:08:29 36 files (23, 13, 0) 220569 bytes (53235) +2010-07-04 14:08:59 20 files (0, 20, 0) 141069 bytes (31880) +2010-07-04 14:09:29 55 files (1, 54, 0) 335190 bytes (30038) +2010-07-04 14:09:59 51 files (0, 51, 0) 189665 bytes (17426) +2010-07-04 14:10:29 30 files (0, 30, 0) 126407 bytes (16961) +2010-07-04 14:10:59 0 files (0, 0, 0) 0 bytes (0) +2010-07-04 14:11:29 26 files (3, 23, 0) 440333 bytes (295831) +2010-07-04 14:11:59 7 files (6, 1, 0) 5362 bytes (2892) +2010-07-04 14:12:29 38 files (25, 13, 0) 83338 bytes (19874) +2010-07-04 14:12:59 47 files (21, 26, 0) 146862 bytes (21194) +2010-07-04 14:13:29 60 files (35, 25, 0) 110686 bytes (30581) +2010-07-04 14:13:59 39 files (19, 20, 0) 75524 bytes (13688) +2010-07-04 14:14:29 58 files (36, 22, 0) 158258 bytes (33037) +2010-07-04 14:14:59 14 files (2, 11, 1) 6739584 bytes (4808802) +2010-07-04 14:15:29 0 files (0, 0, 0) 0 bytes (0) +2010-07-04 14:15:59 17 files (8, 9, 0) 35206 bytes (12257) +2010-07-04 14:16:29 23 files (11, 12, 0) 82701 bytes (27815) +2010-07-04 14:16:59 53 files (31, 22, 0) 83209 bytes (13686) +2010-07-04 14:17:29 60 files (35, 25, 0) 125315 bytes (21077) +2010-07-04 14:17:59 33 files (20, 13, 0) 41639 bytes (9772) +2010-07-04 14:18:29 47 files (29, 18, 0) 91435 bytes (21920) +2010-07-04 14:18:59 44 files (28, 16, 0) 88960 bytes (21124) +2010-07-04 14:19:29 29 files (22, 7, 0) 67806 bytes (22687) +2010-07-04 14:19:59 52 files (35, 17, 0) 48792 bytes (6431) +2010-07-04 14:20:29 24 files (16, 8, 0) 64065 bytes (30170) +2010-07-04 14:20:59 13 files (8, 5, 0) 23280 bytes (13729) +2010-07-04 14:21:29 21 files (15, 6, 0) 22200 bytes (5657) +2010-07-04 14:21:59 27 files (16, 11, 0) 55662 bytes (21158) +2010-07-04 14:22:29 39 files (23, 16, 0) 126781 bytes (20554) +2010-07-04 14:22:59 54 files (36, 18, 0) 122433 bytes (21976) +2010-07-04 14:23:29 39 files (28, 11, 0) 616714 bytes (439081) +2010-07-04 14:23:59 0 files (0, 0, 0) 0 bytes (0) +2010-07-04 14:24:29 37 files (8, 29, 0) 204193 bytes (36438) +2010-07-04 14:24:59 21 files (2, 19, 0) 196555 bytes (27156) +2010-07-04 14:25:29 25 files (7, 16, 2) 22880215 bytes (12439460) +2010-07-04 14:25:59 59 files (9, 50, 0) 1375709 bytes (365788) +2010-07-04 14:26:29 41 files (0, 41, 0) 187455 bytes (37965) +2010-07-04 14:26:59 52 files (0, 52, 0) 311272 bytes (40326) +2010-07-04 14:27:29 37 files (3, 34, 0) 1272456 bytes (502112) +2010-07-04 14:27:59 9 files (0, 9, 0) 55111 bytes (16345) +2010-07-04 14:28:29 23 files (0, 23, 0) 128851 bytes (18182) +2010-07-04 14:28:59 39 files (5, 34, 0) 129389 bytes (18724) +2010-07-04 14:29:29 34 files (2, 32, 0) 219142 bytes (44562) +2010-07-04 14:29:59 58 files (5, 53, 0) 630739 bytes (118843) +2010-07-04 14:30:29 26 files (13, 13, 0) 50311 bytes (14925) +2010-07-04 14:30:59 57 files (39, 17, 1) 5712423 bytes (5561008) +2010-07-04 14:31:29 0 files (0, 0, 0) 0 bytes (0) +2010-07-04 14:31:59 58 files (2, 56, 0) 397563 bytes (30632) +2010-07-04 14:32:29 45 files (0, 45, 0) 414913 bytes (37794) +2010-07-04 14:32:59 34 files (6, 28, 0) 256229 bytes (35787) +2010-07-04 14:33:29 43 files (16, 27, 0) 233841 bytes (37056) +2010-07-04 14:33:59 30 files (14, 16, 0) 55166 bytes (8639) +2010-07-04 14:34:29 44 files (5, 39, 0) 396444 bytes (71954) +2010-07-04 14:34:59 0 files (0, 0, 0) 0 bytes (0) +2010-07-04 14:35:29 3 files (1, 2, 0) 4285 bytes (2847) +2010-07-04 14:35:59 51 files (18, 33, 0) 341742 bytes (81285) +2010-07-04 14:36:29 36 files (9, 26, 1) 1779423 bytes (1309108) +2010-07-04 14:36:59 8 files (0, 8, 0) 77751 bytes (22172) +2010-07-04 14:37:29 2 files (0, 2, 0) 42270 bytes (36992) +2010-07-04 14:37:59 21 files (0, 21, 0) 196535 bytes (30632) +2010-07-04 14:38:29 30 files (0, 30, 0) 244081 bytes (56840) +2010-07-04 14:38:59 14 files (1, 13, 0) 156581 bytes (39576) +2010-07-04 14:39:29 21 files (1, 20, 0) 176378 bytes (22528) +2010-07-04 14:39:59 47 files (1, 46, 0) 472401 bytes (37794) +2010-07-04 14:40:29 19 files (0, 19, 0) 258176 bytes (41172) +2010-07-04 14:40:59 55 files (5, 50, 0) 547908 bytes (41113) +2010-07-04 14:41:29 35 files (5, 30, 0) 797776 bytes (205952) +2010-07-04 14:41:59 2 files (0, 2, 0) 15628 bytes (8584) +2010-07-04 14:42:29 31 files (7, 24, 0) 714775 bytes (430807) +2010-07-04 14:42:59 38 files (10, 28, 0) 340243 bytes (86242) +2010-07-04 14:43:29 0 files (0, 0, 0) 0 bytes (0) +2010-07-04 14:43:59 51 files (3, 48, 0) 729936 bytes (102096) +2010-07-04 14:44:29 0 files (0, 0, 0) 0 bytes (0) +2010-07-04 14:44:59 40 files (19, 21, 0) 199313 bytes (49400) +2010-07-04 14:45:29 26 files (1, 25, 0) 373460 bytes (76020) +2010-07-04 14:45:59 17 files (2, 15, 0) 160348 bytes (53724) +2010-07-04 14:46:29 21 files (7, 14, 0) 218240 bytes (81617) +2010-07-04 14:46:59 3 files (2, 1, 0) 3035 bytes (1961) +2010-07-04 14:47:29 51 files (15, 36, 0) 380236 bytes (58229) +2010-07-04 14:47:59 8 files (1, 7, 0) 111551 bytes (47836) +2010-07-04 14:48:29 0 files (0, 0, 0) 0 bytes (0) +2010-07-04 14:48:59 36 files (8, 28, 0) 349285 bytes (47973) +2010-07-04 14:49:29 0 files (0, 0, 0) 0 bytes (0) +2010-07-04 14:49:59 0 files (0, 0, 0) 0 bytes (0) +2010-07-04 14:50:29 0 files (0, 0, 0) 0 bytes (0) +2010-07-04 14:50:59 14 files (3, 11, 0) 306151 bytes (150867) +2010-07-04 14:51:29 0 files (0, 0, 0) 0 bytes (0) +2010-07-04 14:51:59 17 files (0, 17, 0) 560532 bytes (102773) +2010-07-04 14:52:29 40 files (9, 31, 0) 700198 bytes (171887) +2010-07-04 14:52:59 15 files (7, 7, 1) 2365905 bytes (2170898) +2010-07-04 14:53:29 0 files (0, 0, 0) 0 bytes (0) +2010-07-04 14:53:59 3 files (0, 3, 0) 21068 bytes (18393) +2010-07-04 14:54:29 56 files (12, 44, 0) 588239 bytes (65080) +2010-07-04 14:54:59 2 files (0, 2, 0) 13714 bytes (12623) +2010-07-04 14:55:29 9 files (0, 9, 0) 93199 bytes (30398) +2010-07-04 14:55:59 19 files (5, 14, 0) 275232 bytes (46694) +2010-07-04 14:56:29 17 files (6, 11, 0) 259098 bytes (60240) +2010-07-04 14:56:59 0 files (0, 0, 0) 0 bytes (0) +2010-07-04 14:57:29 39 files (11, 28, 0) 1666180 bytes (640932) +2010-07-04 14:57:59 22 files (0, 22, 0) 752584 bytes (102773) +2010-07-04 14:58:29 14 files (3, 11, 0) 313501 bytes (96965) +2010-07-04 14:58:59 0 files (0, 0, 0) 0 bytes (0) +2010-07-04 14:59:29 7 files (0, 7, 0) 133949 bytes (74888) +2010-07-04 14:59:59 10 files (2, 8, 0) 33537 bytes (7069) +2010-07-04 15:00:29 34 files (20, 14, 0) 242703 bytes (171887) +2010-07-04 15:00:59 26 files (20, 6, 0) 52686 bytes (18979) +2010-07-04 15:01:29 13 files (8, 5, 0) 26281 bytes (7141) +2010-07-04 15:01:59 11 files (5, 5, 1) 2061332 bytes (1903984) +2010-07-04 15:02:29 49 files (24, 25, 0) 378404 bytes (203072) +2010-07-04 15:02:59 40 files (17, 23, 0) 86640 bytes (11000) +2010-07-04 15:03:29 19 files (9, 10, 0) 128134 bytes (82733) +2010-07-04 15:03:59 18 files (13, 4, 1) 5854464 bytes (5359033) +2010-07-04 15:04:29 49 files (25, 24, 0) 249161 bytes (109605) +2010-07-04 15:04:59 42 files (11, 31, 0) 1508473 bytes (1041876) +2010-07-04 15:05:29 17 files (0, 17, 0) 191522 bytes (36384) +2010-07-04 15:05:59 0 files (0, 0, 0) 0 bytes (0) +2010-07-04 15:06:29 9 files (1, 8, 0) 58844 bytes (16627) diff --git a/man/html/importdata/mover2pcp b/man/html/importdata/mover2pcp new file mode 100755 index 0000000..8d45e1a --- /dev/null +++ b/man/html/importdata/mover2pcp @@ -0,0 +1,277 @@ +#!/usr/bin/perl +# +# Import mover.log data and create a PCP archive +# +# mover.log lines ... +# 2010-07-04 13:50:32 54 files (24, 28, 2) 4097068 bytes (1451420) +# date +# time +# number of files moved +# number with size <= 1K +# number with size <= 1M +# number with size >1M +# aggregate size of moved files +# max file size +# +# Copyright (c) 2010 Ken McDonell. All Rights Reserved. +# +# 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; either version 2 of the License, or (at your +# option) any later version. +# +# This program 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 General Public License +# for more details. +# + +use strict; +use warnings; + +use Getopt::Std; +use Date::Parse; +use Date::Format; +use PCP::LogImport; + +my $line = 0; # input line number +my $basedate = undef; +my $basetime = "00:00:00"; +my $host = undef; +my $zone = "UTC"; # default timezone unless -Z on command line +my $sts; +my %options; # for command line arguments +my @handle = (); # pmi* handles, one per metric-instance pair +my $h = 0; # index into handle[] +my %inst_map = (); # key=indom value=last_inst_assigned, and + # key=indom.instance value=inst +my $putsts = 0; # pmiPutValue() errors are only checked @ end of loop +my $sz_indom = pmInDom_build(PMI_DOMAIN, 0); +my $nfile = 0; +my $nbyte = 0; +my @nfile_by_size = (0,0,0); + +# Initialize the PCP archive label fields +# +# PCP expects a $TZ style timezone in the archive label, so we have +# to make up a PCP-xx:xx timezone. +# Note this involves a sign reversal! +# +sub do_label() +{ + my $label_zone = $zone; + if ($zone =~ /^[-+][0-9][0-9][0-9][0-9]/) { + $label_zone =~ s/^\+/PCP-/; + $label_zone =~ s/^-/PCP+/; + $label_zone =~ s/(..)$/:$1/; + } + elsif ($zone ne "UTC") { + print "mover2pcp: Warning: unexpected timezone ($zone), reverting to UTC\n"; + $zone = "UTC"; + $label_zone = "UTC"; + } + pmiSetTimezone($label_zone) >= 0 + or die "pmiSetTimezone($label_zone): " . pmiErrStr(-1) . "\n"; + + if (defined($host)) { + pmiSetHostname($host) >= 0 + or die "pmiSetHostname($host): " . pmiErrStr(-1) . "\n"; + } +} + +# Handle metrics with the a singular value, calling pmiAddMetric() and +# pmiGetHandle() +# +sub def_single($) +{ + my ($name) = @_; + my $sts; + my $type = PM_TYPE_U32; + my $sem = PM_SEM_COUNTER; + my $units = pmiUnits(1,0,0,PM_SPACE_BYTE,0,0); + if ($name eq "mover.nfile") { + $units = pmiUnits(0,0,1,0,0,PM_COUNT_ONE); + } + elsif ($name eq "mover.nbyte") { + $type = PM_TYPE_U64; + } + elsif ($name eq "mover.max_file_size") { + $type = PM_TYPE_U64; + $sem = PM_SEM_INSTANT; + } + if (pmiAddMetric($name, PM_ID_NULL, $type, PM_INDOM_NULL, $sem, $units) < 0) { + pmiDump(); + die "pmiAddMetric($name, ...): " . pmiErrStr(-1) . "\n"; + } + $sts = pmiGetHandle($name, ""); + if ($sts < 0) { + pmiDump(); + die "pmiGetHandle($name, ...): " . pmiErrStr($sts) . "\n"; + } + push(@handle, $sts); +} + +# Handle metrics with multiple values, calling pmiAddMetric(). +# Defer to pmiGetHandle() to def_metric_inst(). +# +sub def_multi($$) +{ + my ($name,$indom) = @_; + my $type = PM_TYPE_U32; + my $sem = PM_SEM_COUNTER; + my $units = pmiUnits(0,0,1,0,0,PM_COUNT_ONE); + if (pmiAddMetric($name, PM_ID_NULL, $type, $indom, $sem, $units) < 0) { + pmiDump(); + die "pmiAddMetric($name, ...): " . pmiErrStr(-1) . "\n"; + } +} + +# Deal with metric-instance pairs. +# If first time this instance has been seen for this indom, add it to +# the instance domain. +# Get a handle and add it to handle[]. +# +sub def_metric_inst($$$) +{ + my ($name,$indom,$instance) = @_; + my $sts; + # inst_map{} holds the last allocated inst number with $indom as the + # key, and marks the instance as known with $indom . $instance as the + # key + if (!exists($inst_map{$indom . $instance})) { + my $inst; + if (exists($inst_map{$indom})) { + $inst_map{$indom}++; + $inst = $inst_map{$indom}; + } + else { + $inst_map{$indom} = 0; + $inst = 0; + } + if (pmiAddInstance($indom, $instance, $inst) < 0) { + pmiDump(); + die "pmiAddInstance([$name], $instance, $inst): " . pmiErrStr(-1) . "\n"; + } + $inst_map{$indom . $instance} = $inst; + } + $sts = pmiGetHandle($name, $instance); + if ($sts < 0) { + pmiDump(); + die "pmiGetHandle($name, $instance): " . pmiErrStr($sts) . "\n"; + } + push(@handle, $sts); +} + +# wrapper for pmiPutValueHandle(), using @handle +# +sub put($) +{ + my ($value) = @_; + my $sts; + if (!exists($handle[$h])) { + pmiDump(); + die <<EOF +put($value): No handle[] entry for index $h. +Check Handles in dump above. +EOF + } + $sts = pmiPutValueHandle($handle[$h], $value); + if ($sts < 0 && $putsts == 0) { $putsts = $sts }; + $h++; +} + +$sts = getopts('h:Z:', \%options); + +if (!defined($sts) || $#ARGV != 1) { + print "Usage: mover2pcp [-h host] [-Z timezone] infile outfile\n"; + exit(1); +} + +exists($options{h}) and $host = $options{t}; +if (exists($options{Z})) { + $zone = $options{Z}; + if ($zone !~ /^[-+][0-9][0-9][0-9][0-9]$/ && $zone ne "UTC") { + print "mover2pcp: Illegal -Z value, must be +NNNN or -NNNN or UTC\n"; + exit(1); + } +} + +pmiStart($ARGV[1], 0); +do_label(); + +open(INFILE, "<" . $ARGV[0]) + or die "mover2pcp: Failed to open infile \"$ARGV[0]\"\n"; + +# define metadata +def_single("mover.nfile"); +def_multi("mover.nfile_by_size", $sz_indom); +def_metric_inst("mover.nfile_by_size", $sz_indom, "<=1Kbyte"); +def_metric_inst("mover.nfile_by_size", $sz_indom, "<=1Mbyte"); +def_metric_inst("mover.nfile_by_size", $sz_indom, ">1Mbyte"); +def_single("mover.nbyte"); +def_single("mover.max_file_size"); + +while (<INFILE>) { + my @part; + chomp; + $line++; + print "[" . $line . "] $_\n"; + + # 2010-07-04 13:47:59 49 files (40, 9, 0) 118418 bytes (70669) + s/[(),]//g; # remove all (, ) and , + + @part = split(/\s+/, $_); + if ($#part != 9) { + print "[$line] $_\n"; + die "Number of values? expected 10, found " . ($#part+1) . "\n"; + } + + $nfile += $part[2]; + put($nfile); + $nfile_by_size[0] += $part[4]; + put($nfile_by_size[0]); + $nfile_by_size[1] += $part[5]; + put($nfile_by_size[1]); + $nfile_by_size[2] += $part[6]; + put($nfile_by_size[2]); + $nbyte += $part[7]; + put($nbyte); + put($part[9]); + + if ($putsts < 0) { + pmiDump(); + die "pmiPutValue: Failed @ $part[0] $part[1]: " . pmiErrStr($putsts) . "\n"; + } + if (pmiWrite(str2time($part[0] . "T" . $part[1], $zone), 0) < 0) { + pmiDump(); + die "pmiWrite: @ $part[0] $part[1]: " . pmiErrStr(-1) . "\n"; + } + $h = 0; + $putsts = 0; +} + +pmiEnd(); + +exit(0); + +=pod + +=head1 NAME + +mover2pcp - Import mover.log and create a PCP archive + +=head1 SYNOPSIS + +B<mover2pcp> [B<-Z> I<timezone>] I<infile> I<outfile> + +=head1 DESCRIPTION + +Add description here. + +=head1 SEE ALSO + +B<LOGIMPORT>(3), +B<PCP::LogImport>(3pm), +B<pmchart>(1), +B<pmie>(1) and +B<pmlogger>(1). diff --git a/man/html/importdata/moverv1 b/man/html/importdata/moverv1 new file mode 100755 index 0000000..431ffbe --- /dev/null +++ b/man/html/importdata/moverv1 @@ -0,0 +1,26 @@ +#!/usr/bin/perl +# +# Minimalist Version 1. +# + +use strict; +use warnings; +use Date::Parse; +use Date::Format; +use PCP::LogImport; + +pmiStart("mover_v1", 0); +pmiAddMetric("mover.nfile", + PM_ID_NULL, PM_TYPE_U32, PM_INDOM_NULL, + PM_SEM_INSTANT, pmiUnits(0,0,1,0,0,PM_COUNT_ONE)); + +open(INFILE, "<mover.log"); +while (<INFILE>) { + my @part; + chomp; + @part = split(/\s+/, $_); + pmiPutValue("mover.nfile", "", $part[2]); + pmiWrite(str2time($part[0] . "T" . $part[1], "UTC"), 0); +} + +pmiEnd(); diff --git a/man/html/importdata/moverv2 b/man/html/importdata/moverv2 new file mode 100755 index 0000000..4c376b8 --- /dev/null +++ b/man/html/importdata/moverv2 @@ -0,0 +1,29 @@ +#!/usr/bin/perl +# +# Minimalist Version 2. +# + +use strict; +use warnings; +use Date::Parse; +use Date::Format; +use PCP::LogImport; + +my $nfile = 0; + +pmiStart("mover_v2", 0); +pmiAddMetric("mover.nfile", + PM_ID_NULL, PM_TYPE_U32, PM_INDOM_NULL, + PM_SEM_COUNTER, pmiUnits(0,0,1,0,0,PM_COUNT_ONE)); + +open(INFILE, "<mover.log"); +while (<INFILE>) { + my @part; + chomp; + @part = split(/\s+/, $_); + $nfile += $part[2]; + pmiPutValue("mover.nfile", "", $nfile); + pmiWrite(str2time($part[0] . "T" . $part[1], "UTC"), 0); +} + +pmiEnd(); diff --git a/man/html/importdata/moverv3 b/man/html/importdata/moverv3 new file mode 100755 index 0000000..3899f75 --- /dev/null +++ b/man/html/importdata/moverv3 @@ -0,0 +1,40 @@ +#!/usr/bin/perl +# +# Minimalist Version 3. +# + +use strict; +use warnings; +use Date::Parse; +use Date::Format; +use PCP::LogImport; + +my $nfile = 0; +my $nbyte = 0; + +pmiStart("mover_v3", 0); +pmiAddMetric("mover.nfile", + PM_ID_NULL, PM_TYPE_U32, PM_INDOM_NULL, + PM_SEM_COUNTER, pmiUnits(0,0,1,0,0,PM_COUNT_ONE)); +pmiAddMetric("mover.nbyte", + PM_ID_NULL, PM_TYPE_U64, PM_INDOM_NULL, + PM_SEM_COUNTER, pmiUnits(1,0,0,PM_SPACE_BYTE,0,0)); +pmiAddMetric("mover.max_file_size", + PM_ID_NULL, PM_TYPE_U64, PM_INDOM_NULL, + PM_SEM_INSTANT, pmiUnits(1,0,0,PM_SPACE_BYTE,0,0)); + +open(INFILE, "<mover.log"); +while (<INFILE>) { + my @part; + chomp; + s/[(),]//g; # all remove (, ) and , + @part = split(/\s+/, $_); + $nfile += $part[2]; + pmiPutValue("mover.nfile", "", $nfile); + $nbyte += $part[7]; + pmiPutValue("mover.nbyte", "", $nbyte); + pmiPutValue("mover.max_file_size", "", $part[9]); + pmiWrite(str2time($part[0] . "T" . $part[1], "UTC"), 0); +} + +pmiEnd(); diff --git a/man/html/importdata/moverv4 b/man/html/importdata/moverv4 new file mode 100755 index 0000000..a84d085 --- /dev/null +++ b/man/html/importdata/moverv4 @@ -0,0 +1,54 @@ +#!/usr/bin/perl +# +# Minimalist Version 4. +# + +use strict; +use warnings; +use Date::Parse; +use Date::Format; +use PCP::LogImport; + +my $nfile = 0; +my $nbyte = 0; +my $sz_indom = pmInDom_build(PMI_DOMAIN, 0); +my @nfile_by_size = (0,0,0); + +pmiStart("mover_v4", 0); +pmiAddMetric("mover.nfile", + PM_ID_NULL, PM_TYPE_U32, PM_INDOM_NULL, + PM_SEM_COUNTER, pmiUnits(0,0,1,0,0,PM_COUNT_ONE)); +pmiAddMetric("mover.nfile_by_size", + PM_ID_NULL, PM_TYPE_U32, $sz_indom, + PM_SEM_COUNTER, pmiUnits(0,0,1,0,0,PM_COUNT_ONE)); +pmiAddInstance($sz_indom, "<=1Kbyte", 0); +pmiAddInstance($sz_indom, "<=1Mbyte", 1); +pmiAddInstance($sz_indom, ">1Mbyte", 2); +pmiAddMetric("mover.nbyte", + PM_ID_NULL, PM_TYPE_U64, PM_INDOM_NULL, + PM_SEM_COUNTER, pmiUnits(1,0,0,PM_SPACE_BYTE,0,0)); +pmiAddMetric("mover.max_file_size", + PM_ID_NULL, PM_TYPE_U64, PM_INDOM_NULL, + PM_SEM_INSTANT, pmiUnits(1,0,0,PM_SPACE_BYTE,0,0)); + +open(INFILE, "<mover.log"); +while (<INFILE>) { + my @part; + chomp; + s/[(),]//g; # all remove (, ) and , + @part = split(/\s+/, $_); + $nfile += $part[2]; + pmiPutValue("mover.nfile", "", $nfile); + $nfile_by_size[0] += $part[4]; + pmiPutValue("mover.nfile_by_size", "<=1Kbyte", $nfile_by_size[0]); + $nfile_by_size[1] += $part[5]; + pmiPutValue("mover.nfile_by_size", "<=1Mbyte", $nfile_by_size[1]); + $nfile_by_size[2] += $part[6]; + pmiPutValue("mover.nfile_by_size", ">1Mbyte", $nfile_by_size[2]); + $nbyte += $part[7]; + pmiPutValue("mover.nbyte", "", $nbyte); + pmiPutValue("mover.max_file_size", "", $part[9]); + pmiWrite(str2time($part[0] . "T" . $part[1], "UTC"), 0); +} + +pmiEnd(); diff --git a/man/html/index.html b/man/html/index.html new file mode 100644 index 0000000..d8ae702 --- /dev/null +++ b/man/html/index.html @@ -0,0 +1,91 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> +<HTML> +<HEAD> + <meta http-equiv="content-type" content="text/html; charset=utf-8"> + <meta http-equiv="content-style-type" content="text/css"> + <link href="pcpdoc.css" rel="stylesheet" type="text/css"> + <link href="images/pcp.ico" rel="icon" type="image/ico"> + <TITLE>PCP Manual</TITLE> +</HEAD> +<BODY LANG="en-AU" TEXT="#000060" DIR="LTR"> +<TABLE WIDTH=100% BORDER=0 CELLPADDING=0 CELLSPACING=0 STYLE="page-break-before: always"> + <TR> <TD WIDTH=64 HEIGHT=64><A HREF="http://pcp.io/"><IMG SRC="images/pcpicon.png" NAME="pcpicon" ALIGN=TOP WIDTH=64 HEIGHT=64 BORDER=0></A></TD> + <TD WIDTH=1><P> </P></TD> + <TD WIDTH=500><P VALIGN=MIDDLE ALIGN=LEFT><A HREF="index.html"><FONT COLOR="#cc0000">Home</FONT></A> · <A HREF="lab.pmchart.html"><FONT COLOR="#cc0000">Charts</FONT></A> · <A HREF="timecontrol.html"><FONT COLOR="#cc0000">Time Control</FONT></A></P></TD> + </TR> +</TABLE> +<H1 ALIGN=CENTER STYLE="margin-top: 0.48cm; margin-bottom: 0.32cm"><FONT SIZE=7>PCP Manual</FONT></H1> +<TABLE WIDTH=100% BORDER=0 CELLPADDING=0 CELLSPACING=0 BGCOLOR="#e2e2e2"> + <TR><TD WIDTH=100% BGCOLOR="#081c59"><P ALIGN=LEFT><FONT SIZE=5 COLOR="#ffffff"><B><A NAME="starting">Getting Started</A></B></FONT></P></TD></TR> +</TABLE> +<TABLE WIDTH=100% BORDER=0 CELLPADDING=0 CELLSPACING=10 BGCOLOR="#e2e2e2"> + <TR><TD WIDTH=50%><UL> + <LI><A HREF="pcpintro.html"><FONT COLOR="#000060">Introduction to PCP</FONT></A> + <LI><A HREF="installation.html"><FONT COLOR="#000060">Installation</FONT></A> + <LI><A HREF="guide.redhat.html"><FONT COLOR="#000060">Quick Reference Guide (Red Hat)</FONT></A> + </UL></TD> + <TD WIDTH=50%><UL> + <LI><A HREF="overview.html"><FONT COLOR="#000060">Charts Overview</FONT></A> + <LI><A HREF="timecontrol.html"><FONT COLOR="#000060">Time Control Overview</FONT></A> + </UL></TD></TR> +</TABLE> +<TABLE WIDTH=100% BORDER=0 CELLPADDING=0 CELLSPACING=0 BGCOLOR="#e2e2e2"> + <TR><TD WIDTH=100% BGCOLOR="#081c59"><P ALIGN=LEFT><FONT SIZE=5 COLOR="#ffffff"><B><A NAME="tutorials">Tutorials</A></B></FONT></P></TD></TR> +</TABLE> +<TABLE WIDTH=100% BORDER=0 CELLPADDING=0 CELLSPACING=10 BGCOLOR="#e2e2e2"> + <TR> <TD WIDTH=50%><UL> + <LI><A HREF="lab.pmchart.html"><FONT COLOR="#000060">Using Charts</FONT></A> + <LI><A HREF="lab.pmlogger.html"><FONT COLOR="#000060">Logging Basics</FONT></A> + <LI><A HREF="#lab.pmlogconf.html"><FONT COLOR="#ffffff">Configuring Logging</FONT></A> + <LI><A HREF="lab.pmie.html"><FONT COLOR="#000060">Automated Reasoning Basics</FONT></A> + <LI><A HREF="lab.pmieconf.html"><FONT COLOR="#000060">Configuring Automated Reasoning</FONT></A> + <LI><A HREF="lab.secure.html"><FONT COLOR="#000060">Secure Connections</FONT></A> + </UL></TD> + <TD WIDTH=50%><UL> + <LI><A HREF="lab.auth.html"><FONT COLOR="#000060">Authenticated Connections</FONT></A> + <LI><A HREF="#lab.pmdas.html"><FONT COLOR="#ffffff">Adding metrics <I>(C, Perl, Python)</I></FONT></A> + <LI><A HREF="#lab.mmapvalues.html"><FONT COLOR="#ffffff">Adding metrics using the MMV agent <I>(C, Perl, Java)</I></FONT></A> + <LI><A HREF="lab.trace.html"><FONT COLOR="#000060">Adding metrics using the trace agent</FONT></A> <I>(C, sh)</I> + <LI><A HREF="lab.importdata.html"><FONT COLOR="#000060">Importing data and creating PCP archives <I>(C, Perl)</I></FONT></A> + <LI><A HREF="lab.pmview.html"><FONT COLOR="#000060">Using 3D Views <I>(experimental)</I></FONT></A> + </UL></TD></TR> +</TABLE> +<TABLE WIDTH=100% BORDER=0 CELLPADDING=0 CELLSPACING=0 BGCOLOR="#e2e2e2"> + <TR><TD WIDTH=100% BGCOLOR="#081c59"><P ALIGN=LEFT><FONT SIZE=5 COLOR="#ffffff"><B><A NAME="casestudies">Case Studies</A></B></FONT></P></TD></TR> +</TABLE> +<TABLE WIDTH=100% BORDER=0 CELLPADDING=0 CELLSPACING=10 BGCOLOR="#e2e2e2"> + <TR><TD WIDTH=50%><UL> + <LI><A HREF="howto.cpuperf.html"><FONT COLOR="#000060">Analysing processor utilisation</FONT></A> + <LI><A HREF="howto.diskperf.html"><FONT COLOR="#000060">Analysing storage performance</FONT></A> + <LI><A HREF="howto.systemlog.html"><FONT COLOR="#000060">System Event Log Instrumentation</FONT></A> + </UL></TD> + <TD WIDTH=50%><UL> + <LI><A HREF="howto.diskmodel.html"><FONT COLOR="#000060">Comparing storage performance</FONT></A> + <LI><A HREF="howto.enterprise.html"><FONT COLOR="#000060">Management framework integration</FONT></A> + </UL></TD> </TR> +</TABLE> +<TABLE WIDTH=100% BORDER=0 CELLPADDING=0 CELLSPACING=0 BGCOLOR="#e2e2e2"> + <TR><TD WIDTH=100% BGCOLOR="#081c59"><P ALIGN=LEFT><FONT SIZE=5 COLOR="#ffffff"><B>Footnotes</B></FONT></P></TD></TR> +</TABLE> +<TABLE WIDTH=100% BORDER=0 CELLPADDING=0 CELLSPACING=10 BGCOLOR="#e2e2e2"> + <TR><TD WIDTH=50%><UL> + <LI><A HREF="glossary.html"><FONT COLOR="#000060">Glossary</FONT></A> + <LI><A HREF="contacts.html"><FONT COLOR="#000060">Contacts</FONT></A> + <LI><A HREF="credits.html"><FONT COLOR="#000060">Credits</FONT></A> + </UL></TD> + <TD WIDTH=50%><UL> + <LI><A HREF="gpl.html"><FONT COLOR="#000060">GNU GPL</FONT></A> + <LI><A HREF="qwtlicense.html"><FONT COLOR="#000060">QWT License</FONT></A> + <LI><A HREF="cclicense.html"><FONT COLOR="#000060">Creative Commons License</FONT></A> + <BR> + </UL></TD></TR> +</TABLE> +<HR> +<CENTER> +<TABLE WIDTH=100% BORDER=0 CELLPADDING=0 CELLSPACING=0> + <TR> <TD WIDTH=50%><P>Copyright © 2007-2010 <A HREF="http://www.aconex.com/"><FONT COLOR="#000060">Aconex</FONT></A><BR>Copyright © 2000-2004 <A HREF="http://www.sgi.com/"><FONT COLOR="#000060">Silicon Graphics Inc</FONT></P></TD> + <TD WIDTH=50%><P ALIGN=RIGHT><A HREF="http://pcp.io/"><FONT COLOR="#000060">PCP Site</FONT></A><BR>Copyright © 2012-2014 <A HREF="http://www.redhat.com/"><FONT COLOR="#000060">Red Hat</FONT></P></TD> </TR> +</TABLE> +</CENTER> +</BODY> +</HTML> diff --git a/man/html/installation.html b/man/html/installation.html new file mode 100644 index 0000000..f5a077c --- /dev/null +++ b/man/html/installation.html @@ -0,0 +1,143 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> +<HTML> +<HEAD> + <meta http-equiv="content-type" content="text/html; charset=utf-8"> + <meta http-equiv="content-style-type" content="text/css"> + <link href="pcpdoc.css" rel="stylesheet" type="text/css"> + <link href="images/pcp.ico" rel="icon" type="image/ico"> + <TITLE>PCP Installation</TITLE> +</HEAD> +<BODY LANG="en-AU" TEXT="#000060" DIR="LTR"> +<TABLE WIDTH=100% BORDER=0 CELLPADDING=0 CELLSPACING=0 STYLE="page-break-before: always"> + <TR> <TD WIDTH=64 HEIGHT=64><A HREF="http://pcp.io/"><IMG SRC="images/pcpicon.png" NAME="pcpicon" ALIGN=TOP WIDTH=64 HEIGHT=64 BORDER=0></A></TD> + <TD WIDTH=1><P> </P></TD> + <TD WIDTH=500><P VALIGN=MIDDLE ALIGN=LEFT><A HREF="index.html"><FONT COLOR="#cc0000">Home</FONT></A> · <A HREF="lab.pmchart.html"><FONT COLOR="#cc0000">Charts</FONT></A> · <A HREF="timecontrol.html"><FONT COLOR="#cc0000">Time Control</FONT></A></P></TD> + </TR> +</TABLE> +<H1 ALIGN=CENTER STYLE="margin-top: 0.48cm; margin-bottom: 0.32cm"><FONT SIZE=7>Installation</FONT></H1> +<P>Binary packages for Linux (<i>deb</i> and <i>rpm</i> formats), Mac OS X, Solaris and Windows are made available by the PCP development team. The latest version can always be found in the download section of the <A HREF="http://pcp.io/">PCP project</A> web pages. Its also worth noting that many Linux distributions now ship PCP - these include Debian, Fedora, Slackware, SuSE and Ubuntu.</P> +<P>PCP GUI runs natively on Mac OS X, X11 (Linux/Unix) and Windows, and binary packages for these platforms are available in the same location. The installation instructions for each differ significantly - below we discuss each in turn, and finally cover building the tools from source.</P> +<UL> + <LI><A HREF="#rpm">Linux (rpm format)</A> + <LI><A HREF="#deb">Linux (deb format)</A> + <LI><A HREF="#mac">Mac OS X</A> + <LI><A HREF="#sun">Solaris</A> + <LI><A HREF="#win">Windows</A> + <LI><A HREF="#src">Building from source</A> +</UL> +<P>The typical PCP installation is conceptually divided into two major components - <A HREF="glossary.html#collector">collectors</A> and <A HREF="glossary.html#monitor">monitors</A>. There are usually multiple systems of each type in any given deployment.</P> +<P>For server-focussed systems (Linux in particular) PCP is literally divided into multiple packages along these lines, with separate PCP and PCP GUI packages (primarily due to dependencies on graphical libraries which are unlikely to be installed on a Linux server). On the other platforms, like Mac OS X and Windows, this is less of an issue and so a single PCP package is shipped which covers both needs.</P> +<P>PCP GUI has a runtime dependency on the Qt4 shared libraries. These are usually available from a package named <B>qt4</B>. Versions before Qt4.4 of the Qt libraries <I><B>will not work</B></I>.</P> + +<P><BR></P> +<TABLE WIDTH=100% BORDER=0 CELLPADDING=0 CELLSPACING=0 BGCOLOR="#e2e2e2"> + <TR><TD WIDTH=100% BGCOLOR="#081c59"><P ALIGN=LEFT><FONT SIZE=5 COLOR="#ffffff"><B>Linux using <A NAME="rpm"><I>rpm</I></A> format (Fedora, RHEL, SuSE)</B></FONT></P></TD></TR> +</TABLE> +<TABLE WIDTH=100% BORDER=0 CELLPADDING=10 CELLSPACING=20> + <TR><TD BGCOLOR="#e2e2e2" WIDTH=70%><BR><IMG SRC="images/stepfwd_on.png" WIDTH=16 HEIGHT=16 BORDER=0> If using packages <B>from your distribution</B>, in a command shell enter:<BR> +<PRE><B> +# yum install pcp pcp-gui +</B></PRE> +<BR> + If using packages <B>downloaded from ftp.pcp.io</B>, in a command shell enter:<BR> +<PRE><B> +# rpm -Uvh *pcp*.rpm +</B></PRE> +<BR> +</TD></TR> +</TABLE> +<TABLE WIDTH=100% BORDER=0 CELLPADDING=0 CELLSPACING=0 BGCOLOR="#e2e2e2"> + <TR><TD WIDTH=100% BGCOLOR="#081c59"><P ALIGN=LEFT><FONT SIZE=5 COLOR="#ffffff"><B>Linux using <A NAME="deb"><I>deb</I></A> format (Debian, Ubuntu)</B></FONT></P></TD></TR> +</TABLE> +<TABLE WIDTH=100% BORDER=0 CELLPADDING=10 CELLSPACING=20> + <TR><TD BGCOLOR="#e2e2e2" WIDTH=70%><BR><IMG SRC="images/stepfwd_on.png" WIDTH=16 HEIGHT=16 BORDER=0> If using packages <B>from your distribution</B>, in a command shell enter:<BR> +<PRE><B> +# apt-get install pcp pcp-gui +</B></PRE> +<BR> + If using packages <B>downloaded from ftp.pcp.io</B>, in a command shell enter:<BR> +<PRE><B> +# dpkg -i *pcp*.deb +</B></PRE> +<BR> +</TD></TR> +</TABLE> +<TABLE WIDTH=100% BORDER=0 CELLPADDING=0 CELLSPACING=0 BGCOLOR="#e2e2e2"> + <TR><TD WIDTH=100% BGCOLOR="#081c59"><P ALIGN=LEFT><FONT SIZE=5 COLOR="#ffffff"><B><A NAME="mac">Mac</A> OS X Installation</B></FONT></P></TD></TR> +</TABLE> +<TABLE WIDTH=100% BORDER=0 CELLPADDING=10 CELLSPACING=20> + <TR><TD BGCOLOR="#e2e2e2" WIDTH=70%><BR><IMG SRC="images/stepfwd_on.png" WIDTH=16 HEIGHT=16 BORDER=0> After downloading the <I>dmg</I> file for your platform, double-click on the PCP <I>dmg</I> icon, and follow the installation instructions presented by the Installer.<BR> +<BR> +</TD></TR> +</TABLE> +<TABLE WIDTH=100% BORDER=0 CELLPADDING=0 CELLSPACING=0 BGCOLOR="#e2e2e2"> + <TR><TD WIDTH=100% BGCOLOR="#081c59"><P ALIGN=LEFT><FONT SIZE=5 COLOR="#ffffff"><B><A NAME="sun">Solaris</A> Installation</B></FONT></P></TD></TR> +</TABLE> +<TABLE WIDTH=100% BORDER=0 CELLPADDING=10 CELLSPACING=20> + <TR><TD BGCOLOR="#e2e2e2" WIDTH=70%><BR><IMG SRC="images/stepfwd_on.png" WIDTH=16 HEIGHT=16 BORDER=0> After downloading (and gunzip'ing) the binary package, to perform a fresh install:<BR> +<PRE><B> +# pkgadd -d pcp-X.Y.Z +<I> Say 'y' to all the questions</I> +# svcadm enable pmcd +</B></PRE><BR> +Or to update to a newer version: +<PRE><B> +# pkgrm pcp-X.Y.OLD +# pkgadd -d pcp X.Y.Z +# svcadm enable pmcd +</B></PRE> +<BR> +</TD></TR> +</TABLE> +<TABLE WIDTH=100% BORDER=0 CELLPADDING=0 CELLSPACING=0 BGCOLOR="#e2e2e2"> + <TR><TD WIDTH=100% BGCOLOR="#081c59"><P ALIGN=LEFT><FONT SIZE=5 COLOR="#ffffff"><B><A NAME="win">Windows</A> Installation</B></FONT></P></TD></TR> +</TABLE> +<TABLE WIDTH=100% BORDER=0 CELLPADDING=10 CELLSPACING=20> + <TR><TD BGCOLOR="#e2e2e2" WIDTH=70%><BR><IMG SRC="images/stepfwd_on.png" WIDTH=16 HEIGHT=16 BORDER=0> After downloading the PCP Glider <I>msi</I> file, right-click on the command prompt icon, select <I><B>Run As Administrator</B></I>, and enter:<BR> +<PRE><B> +# msiexec /i pcp-glider-*.msi +# cd C:\Glider\scripts +# postinst.bat +</B></PRE><BR> +Before upgrading or removing PCP Glider, run: +<PRE><B> +# cd C:\Glider\scripts +# prerm.bat +</B></PRE><BR> +The command line utilities can now be accessed from a Windows shell or the provided (POSIX) shell. The graphical tools can be accessed via the Windows <I>Start</I> menu. +<BR> +</TD></TR> +</TABLE> + +<TABLE WIDTH=100% BORDER=0 CELLPADDING=0 CELLSPACING=0 BGCOLOR="#e2e2e2"> + <TR><TD WIDTH=100% BGCOLOR="#081c59"><P ALIGN=LEFT><FONT SIZE=5 COLOR="#ffffff"><B>Building from <A NAME="src">source</A></B></FONT></P></TD></TR> +</TABLE> +<P>The best way to build PCP is to use the <B>git</B> source code management (SCM) tools. This SCM is freely available and runs natively on many different platforms. +<TABLE WIDTH=100% BORDER=0 CELLPADDING=10 CELLSPACING=20> + <TR><TD BGCOLOR="#e2e2e2" WIDTH=70%><BR><IMG SRC="images/stepfwd_on.png" WIDTH=16 HEIGHT=16 BORDER=0> First, get the current version of the source code:<BR> +<PRE><B> +$ git clone git://git.pcp.io/pcp +</B></PRE><BR> +Then build and install: +<PRE><B> +$ cd pcp +$ ./configure --prefix=/usr --sysconfdir=/etc --localstatedir=/var +$ make +# make install +</B></PRE> +<BR> +</TD></TR> +</TABLE> +<P>When building from source, you'll need to ensure you have the following tools and libraries installed: a C compiler (for core PCP), a C++ compiler (for PCP GUI), <I>autoconf</I>, <I>lex</I>, <I>yacc</I>, and the Qt4 development tools (including <I>qmake</I>), libraries and headers. On Mac OS X, the Apple <I>Xcode</I> development environment is also required, as it is used by the Qt application build process. <I>Inkscape</I> - a Scalable Vector Graphics (SVG) editor - can be used to modify the icons, but is not required during the build process.</P> +<P>If you encounter difficulties building PCP, consult the <A HREF="contacts.html">contacts page</A> which contains contact information for people who can provide additional assistance.</P> + +<P><BR></P> +<HR> +<CENTER> +<TABLE WIDTH=100% BORDER=0 CELLPADDING=0 CELLSPACING=0> + <TR> <TD WIDTH=50%><P>Copyright © 2007-2010 <A HREF="http://www.aconex.com/"><FONT COLOR="#000060">Aconex</FONT></A><BR>Copyright © 2000-2004 <A HREF="http://www.sgi.com/"><FONT COLOR="#000060">Silicon Graphics Inc</FONT></P></TD> + <TD WIDTH=50%><P ALIGN=RIGHT><A HREF="http://pcp.io/"><FONT COLOR="#000060">PCP Site</FONT></A><BR>Copyright © 2012-2014 <A HREF="http://www.redhat.com/"><FONT COLOR="#000060">Red Hat</FONT></P></TD> </TR> +</TABLE> +</CENTER> +</BODY> +</HTML> diff --git a/man/html/lab.auth.html b/man/html/lab.auth.html new file mode 100644 index 0000000..26c6ddf --- /dev/null +++ b/man/html/lab.auth.html @@ -0,0 +1,427 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<!-- + (c) Copyright 2013 Red Hat. + Permission is granted to copy, distribute, and/or modify this document + under the terms of the Creative Commons Attribution-Share Alike, Version + 3.0 or any later version published by the Creative Commons Corp. A copy + of the license is available at + http://creativecommons.org/licenses/by-sa/3.0/us/ . +--> +<HTML> +<HEAD> + <meta http-equiv="content-type" content="text/html; charset=utf-8"> + <meta http-equiv="content-style-type" content="text/css"> + <link href="pcpdoc.css" rel="stylesheet" type="text/css"> + <link href="images/pcp.ico" rel="icon" type="image/ico"> + <TITLE>Authenticated Connections</TITLE> +</HEAD> +<BODY LANG="en-AU" TEXT="#000060" DIR="LTR"> +<TABLE WIDTH=100% BORDER=0 CELLPADDING=0 CELLSPACING=0 STYLE="page-break-before: always"> + <TR> <TD WIDTH=64 HEIGHT=64><FONT COLOR="#000080"><A HREF="http://pcp.io/"><IMG SRC="images/pcpicon.png" NAME="pmcharticon" ALIGN=TOP WIDTH=64 HEIGHT=64 BORDER=0></A></FONT></TD> + <TD WIDTH=1><P> </P></TD> + <TD WIDTH=500><P VALIGN=MIDDLE ALIGN=LEFT><A HREF="index.html"><FONT COLOR="#cc0000">Home</FONT></A> · <A HREF="lab.pmchart.html"><FONT COLOR="#cc0000">Charts</FONT></A> · <A HREF="timecontrol.html"><FONT COLOR="#cc0000">Time Control</FONT></A></P></TD> + </TR> +</TABLE> +<H1 ALIGN=CENTER STYLE="margin-top: 0.48cm; margin-bottom: 0.32cm"><FONT SIZE=7>Authenticated Connections</FONT></H1> +<TABLE WIDTH=15% BORDER=0 CELLPADDING=5 CELLSPACING=10 ALIGN=RIGHT> + <TR><TD BGCOLOR="#e2e2e2"><IMG SRC="images/system-search.png" WIDTH=16 HEIGHT=16 BORDER=0> <I>Tools</I><BR><PRE> +pmcd +pminfo +pmchart +pmconfig +pmdaproc +pluginviewer +saslauthd +saslpasswd2 +sasldblistusers2 +kadmin.local +kinit +klist +</PRE></TD></TR> +</TABLE> +<P>This chapter of the Performance Co-Pilot tutorial covers setting up authenticated +connections between PCP collector and monitor components. +An authenticated connection is one where the PCP collector (<B>pmcd</B> and PMDAs) +is made aware of the credentials of the user running the monitor tools. +This allows the PCP collector software to perform two important functions: +<OL> + <LI> Grant additional access, allowing potentially sensitive information to be + accessed by the authenticated user; + <LI> Make access control decisions for users and groups in order to prevent + inappropriate access to metrics or over-subscription of server resources. +</OL> +<P>For an explanation of Performance Co-Pilot terms and acronyms, consult +the <A HREF="glossary.html">PCP glossary</A>.</P> +<UL> + <LI> <A HREF="#overview">Overview</A> + <LI> <A HREF="#unix">Local Credentials</A> + <LI> <A HREF="#sasl">Remote Access</A> + <UL> + <LI> <A HREF="#sasldb">Using sasldb</A> + <LI> <A HREF="#saslauthd">Using saslauthd</A> + <LI> <A HREF="#gssapi">Kerberos (GSSAPI)</A> + </UL> +</UL> +<P>Note: remote host authentication will often warrant the configuration of secure +connections between PCP monitors and collectors - this is covered by a separate +tutorial: <A HREF="lab.secure.html">Secure Connections</A>.</P> + +<P><BR></P> +<TABLE WIDTH=100% BORDER=0 CELLPADDING=0 CELLSPACING=0 BGCOLOR="#e2e2e2"> + <TR><TD WIDTH=100% BGCOLOR="#081c59"><P ALIGN=LEFT><FONT SIZE=5 COLOR="#ffffff"><B><A NAME="overview">Overview</I></A></B></FONT></P></TD></TR> +</TABLE> +<P>All connections made to the PCP metrics collector daemon (<B>pmcd</B>) +are made using the PCP protocol, which is TCP/IP based. Traditionally, no +functionality was available to identify the user making a connection between +a PCP monitor and collector. However, as PCP evolved to be able to export +sensitive information (event trace parameters and detailed per-process +statistics, for example), it became necessary to provide such mechanisms.</P> + +<P>The Performance Co-Pilot has two facilities for transfering credentials +between the monitoring and collecting components - a local-host-only facility +using Unix domain sockets, and SASL-based authentication which can be over +either IPv4 or IPv6 sockets (local or remote).</P> + +<P><BR></P> +<TABLE WIDTH=100% BORDER=0 CELLPADDING=0 CELLSPACING=0 BGCOLOR="#e2e2e2"> + <TR><TD WIDTH=100% BGCOLOR="#081c59"><P ALIGN=LEFT><FONT SIZE=5 COLOR="#ffffff"><B><A NAME="unix">Local Credentials</A></B></FONT></P></TD></TR> +</TABLE> + +<P>For local connections, there is a fast local transport mechanism +using Unix domain sockets. These sockets provide a facility whereby the +userid and groupid of the monitor process is automatically made available +to the collector process, with no user intervention being required.</P> + +<P>This will become the default localhost transport mechanism over time. +However, its use can be requested via the <I>unix:</I> host specification +(<B>-h</B> option) with all monitor tools.</P> + +<P>In the following exercise, we make use of per-process metrics from the +<B>pmdaproc</B> PCP Collector agent. +This PMDA is enabled by default, and makes use of authenticated credentials +from the monitor tools to gate access to sensitive information - process +identifiers, names, arguments, and so forth. +In modern versions of PCP, this information is unavailable (PM_ERR_PERMISSION +is returned) unless the PMDA has been given user credentials.</P> + +<TABLE WIDTH=100% BORDER=0 CELLPADDING=10 CELLSPACING=20> + <TR><TD BGCOLOR="#e2e2e2" WIDTH=70%><BR><IMG SRC="images/stepfwd_on.png" WIDTH=16 HEIGHT=16 BORDER=0> Check for support, then establish a Unix domain socket connection with automatic credentials transfer:<BR> +<PRE><B> +$ pmconfig -L | grep ^unix +unix_domain_sockets=true + +$ pmprobe -f -h localhost proc.fd.count +proc.fd.count -12387 No permission to perform requested operation + +$ pmprobe -f -h unix: proc.fd.count +proc.fd.count 118 + +$ pminfo -dmt -h unix: proc.fd.count + +proc.fd.count PMID: 3.51.0 [open file descriptors] + Data Type: 32-bit unsigned int InDom: 3.9 0xc00009 + Semantics: instant Units: count +</B></PRE> +</TD></TR> +</TABLE> + +<P>A <I>local:</I> specification is also available, which indicates that +the monitor tool should first attempt to establish a Unix domain socket +connection (with automatic credentials transfer), but failing that fall back +to the traditional socket connection style (with no credentials transfer, +unless mandated by collector or explicitly requested by the monitor user - +described later in this tutorial).</P> + +<P><B>Note:</B> this facility is completely independent and separate +to the remote access facility (described later). +Therefore, it can still be used even when support for the remote +authentication facilities is unavailable or not configured. +This local facility is always enabled on platforms that support it - these +include Linux, Mac OS X and Solaris. +</P> + +<P><BR></P> +<TABLE WIDTH=100% BORDER=0 CELLPADDING=0 CELLSPACING=0 BGCOLOR="#e2e2e2"> + <TR><TD WIDTH=100% BGCOLOR="#081c59"><P ALIGN=LEFT><FONT SIZE=5 COLOR="#ffffff"><B><A NAME="sasl">Remote Access</A></B></FONT></P></TD></TR> +</TABLE> + +<P>The alternative authentication facility is the "Simple Authentication and +Security Layer" (SASL) which provides for remote authentication. +Usually this would be used with a <A HREF="lab.secure.html">secure connection</A> +to ensure sensitive information is not transmitted in the clear.</P> + +<P>SASL can be configured with many different authentication mechanisms, and this +configuration is done transparently (outside of PCP, as described shortly). +This list of mechanisms can be changed via the <I>mech_list</I> entry in the +<I>/etc/sasl2/pmcd.conf</I> file, along with other critical security parameters +defining how <B>pmcd</B> should handle authentication requests. + +The <I>mech_list</I> can be set to any one of the installed SASL mechanisms, +or a space-separated list of mechanisms from which the monitor tools can select. +There are also situations where it makes sense to not set <I>mech_list</I> at +all, which we will explore shortly.</P> + +<P>To make use of SASL-based authentication, both monitor and collector systems +need to be capable of running the SASL code (PCP support, in particular, must +be present on each end of the connection). +As demonstrated in the following examples, we can use both the <B>pmconfig</B> +PCP command and the <B>pluginviewer</B> SASL command to interogate aspects of +the installations on each end of a connection. +The <B>pluginviewer</B> command has separate options for reporting on client +(<B>-c</B>) and server (<B>-s</B>) components of an installation. +</P> + +<I><B><A NAME="sasldb">Using sasldb</A></B></I> +<P>The SASL library provides a custom authentication technique, independent +to the set of users and groups on a system, called <I>sasldb</I>. +This involves the creation of a new authentication database separate to the +native login mechanisms that a host provides. One advantage of using it is +that it does not require any special privileges on the part of the daemon +performing authentication (<B>pmcd</B> in our case - which does not run as +a privileged process and thus typically cannot be used with the common +authentication databases, such as the <I>/etc/shadow</I> mechanism).</P> + +<P>The <I>sasldb</I> approach can be used with several SASL mechanisms, and +it is commonly used to verify a SASL setup. Here, we will configure PCP to +use <I>sasldb</I> by allowing the "plain" SASL mechanism to +authenticate against it.</P> + +<TABLE WIDTH=100% BORDER=0 CELLPADDING=10 CELLSPACING=20> + <TR><TD BGCOLOR="#e2e2e2" WIDTH=70%><BR><IMG SRC="images/stepfwd_on.png" WIDTH=16 HEIGHT=16 BORDER=0> Check for support:<BR> +<PRE><B> +$ pmconfig -L | egrep '^auth|^secure' +secure_sockets=true +authentication=true + +$ pluginviewer -s -m PLAIN +[...] +Plugin "plain" [loaded], API version: 4 + SASL mechanism: PLAIN, best SSF: 0, supports setpass: no + security flags: NO_ANONYMOUS|PASS_CREDENTIALS + features: WANT_CLIENT_FIRST|PROXY_AUTHENTICATION +</B></PRE> +</TD></TR> +</TABLE> + +<P>Modify the <I>/etc/sasl2/pmcd.conf</I> configuration file, so that it makes +"plain" authentication available to PCP monitor tools, and also +to specify the location of the SASL credentials database file.</P> + +<P>By default, this has been specified as <I>/etc/pcp/passwd.db</I>. +SASL commands allow this database to be manipulated - adding, listing and +deleting users, setting their passwords, and so on.</P> + +<TABLE WIDTH=100% BORDER=0 CELLPADDING=10 CELLSPACING=20> + <TR><TD BGCOLOR="#e2e2e2" WIDTH=70%><BR><IMG SRC="images/stepfwd_on.png" WIDTH=16 HEIGHT=16 BORDER=0> Configure the SASL library:<BR> +<PRE><B> +# grep PCP_SASLCONF_DIR /etc/pcp.conf +PCP_SASLCONF_DIR=/etc/sasl2 + +# cat $PCP_SASLCONF_DIR/sasl2/pmcd.conf +mech_list: plain digest-md5 gssapi +sasldb_path: /etc/pcp/passwd.db +</B></PRE> +</TD></TR> +</TABLE> + +<P>Next we create the database and add some users to it. +Note that requires the previous step to have been performed, +as that informs the tools about the location of the database.</P> + +<TABLE WIDTH=100% BORDER=0 CELLPADDING=10 CELLSPACING=20> + <TR><TD BGCOLOR="#e2e2e2" WIDTH=70%><BR><IMG SRC="images/stepfwd_on.png" WIDTH=16 HEIGHT=16 BORDER=0> Administer the SASL database (add, list and disable users):<BR> +<PRE><B> +# saslpasswd2 -a pmcd jack +Password: xxxxxx +Again (for verification): xxxxxx + +# saslpasswd2 -a pmcd jill +Password: xxxxxx +Again (for verification): xxxxxx + +# sasldblistusers2 -f /etc/pcp/passwd.db +jack@server.demo.net: userPassword +jill@server.demo.net: userPassword + +# saslpasswd2 -a pmcd -d jill + +# $PCP_RC_DIR/pmcd restart +</B></PRE> +</TD></TR> +</TABLE> + +<P>Finally, we're ready to try it out. As we have just restarted <B>pmcd</B> +(above), its worth checking its log file - <I>$PCP_LOG_DIR/pmcd/pmcd.log</I> - +and if that is free of errors, we can attempt to authenticate.</P> + +<TABLE WIDTH=100% BORDER=0 CELLPADDING=10 CELLSPACING=20> + <TR><TD BGCOLOR="#e2e2e2" WIDTH=70%><BR><IMG SRC="images/stepfwd_on.png" WIDTH=16 HEIGHT=16 BORDER=0> Establish an authenticated connection:<BR> +<PRE><B> +$ pminfo -fmdt -h pcps://server.demo.net?method=plain proc.fd.count +Username: jack +Password: xxxxxx + +proc.fd.count PMID: 3.51.0 [open file descriptors] + Data Type: 32-bit unsigned int InDom: 3.9 0xc00009 + Semantics: instant Units: count + inst [1281 or "001281 bash"] value 4 + inst [1287 or "001287 make -j 8 default_pcp"] value 5 + inst [1802 or "001802 bash"] value 4 + [...] +</B></PRE> +</TD></TR> +</TABLE> + +<I><B><A NAME="saslauthd">Using saslauthd</A></B></I> +<P>The SASL mechanism configured by default on a PCP collector system is <I>sasldb</I> +which provides a basic username and password style authentication mechanism with no +reliance on external daemons, package dependencies, and so on. +Without customisation for individual users, as described above, it allows no access +and can thus be considered secure-by-default.</P> + +<P>However, it is often more convenient to use the same authentication mechanism +that is used when logging in to a host (e.g. PAM on Linux and Solaris). +Because the PCP daemons run without superuser privileges, they cannot perform this +authentication themselves, and so it must be achieved using a separate, privileged +process. +SASL provides <I>saslauthd</I> for this purpose.</P> + +<TABLE WIDTH=100% BORDER=0 CELLPADDING=10 CELLSPACING=20> + <TR><TD BGCOLOR="#e2e2e2" WIDTH=70%><BR><IMG SRC="images/stepfwd_on.png" WIDTH=16 HEIGHT=16 BORDER=0> Check for support:<BR> +<PRE><B> +$ pmconfig -L | egrep '^auth|^secure' +secure_sockets=true +authentication=true + +$ pluginviewer -s -m PLAIN +[...] +Plugin "plain" [loaded], API version: 4 + SASL mechanism: PLAIN, best SSF: 0, supports setpass: no + security flags: NO_ANONYMOUS|PASS_CREDENTIALS + features: WANT_CLIENT_FIRST|PROXY_AUTHENTICATION + +$ ps ax | grep saslauthd + 2857 ? Ss 0:00 /usr/sbin/saslauthd -m /var/run/saslauthd -a pam + 2858 ? S 0:00 /usr/sbin/saslauthd -m /var/run/saslauthd -a pam +[...] +</B></PRE> +</TD></TR> +</TABLE> + +<P>In this case, the SASL mechanism configuration is entirely handled by +<I>saslauthd</I> so we simply need to ensure we pass authentication +through to the daemon - no configuration beyond that should be needed.</P> + +<TABLE WIDTH=100% BORDER=0 CELLPADDING=10 CELLSPACING=20> + <TR><TD BGCOLOR="#e2e2e2" WIDTH=70%><BR><IMG SRC="images/stepfwd_on.png" WIDTH=16 HEIGHT=16 BORDER=0> Setup use of <I>saslauthd</I> on the PCP Collector:<BR> +<PRE><B> +# grep PCP_SASLCONF_DIR /etc/pcp.conf +PCP_SASLCONF_DIR=/etc/sasl2 + +# cat $PCP_SASLCONF_DIR/sasl2/pmcd.conf +pwcheck_method: saslauthd + +# $PCP_RC_DIR/pmcd restart +</B></PRE> +</TD></TR> +</TABLE> + +<P>We are now ready to establish an authenticated connection. +<I>saslauthd</I> will log into the system log, so any authorisation +failures can be further diagnosed using information captured there.</P> + +<TABLE WIDTH=100% BORDER=0 CELLPADDING=10 CELLSPACING=20> + <TR><TD BGCOLOR="#e2e2e2" WIDTH=70%><BR><IMG SRC="images/stepfwd_on.png" WIDTH=16 HEIGHT=16 BORDER=0> Setup use of <I>saslauthd</I> on the PCP Collector:<BR> +<PRE><B> +$ pminfo -h pcps://server.demo.net?method=plain -dfmt proc.fd.count +Username: jack +Password: xxxxxx + +proc.fd.count PMID: 3.51.0 [open file descriptors] + Data Type: 32-bit unsigned int InDom: 3.9 0xc00009 + Semantics: instant Units: count + inst [1281 or "001281 bash"] value 4 + inst [1287 or "001287 make -j 8 default_pcp"] value 5 + inst [1802 or "001802 bash"] value 4 + [...] +</B></PRE> +</TD></TR> +</TABLE> + +<I><B><A NAME="gssapi">Kerberos Authentication</A></B></I> +<P>The PCP collector system can be configured to authenticate using Kerberos +single-sign-on using the GSSAPI authentication mechanism. +This mechanism is enabled via the <I>mech_list</I> option in <I>/etc/sasl2/pmcd.conf</I>, +and the keytab should be set to <I>/etc/pcp/pmcd/krb5.tab</I>. + +<TABLE WIDTH=100% BORDER=0 CELLPADDING=10 CELLSPACING=20> + <TR><TD BGCOLOR="#e2e2e2" WIDTH=70%><BR><IMG SRC="images/stepfwd_on.png" WIDTH=16 HEIGHT=16 BORDER=0> Check for support:<BR> +<PRE><B> +$ pmconfig -L | egrep '^auth|^secure' +secure_sockets=true +authentication=true + +$ pluginviewer -s -m GSSAPI +[...] +Plugin "gssapiv2" [loaded], API version: 4 + SASL mechanism: GSSAPI, best SSF: 56, supports setpass: no + security flags: NO_ANONYMOUS|NO_PLAINTEXT|NO_ACTIVE|PASS_CREDENTIALS|MUTUAL_AUTH + features: WANT_CLIENT_FIRST|PROXY_AUTHENTICATION|DONTUSE_USERPASSWD +</B></PRE> +</TD></TR> +</TABLE> + +<TABLE WIDTH=100% BORDER=0 CELLPADDING=10 CELLSPACING=20> + <TR><TD BGCOLOR="#e2e2e2" WIDTH=70%><BR><IMG SRC="images/stepfwd_on.png" WIDTH=16 HEIGHT=16 BORDER=0> Setup Kerberos authentication on the PCP Collector:<BR> +<PRE><B> +# kadmin.local +kadmin.local: add_principal pmcd/server.demo.net +Enter password for principal "pmcd/server.demo.net@DEMO.NET": +Re-enter password for principal "pmcd/server.demo.net@DEMO.NET": +Principal "pmcd/server.demo.net@DEMO.NET" created. + +kadmin.local: ktadd -k /root/pmcd-server-demo.tab pmcd/server.demo.net@DEMO.NET +Entry for principal pmcd/server.demo.net@DEMO.NET with kvno 4, encryption type Triple DES cbc mode with HMAC/sha1 added to keytab WRFILE:/root/pmcd-server-demo.tab. +Entry for principal pmcd/server.demo.net@DEMO.NET with kvno 4, encryption type ArcFour with HMAC/md5 added to keytab WRFILE:/root/pmcd-server-demo.tab. +Entry for principal pmcd/server.demo.net@DEMO.NET with kvno 4, encryption type DES with HMAC/sha1 added to keytab WRFILE:/root/pmcd-server-demo.tab. +Entry for principal pmcd/server.demo.net@DEMO.NET with kvno 4, encryption type DES cbc mode with RSA-MD5 added to keytab WRFILE:/root/pmcd-server-demo.tab. + +kadmin.local: quit + +# scp /root/pmcd-server-demo.tab root@server.demo.net:/etc/pcp/pmcd/krb5.tab +# rm /root/pmcd-server-demo.tab + +$ kinit jack@DEMO.NET +Password for jack@DEMO.NET: xxxxxx + +$ klist +Ticket cache: FILE:/tmp/krb5cc_500 +Default principal: jack@DEMO.NET + +Valid starting Expires Service principal +02/07/13 20:46:40 02/08/13 06:46:40 krbtgt/DEMO.NET@DEMO.NET + renew until 02/07/13 20:46:40 + +$ pminfo -h 'pcps://server.demo.net?method=gssapi' -dfmt proc.fd.count + +proc.fd.count PMID: 3.51.0 [open file descriptors] + Data Type: 32-bit unsigned int InDom: 3.9 0xc00009 + Semantics: instant Units: count + inst [1281 or "001281 bash"] value 4 + inst [1287 or "001287 make -j 8 default_pcp"] value 5 + inst [1802 or "001802 bash"] value 4 + [...] +</B></PRE> +</TD></TR> +</TABLE> + +<P><BR></P> +<HR> +<CENTER> +<TABLE WIDTH=100% BORDER=0 CELLPADDING=0 CELLSPACING=0> + <TR> <TD WIDTH=50%><P>Copyright © 2007-2010 <A HREF="http://www.aconex.com/"><FONT COLOR="#000060">Aconex</FONT></A><BR>Copyright © 2000-2004 <A HREF="http://www.sgi.com/"><FONT COLOR="#000060">Silicon Graphics Inc</FONT></P></TD> + <TD WIDTH=50%><P ALIGN=RIGHT><A HREF="http://pcp.io/"><FONT COLOR="#000060">PCP Site</FONT></A><BR>Copyright © 2012-2014 <A HREF="http://www.redhat.com/"><FONT COLOR="#000060">Red Hat</FONT></P></TD> </TR> +</TABLE> +</CENTER> +</BODY> +</HTML> diff --git a/man/html/lab.importdata.html b/man/html/lab.importdata.html new file mode 100644 index 0000000..502ad19 --- /dev/null +++ b/man/html/lab.importdata.html @@ -0,0 +1,560 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> +<html> +<head> + <meta http-equiv="content-type" content="text/html; charset=utf-8"> + <meta http-equiv="content-style-type" content="text/css"> + <title>Importing Data and Creating PCP Archives</title> + <link href="pcpdoc.css" rel="stylesheet" type="text/css"> + <link href="images/pcp.ico" rel="icon" type="image/ico"> +</head> +<body lang="en-AU" text="#000060" dir="LTR"> +<table width="100%" border=0 cellpadding=0 cellspacing=0> + <tr> <td width=64 height=64><font color="#000080"><a href="http://pcp.io/"><img src="images/pcpicon.png" alt="pmcharticon" align=top width=64 height=64 border=0></a></font></td> + <td width=1><p> </p></td> + <td width=500><p style="vertical-align:middle; text-align:left;"><a href="index.html"><font color="#cc0000">Home</font></a> · <a href="lab.pmlogger.html"><font color="#cc0000">Archive Logger</font></a></p></td> + </tr> +</table> +<h1>Importing data and creating PCP archives</h1> +<table width="15%" border=0 cellpadding=5 cellspacing=10 align=right> + <tr><td bgcolor="#e2e2e2"><img src="images/system-search.png" alt="search" width=16 height=16 border=0> <i>Tools</i><br><pre> +PCP::LogImport +pmlogsummary +pmlogger +pmchart +pmie +perl +</pre></td></tr> +</table> +<p>For most performance data processed by the Performance Co-Pilot (PCP), +the information is gathered by domain-specific agents or Performance +Metric Domain Agents (PMDAs). The data and metadata (describing the +performance data) is then provided via the Performance Metric Co-ordinating Daemon (PMCD) directly to real-time PCP monitoring tools like <i>pmchart</i>, +<i>pmie</i>, <i>pmval</i>, etc. or written to PCP archive files +by <i>pmlogger</i> for +subsequent retrospective analysis using these same PCP tools. +</p> +<p>This document describes an alternative method of importing +performance data into PCP by creating PCP archives from files or data +streams that have no knowledge of PCP. +</p> +<ul> + <li><a href="#prereqs">Prerequisites</a> + <li><a href="#identify">Identify Metrics and Metadata</a> + <li><a href="#scripting">Getting Started Scripting</a> + <li><a href="#metadata">Revisiting the Metadata</a> + <li><a href="#instances">Multi-valued Metrics and Instance Domains</a> + <li><a href="#handles">Handles</a> + <li><a href="#timezones">Timezones</a> + <li><a href="#extras">Bells and Whistles</a> + <li><a href="#complete">Complete Solution</a> +</ul> +<p>The services needed to build an import tool are included in the +<i>libpcp_import</i> package and a Perl wrapper is provided in the <b>PCP::LogImport</b> +module. +The C and Perl APIs are effectively identical. +Refer to the <b>LOGIMPORT</b>(3) +manual page for an overview of these services. +The examples in this document will be given in Perl. +</p> +<p>Several import tools are already provided with PCP, namely: +</p> +<table border="1" cellspacing="1" cellpadding="5"> +<tr><th>Tool</th><th>Function</th> +</tr> +<tr><td><i>sheet2pcp</i></td> + <td>Import data from a spreadsheet in CSV, OpenOffice or Microsoft Office format.</td></tr> +<tr><td><i>sar2pcp</i></td> + <td>Import data from the <i>sadc</i> (System Activity Reporting Collector) + that is part of the <i>sysstat</i> package and modelled on the + classical Unix <i>sar</i> tools.</td></tr> +<tr><td><i>iostat2pcp</i></td> + <td>Import data from output of the <i>iostat</i> command + that is part of the <i>sysstat</i> package and modelled on the + Berkeley Unix command of the same name.</td></tr> +</table> + +<p> +These scripts are all written in Perl, and we shall refer to them in +this document to present examples of specific aspects of the LOGIMPORT +services or the issues to be considered when building an import tool. +</p> + +<p> +For the most part in this document we'll be developing an import tool +for log files from a file migration application. +Some sample log lines are shown below: +</p> +<table cellpadding=10><tr><td bgcolor="#e2e2e2"> +<pre> +2010-07-04 13:46:29 14 files (6, 8, 0) 142512 bytes (92098) +2010-07-04 13:46:59 51 files (28, 23, 0) 132761 bytes (33239) +2010-07-04 13:47:29 36 files (23, 12, 1) 5733152 bytes (5688400) +2010-07-04 13:47:59 49 files (40, 9, 0) 118418 bytes (70669) +2010-07-04 13:48:29 30 files (7, 23, 0) 210531 bytes (52261) +2010-07-04 13:48:59 23 files (6, 17, 0) 81048 bytes (15175) +2010-07-04 13:49:29 55 files (31, 24, 0) 190841 bytes (27908) +2010-07-04 13:49:59 54 files (49, 5, 0) 14078 bytes (1213) +2010-07-04 13:50:29 38 files (19, 19, 0) 82398 bytes (16781) +2010-07-04 13:50:59 0 files (0, 0, 0) 0 bytes (0) +2010-07-04 13:51:29 31 files (8, 23, 0) 202755 bytes (41984) +2010-07-04 13:51:59 0 files (0, 0, 0) 0 bytes (0) +2010-07-04 13:52:29 7 files (4, 3, 0) 15954 bytes (8789) +</pre> +</td></tr></table> + +<p>Each line begins with a date and time, then the count of +the number of files migrated over the last time interval, then +three counts in parenthesis corresponding to the number of small files +(less than 1024 bytes), medium files (less than 1024*1024 bytes) and +large (more than 1024*1024 bytes) files that were migrated, then the total +number of bytes moved and finally the size (in bytes) of the largest +file moved. +</p> + +<h2><a name="prereqs">Prerequisites</a></h2> + +<p>The input data stream needs to conform to some basic principles +before we can consider importing information to PCP:</p> + +<ul> +<li><b>Timestamps</b>. A PCP archive is a time-series of observations, hence +we need a date and time stamp for each observation. In the simplest +case there is a representation of +the date and time in the input records. Sometimes the date and time appears as a text string, +sometimes it is encoded in a binary file and +sometimes it requires some guesswork to reconstruct the date and time +of each observation (see <i>iostat2pcp</i> for example). +In all cases, it will be necessary to have the datestamp available in the +internal system clock format, namely seconds and microseconds since +the "epoch". Fortunately the Perl module <b>Date::Parse</b> +does a reasonable job of parsing dates and times in text format, +although some preprocessing of the date may +be required to force into an ISO 8601 compatible format (see <b>dodate()</b> +in <i>sheet2pcp</i>, <i>iostat2pcp</i> and <i>sar2pcp</i> for a +number of examples). +<p>We shall return to timestamps and the associated matter of <b>timezones</b> +a little later in this document. +</p> +</li> + +<li> +<b>Regular format</b>. +Some file formats (often application logs) can be quite difficult to parse +and extract the data you wish to import into PCP. Pre-processing can help +remove ambiguities, cull irrelevant information and make life generally easier. +As an example, <i>sar2pcp</i> uses <i>sadf</i> to translate the binary data +file from <i>sadc</i> into an XML stream that is much easier to process. +</li> +</ul> + +<h2><a name="identify">Identify PCP Metrics and Metadata</a></h2> + +<p> +Incremental development is encouraged. So we shall start with one +metric being the number of files migrated. +</p> + +<p>The first task is to assign +a name – the rules must conform to those for the Performance Metrics +Name Space (PMNS), namely a number of components separated by periods +"." with each component starting with an alphabetic followed +by zero or more characters drawn from the alphabetics, digits and the +underscore "_" character (see <b>pmns</b>(4) for more +details). For our metrics we'll use the prefix <b>mover.</b> and so the +first metric will be known as <b>mover.nfile</b>. +</p> + +<p> +Next the metadata for each metric must be defined. This is basically the +fields of a <b>pmDesc</b> data structure as defined in <b>pmLookupDesc</b>(3). +The following table describes the information required, some of the +options and the values chosen for <b>mover.nfile</b>. +</p> + +<table border="1" cellspacing="1" cellpadding="1" align="left"> +<tr align="center"> + <th>Metadata</th><th>Options</th><th>mover.nfile</th> +</tr> +<tr align="left"> + <td>Unique Performance Metric Identifier (PMID)</td> + <td><b>PM_ID_NULL</b> for a default assignment, else use the + <b>pmid_build</b> macro as described in <b>pmiAddMetric</b>(3). + </td> + <td><b>PM_ID_NULL</b></td> +</tr> +<tr> + <td>(Data) Type</td> + <td><b>PM_TYPE_32</b> for a 32-bit integer, etc. See <b>pmLookupDesc</b>(3) + for a full list and description. + </td> + <td><b>PM_TYPE_U32</b></td> +</tr> +<tr> + <td>Instance Domain (indom)</td> + <td>If there is only one value for the metric, then this should be + <b>PM_INDOM_NULL</b>, else it should be a value constructed using + the <b>pmInDom_build</b> macro, see <b>pmiAddMetric</b>(3). + </td> + <td><b>PM_INDOM_NULL</b></td> +</tr> +<tr> + <td>Semantics</td> + <td>Defines how to interpret consecutive values. If the values are + from a counter that is monotonically increasing, use + <b>PM_SEM_COUNTER</b>. If there is no relationship between one + observation and the next, use <b>PM_SEM_INSTANT</b>. As a special + case, if the value is most <u>unlikely</u> to change over time (e.g. a + configuration parameter), then use <b>PM_SEM_DISCRETE</b>. + </td> + <td><b>PM_SEM_INSTANT</b></td> +</tr> +<tr> + <td>Units</td> + <td>The interpretation of values for each metric is defined by + classifying the metric along three orthogonal axes, namely + <u>space</u>, <u>time</u> and <u>count</u> (for events, messages, calls, packets, etc.). + For each axis, we need to specify the <b>dimension</b> (0 for not + appropriate, -1 if the value is "per unit" along this axis + or 1 if the value is measured in units along this axis) and the + <b>scale</b> (if the dimension is not zero) to define the absolute + magnitude of values along this axis. Refer to <b>pmLookupDesc</b>(3) + for a full list of the available options. Use a <b>pmiUnits</b>(3) + constructor to build a units value. + </td> + <td><b>pmiUnits(0,0,1,0,0,PM_COUNT_ONE)</b></td> +</tr> +</table> +<p> </p> + +<h2><a name="scripting">Getting Started Scripting</a></h2> + +<p>The basic algorithm follows this template:</p> +<ul> + <li>Define metadata</li> + <li>Loop over input data + <ul> + <li>output values</li> + <li>write PCP archive record</li> + </ul> + </li> +</ul> + +<p>For our sample file migration data, the following minimalist Perl +script will do the job</p> + +<table cellpadding=10><tr><td bgcolor="#e2e2e2"> +<pre> +use strict; +use warnings; +use Date::Parse; +use Date::Format; +use PCP::LogImport; + +pmiStart("mover_v1", 0); +pmiAddMetric("mover.nfile", + PM_ID_NULL, PM_TYPE_U32, PM_INDOM_NULL, + PM_SEM_INSTANT, pmiUnits(0,0,1,0,0,PM_COUNT_ONE)); + +open(INFILE, "<mover.log"); +while (<INFILE>) { + my @part; + chomp; + @part = split(/\s+/, $_); + pmiPutValue("mover.nfile", "", $part[2]); + pmiWrite(str2time($part[0] . "T" . $part[1], "UTC"), 0); +} + +pmiEnd(); +</pre> +</td></tr></table> + +<p>The resultant archive contains one metric.</p> +<table cellpadding=10><tr><td bgcolor="#e2e2e2"> +<pre> +$ pminfo -d -a mover_v1 + +mover.nfile + Data Type: 32-bit unsigned int InDom: PM_INDOM_NULL 0xffffffff + Semantics: instant Units: count +</pre> +</td></tr></table> + +<p><table><tr style="vertical-align:top;"><td> +<p>And when plotted with <i>pmchart</i> produces a graph like +this ...</p> +</td><td> +<img src="images/mover.nfile.instant.png" alt="nfile.instant"> +</td></tr></table> +<p> </p> + +<h2><a name="metadata">Revisiting the Metadata</a></h2> + +<table><tr style="vertical-align:top;"><td> +<p>The number of files migrated in this example could be exported as either +the instantaneous value over the previous sample interval, or accumulated +as a running total. If the running total is used and +the semantics of the <b>mover.nfile</b> metric +remains <b>PM_SEM_INSTANT</b> the resultant archive produces a graph +like this ... +which is not generally useful for analysis!</p> +</td><td> +<img src="images/mover.nfile.step.png" alt="nfile.step" style="vertical-align:top;"> +</td></tr> +<tr style="vertical-align:top;"><td> +<p>So we change the data +semantics to be <b>PM_SEM_COUNTER</b> and rely on the fact that most +PCP monitoring tools will automatically rate convert counters before +displaying them. This produces a very similar +graph to the first one (the plot style is the only difference) when the output archive is +replayed with the same sample interval as found in the input log file (30 seconds). +</td><td> +<img src="images/mover.nfile.counter.png" alt="nfile.counter" style="vertical-align:top;"> +</td></tr> +<tr style="vertical-align:top;"><td> +<p>The real difference in the choice of data semantics can +seen when the sample interval for replay is longer than the sample +interval in the PCP archive. Using a replay interval of 180 seconds +(6 times the sample interval in the archive), produces the following +graph for the <b>PM_SEM_INSTANT</b> data.</p> +</td><td> +<img src="images/mover.nfile.instant.3min.png" alt="nfile.instant.3min" style="vertical-align:top;"> +<tr style="vertical-align:top;"><td> +<p>And the <b>PM_SEM_COUNTER</b> data is displayed like this.</p> +</td><td> +<img src="images/mover.nfile.counter.3min.png" alt="nfile.counter.3min" style="vertical-align:top;"> +</td></tr></table> + +<p> +For the <b>PM_SEM_INSTANT</b> metric, the only choice available to <i>pmchart</i> +(and indeed any PCP reporting tool) is to use the most recent observed +value at each reporting interval. In the example above, this means 5 +data values from the archive are skipped and the 6th value is used for +each reporting interval. By comparison, for a <b>PM_SEM_COUNTER</b> +metric, all the reporting tools sample the metric at the start of +the interval and at the end of the interval and then report the +linearly interpolated rate over the interval, which includes the "history" of what was observed in each of the 6 archive intervals for +each reporting interval.</p> + +<p>This can be seen more clearly when the data is tabulated rather than +plotted.</p> + +<table border=1 cellpadding=3> +<tr><th rowspan=3>Time</th><th colspan=2>PM_SEM_INSTANT</th><th colspan=4>PM_SEM_COUNTER</th></tr> +<tr><th>30sec samples</th><th>180sec samples</th><th colspan=2>30sec samples</th><th colspan=2>180sec samples</th></tr> +<tr><th>files</th><th>files</th><th>files/sec</th><th>files</th><th>files/sec</th><th>files</th></tr> +<tr align="center"><td>23:58:59.000</td><td>34</td><td> </td><td>1.133</td><td>34.0</td><td> </td><td> </td></tr> +<tr align="center"><td>23:59:29.000</td><td>5</td><td> </td><td>0.167</td><td>5.0</td><td> </td><td> </td></tr> +<tr align="center"><td>23:59:59.000</td><td>12</td><td> </td><td>0.400</td><td>12.0</td><td> </td><td> </td></tr> +<tr align="center"><td>00:00:29.000</td><td>39</td><td> </td><td>1.300</td><td>39.0</td><td> </td><td> </td></tr> +<tr align="center"><td>00:00:59.000</td><td>3</td><td> </td><td>0.100</td><td>3.0</td><td> </td><td> </td></tr> +<tr align="center"><td>00:01:29.000</td><td>0</td><td>0</td><td>0.000</td><td>0.0</td><td>0.517</td><td>93.0</td></tr> +<tr align="center"><td>00:01:59.000</td><td>10</td><td> </td><td>0.333</td><td>10.0</td><td> </td><td> </td></tr> +<tr align="center"><td>00:02:29.000</td><td>42</td><td> </td><td>1.400</td><td>42.0</td><td> </td><td> </td></tr> +<tr align="center"><td>00:02:59.000</td><td>42</td><td> </td><td>1.400</td><td>42.0</td><td> </td><td> </td></tr> +<tr align="center"><td>00:03:29.000</td><td>28</td><td> </td><td>0.933</td><td>28.0</td><td> </td><td> </td></tr> +<tr align="center"><td>00:03:59.000</td><td>28</td><td> </td><td>0.933</td><td>28.0</td><td> </td><td> </td></tr> +<tr align="center"><td>00:04:29.000</td><td>6</td><td>6</td><td>0.200</td><td>6.0</td><td>0.867</td><td>156.0</td></tr> +<tr align="center"><td>00:04:59.000</td><td>57</td><td> </td><td>1.900</td><td>57.0</td><td> </td><td> </td></tr> +<tr align="center"><td>00:05:29.000</td><td>0</td><td> </td><td>0.000</td><td>0.0</td><td> </td><td> </td></tr> +<tr align="center"><td>00:05:59.000</td><td>15</td><td> </td><td>0.500</td><td>15.0</td><td> </td><td> </td></tr> +<tr align="center"><td>00:06:29.000</td><td>27</td><td> </td><td>0.900</td><td>27.0</td><td> </td><td> </td></tr> +<tr align="center"><td>00:06:59.000</td><td>53</td><td> </td><td>1.767</td><td>53.0</td><td> </td><td> </td></tr> +<tr align="center"><td>00:07:29.000</td><td>57</td><td>57</td><td>1.900</td><td>57.0</td><td>1.16</td><td>209.0</td></tr> +</table> + + +<p>Where the semantics of the data matches that of a free-running counter +and where the total can easily be extracted from the input data source, +it is <b>always</b> better to export PCP metrics with the semantics +of <b>PM_SEM_COUNTER</b>. Note that the base value for a counter is +arbitrary and zero works just fine.</p> + +<p>Using similar arguments we can identify two additional singular metrics +that can be extracted from the log as <b>mover.nbyte</b> (a free-running +counter of the number of bytes migrated) and <b>mover.max_file_size</b> +(an instantaneous metric reporting the size of the largest file migrated +in the previous interval). With these additions, our minimalist Perl +script has become ...</p> + +<table cellpadding=10><tr><td bgcolor="#e2e2e2"> +<pre> +use strict; +use warnings; +use Date::Parse; +use Date::Format; +use PCP::LogImport; + +my $nfile = 0; +my $nbyte = 0; + +pmiStart("mover_v3", 0); +pmiAddMetric("mover.nfile", + PM_ID_NULL, PM_TYPE_U32, PM_INDOM_NULL, + PM_SEM_COUNTER, pmiUnits(0,0,1,0,0,PM_COUNT_ONE)); +pmiAddMetric("mover.nbyte", + PM_ID_NULL, PM_TYPE_U64, PM_INDOM_NULL, + PM_SEM_COUNTER, pmiUnits(1,0,0,PM_SPACE_BYTE,0,0)); +pmiAddMetric("mover.max_file_size", + PM_ID_NULL, PM_TYPE_U64, PM_INDOM_NULL, + PM_SEM_INSTANT, pmiUnits(1,0,0,PM_SPACE_BYTE,0,0)); + +open(INFILE, "<mover.log"); +while (<INFILE>) { + my @part; + chomp; + s/[(),]//g; # remove all (, ) and , + @part = split(/\s+/, $_); + $nfile += $part[2]; + pmiPutValue("mover.nfile", "", $nfile); + $nbyte += $part[7]; + pmiPutValue("mover.nbyte", "", $nbyte); + pmiPutValue("mover.max_file_size", "", $part[9]); + pmiWrite(str2time($part[0] . "T" . $part[1], "UTC"), 0); +} + +pmiEnd(); +</pre> +</td></tr></table> + +<p> +This produces a PCP archive that can be plotted with <i>pmchart</i> +to produce the following graph.</p> +<p><center> +<img src="images/mover.v3.png" alt="mover.v3"> +</center></p> + +<h2><a name="instances">Multi-valued Metrics and Instance Domains</a></h2> + +<p>Metrics that have more than one value are supported in PCP through +the concept of an Instance Domain (or <b>indom</b>) which is a +set with an internal unique identifier (an integer) and a unique external +name (a string) for each instance that may have an associated values. +There can be many Instance Domains. And many metrics can be associated +with the same Instance Domain.</p> + +<p>The remaining metric in our example is <b>mover.nfile_by_size</b> +which has the same metadata as <b>mover.nfile</b> except there is +an associated Instance Domain to accommodate the 3 values +("<=1Kbyte", "<=1Mbyte" and +">1Mbyte"). +The Instance Domain identifier is constructed using the <b>pmInDom_build</b> +macro, and then used in calls to <b>pmiAddInstance</b>(3) to make the association +for each metric-instance pair. +The relevant metadata declarations are +as follows:</p> + +<table cellpadding=10><tr><td bgcolor="#e2e2e2"> +<pre> +my $sz_indom = pmInDom_build(PMI_DOMAIN, 0); +my @nfile_by_size = (0,0,0); + +pmiAddMetric("mover.nfile_by_size", + PM_ID_NULL, PM_TYPE_U32, $sz_indom, + PM_SEM_COUNTER, pmiUnits(0,0,1,0,0,PM_COUNT_ONE)); +pmiAddInstance($sz_indom, "<=1Kbyte", 0); +pmiAddInstance($sz_indom, "<=1Mbyte", 1); +pmiAddInstance($sz_indom, ">1Mbyte", 2); +</pre> +</td></tr></table> + +<p>And then in the loop, these additional calls to <b>pmiPutValue</b>(3) +are required: + +<table cellpadding=10><tr><td bgcolor="#e2e2e2"> +<pre> +$nfile_by_size[0] += $part[4]; +pmiPutValue("mover.nfile_by_size", "<=1Kbyte", $nfile_by_size[0]); +$nfile_by_size[1] += $part[5]; +pmiPutValue("mover.nfile_by_size", "<=1Mbyte", $nfile_by_size[1]); +$nfile_by_size[2] += $part[6]; +pmiPutValue("mover.nfile_by_size", ">1Mbyte", $nfile_by_size[2]); +</pre> +</td></tr></table> + +<p> +This produces our final PCP archive that can be plotted with <i>pmchart</i> +to produce the following graph.</p> +<p><center> +<img src="images/mover.png" alt="mover"> +</center></p> + +<h2><a name="handles">Handles</a></h2> + +<p>If there is a lot of data and/or a lot of PCP metrics, the calls +to <b>pmiPutValue</b>(3) in the inner loop of the import application +may become expensive as a consequence of the repeated text-based +lookup for a metric name and an instance name.</p> + +<p>The <b>LOGIMPORT</b>(3) infrastructure provides a "handles" +mechanism that may be used to improve efficiency. +<b>pmiGetHandle</b>(3) may be used to obtain a "handle" for +a metric-instance pair (once the metric and instance have been defined), +then <b>pmiPutValueHandle</b>(3) may be used instead of <b>pmiPutValue</b>(3).</p> + +<h2><a name="timezones">Timezones</a></h2> + +<p>The interpretation of the timestamps in the output PCP archive is +dependent on the timezone in which PCP believes the archive was created.</p> + +<p>Since many import log files do not report the timezone, the <b>LOGIMPORT</b>(3) +services assume a default timezone of <b>UTC</b>. +An alternative timezone may be specified using <b>pmiSetTimezone</b>(3), +but a corresponding adjustment needs to be made to the date and time +conversions when arriving at the timestamp for each sample, e.g. +using <b>str2time</b>() and/or <b>ctime</b>(). +Unfortunately the format for the timezone offset is not handled +the same in all places – for the ugly details, +refer to the <b>–Z</b> command line +processing and the <b>do_label</b>() procedure in the +complete <a href="importdata/mover2pcp">mover2pcp</a> example code.</p> + +<h2><a name="extras">Bells and Whistles</a></h2> + +<p>The Perl code we've been using thus far is minimalist and needs +several extensions to make the application robust. Specifically these +include:</p> + +<ul> +<li>For singular metrics, wrap the <b>pmiAddMetric</b>(3) calls in +error handling logic, +handle the per-metric metadata variations +and create the handle for later use, see the <b>def_single</b>() +procedure.</li> + +<li>The <b>def_multi</b>() procedure performs a similar function for +multi-valued metrics, except the handle creation is deferred until +each instance is processed.</li> + +<li>For each metric-instance pair associated with a multi-valued +metric, the <b>def_metric_inst</b>() procedure maintains a cache of +indoms and instances for those indoms so that internal instance +identifiers can be allocated automatically and <b>pmiAddInstance</b>(3) +is only called the first time each unique instance is observed for +each instance domain. Also there is error checking logic here and +a new handle is allocated for each metric-instance pair.</li> + +<li>The <b>put</b>() procedure is a wrapper around +<b>pmiPutValueHandle</b>(3) that includes some error handling +and stepping through the array of handles created earlier.</li> + +<li>Timezone and archive label details are addressed in the +<b>do_label</b>() procedure.</li> + +<li>Add error checking at the end of the loop after each +value has been added to the next output record.</li> + +</ul> + +<h2><a name="complete">Complete Solution</a></h2> + +<p>The complete mover2pcp Perl script can be viewed <a href="importdata/mover2pcp">here</a>.</p> + +<hr> +<CENTER> +<TABLE WIDTH=100% BORDER=0 CELLPADDING=0 CELLSPACING=0> + <TR> <TD WIDTH=50%><P>Copyright © 2007-2010 <A HREF="http://www.aconex.com/"><FONT COLOR="#000060">Aconex</FONT></A><BR>Copyright © 2000-2004 <A HREF="http://www.sgi.com/"><FONT COLOR="#000060">Silicon Graphics Inc</FONT></P></TD> + <TD WIDTH=50%><P ALIGN=RIGHT><A HREF="http://pcp.io/"><FONT COLOR="#000060">PCP Site</FONT></A><BR>Copyright © 2012-2014 <A HREF="http://www.redhat.com/"><FONT COLOR="#000060">Red Hat</FONT></P></TD> </TR> +</TABLE> +</CENTER> +</BODY> +</HTML> diff --git a/man/html/lab.mmapvalues.html b/man/html/lab.mmapvalues.html new file mode 100644 index 0000000..a304ac4 --- /dev/null +++ b/man/html/lab.mmapvalues.html @@ -0,0 +1,44 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> +<HTML> +<HEAD> + <meta http-equiv="content-type" content="text/html; charset=utf-8"> + <meta http-equiv="content-style-type" content="text/css"> + <link href="pcpdoc.css" rel="stylesheet" type="text/css"> + <link href="images/pcp.ico" rel="icon" type="image/ico"> + <TITLE>Memory Mapped Values</TITLE> +</HEAD> +<BODY LANG="en-AU" TEXT="#000060" DIR="LTR"> +<TABLE WIDTH=100% BORDER=0 CELLPADDING=0 CELLSPACING=0 STYLE="page-break-before: always"> + <TR> <TD WIDTH=64 HEIGHT=64><FONT COLOR="#000080"><A HREF="http://pcp.io/"><IMG SRC="images/pcpicon.png" NAME="pmcharticon" ALIGN=TOP WIDTH=64 HEIGHT=64 BORDER=0></A></FONT></TD> + <TD WIDTH=1><P> </P></TD> + <TD WIDTH=500><P VALIGN=MIDDLE ALIGN=LEFT><A HREF="index.html"><FONT COLOR="#cc0000">Home</FONT></A> · <A HREF="lab.pmchart.html"><FONT COLOR="#cc0000">Charts</FONT></A> · <A HREF="timecontrol.html"><FONT COLOR="#cc0000">Time Control</FONT></A></P></TD> + </TR> +</TABLE> +<H1 ALIGN=CENTER STYLE="margin-top: 0.48cm; margin-bottom: 0.32cm"><FONT SIZE=7>Memory Mapped Values</FONT></H1> +<TABLE WIDTH=15% BORDER=0 CELLPADDING=5 CELLSPACING=10 ALIGN=RIGHT> + <TR><TD BGCOLOR="#e2e2e2"><IMG SRC="images/system-search.png" WIDTH=16 HEIGHT=16 BORDER=0> <I>Tools</I><BR><PRE> +pmdammv +mmvdump +java +perl +</PRE></TD></TR> +</TABLE> +<P>Introductory text. This is a placeholder. TODO... +</P> + +<P><BR></P> +<TABLE WIDTH=100% BORDER=0 CELLPADDING=0 CELLSPACING=0 BGCOLOR="#e2e2e2"> + <TR><TD WIDTH=100% BGCOLOR="#081c59"><P ALIGN=LEFT><FONT SIZE=5 COLOR="#ffffff"><B>Next Section</B></FONT></P></TD></TR> +</TABLE> +<P>Next paragraph.</P> + +<P><BR></P> +<HR> +<CENTER> +<TABLE WIDTH=100% BORDER=0 CELLPADDING=0 CELLSPACING=0> + <TR> <TD WIDTH=50%><P>Copyright © 2007-2010 <A HREF="http://www.aconex.com/"><FONT COLOR="#000060">Aconex</FONT></A><BR>Copyright © 2000-2004 <A HREF="http://www.sgi.com/"><FONT COLOR="#000060">Silicon Graphics Inc</FONT></P></TD> + <TD WIDTH=50%><P ALIGN=RIGHT><A HREF="http://pcp.io/"><FONT COLOR="#000060">PCP Site</FONT></A><BR>Copyright © 2012-2014 <A HREF="http://www.redhat.com/"><FONT COLOR="#000060">Red Hat</FONT></P></TD> </TR> +</TABLE> +</CENTER> +</BODY> +</HTML> diff --git a/man/html/lab.pmchart.html b/man/html/lab.pmchart.html new file mode 100644 index 0000000..0a5e97f --- /dev/null +++ b/man/html/lab.pmchart.html @@ -0,0 +1,243 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> +<HTML> +<HEAD> + <meta http-equiv="content-type" content="text/html; charset=utf-8"> + <meta http-equiv="content-style-type" content="text/css"> + <link href="pcpdoc.css" rel="stylesheet" type="text/css"> + <link href="images/pcp.ico" rel="icon" type="image/ico"> + <TITLE>PCP Strip Charts</TITLE> +</HEAD> +<BODY LANG="en-AU" TEXT="#000060" DIR="LTR"> +<TABLE WIDTH=100% BORDER=0 CELLPADDING=0 CELLSPACING=0 STYLE="page-break-before: always"> + <TR> <TD WIDTH=64 HEIGHT=64><FONT COLOR="#000080"><A HREF="http://pcp.io/"><IMG SRC="images/pmcharticon.png" NAME="pmcharticon" ALIGN=TOP WIDTH=64 HEIGHT=64 BORDER=0></A></FONT></TD> + <TD WIDTH=1><P> </P></TD> + <TD WIDTH=500><P VALIGN=MIDDLE ALIGN=LEFT><A HREF="index.html"><FONT COLOR="#cc0000">Home</FONT></A> · <A HREF="lab.pmchart.html"><FONT COLOR="#cc0000">Charts</FONT></A> · <A HREF="timecontrol.html"><FONT COLOR="#cc0000">Time Control</FONT></A></P></TD> + </TR> +</TABLE> +<H1 ALIGN=CENTER STYLE="margin-top: 0.48cm; margin-bottom: 0.32cm"><FONT SIZE=7>PCP Strip Charts</FONT></H1> +<TABLE WIDTH=15% BORDER=0 CELLPADDING=5 CELLSPACING=10 ALIGN=RIGHT> + <TR><TD BGCOLOR="#e2e2e2"><IMG SRC="images/system-search.png" WIDTH=16 HEIGHT=16 BORDER=0> <I>Tools</I><BR><PRE> +pmchart +pmtime +pmlogger +pmafm +</PRE></TD></TR> +</TABLE> +<P>The following tutorial introduces the basic functionality available in the PCP Strip Chart tool, <I>pmchart</I>.</P> +<UL> + <LI><A HREF="#main">Main Window</A> + <LI><A HREF="#views">Views</A> + <UL> + <LI><A HREF="#viewspec">View Specification</A> + </UL> + <LI><A HREF="#record">Recording</A> + <LI><A HREF="#saving">Saving Views</A> + <LI><A HREF="#custom">Custom Charts</A> + <LI><A HREF="#playback">Playback Recording</A> + <UL> + <LI><A HREF="#pmtime">Time Control</A> + </UL> + <LI><A HREF="#next">Next Steps</A> +</UL> +<TABLE WIDTH=100% BORDER=0 CELLPADDING=10 CELLSPACING=20> + <TR><TD BGCOLOR="#e2e2e2" WIDTH=70%><BR><IMG SRC="images/stepfwd_on.png" WIDTH=16 HEIGHT=16 BORDER=0> Once PCP and PCP GUI packages have been successfully <A HREF="installation.html"><FONT COLOR="#000060">installed</FONT></A>, run the <I>pmchart</I> command or click on the <I>PCP Charts</I> icon to begin.</TD></TR> +</TABLE> + +<P><BR></P> +<TABLE WIDTH=100% BORDER=0 CELLPADDING=0 CELLSPACING=0 BGCOLOR="#e2e2e2"> + <TR><TD WIDTH=100% BGCOLOR="#081c59"><P ALIGN=LEFT><FONT SIZE=5 COLOR="#ffffff"><B><A NAME="main">Main Window</A></B></FONT></P></TD></TR> +</TABLE> +<TABLE WIDTH=100% BORDER=0 CELLPADDING=0 CELLSPACING=0> + <TR> <TD><P>On starting the PCP Chart (pmchart) tool with no command line arguments, the initial display shows a menu, toolbar, and a live time axis.</P> +<P>The vacant area above the time axis is the blank canvas for your charts – we'll get to this shortly, but take a moment to digest the main window.</P> +<P>The time axis along the bottom of the window scrolls with the current time, updated every second, by default (this is also called the <I>sample interval</I>).</P> +<P>To the left of the time axis is the time control status button.</P><P>The blue arrow signifies that (live) time is moving forward. Pressing the button once will show the Time Control tool, <i>pmtime</i>, pressing it a second time hides it.</P> + </TD> + <TD WIDTH=372><P VALIGN=MIDDLE ALIGN=RIGHT><CENTER><BR><IMG ALIGN=RIGHT SRC="images/pmchart_blank_canvas.png" BORDER=0></CENTER></P></TD> + </TR> +</TABLE> +<TABLE WIDTH=100% BORDER=0 CELLPADDING=0 CELLSPACING=0 STYLE="page-break-before: always"> + <TR> <TD WIDTH=312><P VALIGN=MIDDLE ALIGN=LEFT><CENTER><BR><IMG ALIGN=RIGHT SRC="images/pmtime_live.png" BORDER=0></CENTER></P></TD> + <TD WIDTH=10></TD> + <TD><P><BR><P>The time controls allow you to modify various aspects of the flow of time in your charts, and clearly displays the current time position.</P> +<P>A VCR paradigm is used to allow stopping and starting the flow of time, and in the case of historical data (PCP archives), allow movement both forwards and backwards through time, and allow fast, slow, or step-by-step updates to the displayed data.</P></TD> + </TR> +</TABLE> +<P><BR></P> +<A name="views"></A> +<TABLE WIDTH=100% BORDER=0 CELLPADDING=0 CELLSPACING=0 BGCOLOR="#e2e2e2"> + <TR><TD WIDTH=100% BGCOLOR="#081c59"><P ALIGN=LEFT><FONT SIZE=5 COLOR="#ffffff"><B><A NAME="views">Views</A></B></FONT></P></TD></TR> +</TABLE> +<P>The toolbar along the top of the window has a blue folder icon for <I>Views</I>. The </B>File</B> menu provides access to the same functionality via the "Open View" item. +<TABLE WIDTH=100% BORDER=0 CELLPADDING=10 CELLSPACING=20> + <TR><TD BGCOLOR="#e2e2e2" WIDTH=70%><BR><IMG SRC="images/stepfwd_on.png" WIDTH=16 HEIGHT=16 BORDER=0> Click on the blue <I>Views</I> folder to bring up the “Open View” window.</TD></TR><BR> +</TABLE> +<P>This window initially displays a list of common performance views (these are the pre-installed <I>System Views</I>). These views have been found to be useful by others over many years, and will be able to run on any host or archive that provides the metrics and instances that they wish to plot - they will never specify specific hostnames, nor will they request any specific geometry or screen position. +<CENTER><IMG SRC="images/pmchart_open_view.png" BORDER=0></CENTER> +<TABLE WIDTH=100% BORDER=0 CELLPADDING=10 CELLSPACING=20> + <TR><TD BGCOLOR="#e2e2e2" WIDTH=70%><BR><IMG SRC="images/stepfwd_on.png" WIDTH=16 HEIGHT=16 BORDER=0> +Select <I>CPU</I> and <I>Disk</I> from the list (Ctrl-Click allows multiple selections to be made), then press OK.<BR></TD></TR> +</TABLE> +<P>The chart canvas in the main window is now filled with the two selected Views, showing several aspects of processor and disk utilisation.</P> +<P><A NAME="viewspec"><B>What is a view?</B></A></P> +<P>A view is a complete <A HREF="views.html">specification</A> of every aspect of one or more charts, each of which can contains one or more plots. All properties of the charts and the individual plots are described - the data source behind the performance data, the color of the plots, the chart title, the style of the chart, whether the value axis (Y-Axis) should be scaled, whether there is a title, etc, etc. Some properties are optional (e.g. the title) and some can be specified as variable (e.g. allowing any host to be the source of the data).</P> +<P>Views are stored as plain text files in the local filesystem. The System Views are different only in that they are installed into a fixed location. There is a fixed place for custom views as well, below your home directory, where views you create in pmchart will be stored. If you look into the <I>Open View</I> dialog again, you'll see two icons to the right of the Path in the Open View dialog – these indicate whether the current path points to the System View location, the User View location, or neither. Notice how they update as you navigate through your files.</P> +<P><BR></P> +<TABLE WIDTH=100% BORDER=0 CELLPADDING=0 CELLSPACING=0 BGCOLOR="#e2e2e2"> + <TR><TD WIDTH=100% BGCOLOR="#081c59"><P ALIGN=LEFT><FONT SIZE=5 COLOR="#ffffff"><B><A NAME="record">Recording</A></B></FONT></P></TD></TR> +</TABLE> +<P><B><FONT SIZE=4>Setup recording for later playback</FONT></B></P> +<P>A recording captures live performance data from the current View into an <B>archive folio</B>. A folio is a group of one or more performance data archives (sometimes refered to as "logs" – an ambiguous term, so we'll refer to them as archives from here on), a copy of the current View specification, and a configuration file for the <B>pmlogger</B> process which does the actual recording. A folio contains enough state to be able to replay the recording at any time in the future, exactly as it was recorded.</P> +<TABLE WIDTH=100% BORDER=0 CELLPADDING=10 CELLSPACING=20> + <TR><TD BGCOLOR="#e2e2e2" WIDTH=70%><BR><IMG SRC="images/stepfwd_on.png" WIDTH=16 HEIGHT=16 BORDER=0> From the main menu, select <I>Record</I>, and then <I>Start</I> to initiate a recording.<BR></TD></TR> +</TABLE> +<P>The <I>Start Recording</I> dialog allows you to set various aspects of the recording session – we wont change these for now – just press the OK button. You'll notice the Live Time Control button in the botton left now displays a red light, indicating that recording is in progress. Let's leave the recording run while we investigate other parts of the tool – we'll come back to this later, when its had a chance to gather some interesting data.</P> +<P><B><FONT SIZE=4>Generating load for later playback</FONT></B></P> +<P>As a simple example of both the recording functionality, and of using pmchart to monitor different subsystems simultaneously, we'll generate some local disk I/O and see how this affects the disk and CPU utilisation charts we have already opened. +</P> +<TABLE WIDTH=100% BORDER=0 CELLPADDING=10 CELLSPACING=20> + <TR><TD BGCOLOR="#e2e2e2" WIDTH=70%><BR><IMG SRC="images/stepfwd_on.png" WIDTH=16 HEIGHT=16 BORDER=0> In a command shell enter:<BR> +<PRE><B> +$ find / -xdev >/dev/null 2>&1 +</PRE></B> +</TD></TR> +</TABLE> +<TABLE WIDTH=100% BORDER=0 CELLPADDING=0 CELLSPACING=0 STYLE="page-break-before: always"> + <TR> <TD WIDTH=377><P VALIGN=MIDDLE ALIGN=RIGHT><CENTER><BR><IMG ALIGN=RIGHT SRC="images/pmchart_cpu_disk.png" BORDER=0></CENTER></P></TD> + <TD WIDTH=15></TD> + <TD><P><BR><P>This command scans every inode on the root filesystem, which is usually a local disk. We observe a large increase in disk read operations as each inode is read in from disk (yellow plot in the <I>Disk</I> chart).</P><P>At the same time we observe a small increase in processor utilisation, in both kernel and user mode (red and navy blue in the <I>CPU</I> chart), as the command executes the code to read directories and query the <B>stat</B>(2) information for each file. Since we account for all CPU time, these increases in system and user time cause a corresponding decrease in the idle time (green area in the <I>CPU</I> chart).</P><P>There is also now an increase in the amount of time spent executing interrupt handlers (yellow plot in the <I>CPU</I> chart) since the device must generate an interrupt completion event for every I/O.</P><P>On systems that support a separate I/O wait CPU utilisation metric (Linux 2.6+ and IRIX), we also see a significant amount of time is spent with outstanding I/O requests (cyan plot in the <I>CPU</I> chart).</P></TD> + </TR> +</TABLE> +<P><BR></P> +<TABLE WIDTH=100% BORDER=0 CELLPADDING=0 CELLSPACING=0 BGCOLOR="#e2e2e2"> + <TR><TD WIDTH=100% BGCOLOR="#081c59"><P ALIGN=LEFT><FONT SIZE=5 COLOR="#ffffff"><B><A NAME="saving">Saving Views</A></B></FONT></P></TD></TR> +</TABLE> +<P><I>Views</I> can be saved to (text) files for use on subsequent invocations of pmchart, or for use with different hosts or archives. +</P> +<TABLE WIDTH=100% BORDER=0 CELLPADDING=10 CELLSPACING=20> + <TR><TD BGCOLOR="#e2e2e2" WIDTH=70%><BR><IMG SRC="images/stepfwd_on.png" WIDTH=16 HEIGHT=16 BORDER=0> +From the <I>File</I> menu select the <I>Save View</I> option.<BR> +Save the current two charts to a View named <I>/tmp/ExampleView</I>.<BR> +In a command shell, take a look through the saved View configuration. +<PRE><B> + $ cat /tmp/ExampleView</B> +<BR> #kmchart +<BR> version 1 +<BR> chart title "CPU Utilization [%h]" style utilization +<BR> plot legend "User" color #2d2de2 metric kernel.all.cpu.user +<BR> plot legend "Kernel" color #e71717 metric kernel.all.cpu.sys +<BR> plot legend "Nice" color #c2f3c2 metric kernel.all.cpu.nice +<BR> plot legend "Intr" color #cdcd00 metric kernel.all.cpu.intr +<BR> plot legend "Wait" color #00cdcd metric kernel.all.cpu.wait.total +<BR> plot legend "Idle" color #16d816 metric kernel.all.cpu.idle +<BR> chart title "IOPS over all Disks [%h]" style stacking +<BR> plot legend "Reads" color #ffff00 metric disk.all.read +<BR> plot legend "Writes" color #ee82ee metric disk.all.write +</PRE> +</TD></TR> +</TABLE> + +<P><BR></P> +<A name="charts"></A> +<TABLE WIDTH=100% BORDER=0 CELLPADDING=0 CELLSPACING=0 BGCOLOR="#e2e2e2"> + <TR><TD WIDTH=100% BGCOLOR="#081c59"><P ALIGN=LEFT><FONT SIZE=5 COLOR="#ffffff"><B><A NAME="custom">Custom Charts</A></B></FONT></P></TD></TR> +</TABLE> +<TABLE WIDTH=100% BORDER=0 CELLPADDING=10 CELLSPACING=20> + <TR><TD BGCOLOR="#e2e2e2" WIDTH=70%><BR><IMG SRC="images/stepfwd_on.png" WIDTH=16 HEIGHT=16 BORDER=0> From the <I>Edit</I> menu select the <I>Chart</I> item.<BR></TD></TR> +</TABLE> +<P>A tabbed window with all settings for the Disk chart is displayed. In the tree view on the left side of the window are the metrics from our selected Disk chart. +<BR><CENTER><IMG SRC="images/pmchart_edit_chart.png" BORDER=0></CENTER></P> +<P>The three tabs on the right side of the window show the current settings for this chart in three categories:<UL><LI>Properties relating to the entire chart (Title, Legend settings, Y-Axis scaling, etc); + <LI>Available metrics (performance data) for plotting in the chart + <LI>Properties related to each individual chart plot (color, label) +</UL> +<P>Dismiss the Edit Chart dialog – instead of modifying our existing charts, we'll build one from the ground up.</P> +<TABLE WIDTH=100% BORDER=0 CELLPADDING=10 CELLSPACING=20> + <TR><TD BGCOLOR="#e2e2e2" WIDTH=70%><BR><IMG SRC="images/stepfwd_on.png" WIDTH=16 HEIGHT=16 BORDER=0> Click on the <I>New Chart</I> option in the toolbar to display the chart creation window.<BR></TD></TR> +</TABLE> +<P>It looks just like the chart editing window we've just seen, except initially we have no metrics selected in the chart, and default values for all of the chart properties.<BR><CENTER><IMG SRC="images/pmchart_new_chart.png" BORDER=0></CENTER></P> +<P>In the Available Metrics list on the Metrics tab, expand the <I>kernel,</I> <I>all</I>, <I>load</I> trees from your local hosts metric namespace, and then select the three load averages (<I>1, 5, 15 minutes</I>). Since these are leaf nodes in the namespace, and identify valid values for plotting, several buttons now become enabled – in particular the “Add Metric” button and the “Metric Info” button.<BR><CENTER><IMG SRC="images/pmchart_new_chart_select.png" BORDER=0></CENTER></P> +<TABLE WIDTH=100% BORDER=0 CELLPADDING=10 CELLSPACING=20> + <TR><TD BGCOLOR="#e2e2e2" WIDTH=70%><BR><IMG SRC="images/stepfwd_on.png" WIDTH=16 HEIGHT=16 BORDER=0> Click on the “Metric Info” button to view the metric descriptor (<I>pminfo</I>) and current values (<I>pmval</I>) for <I>disk.all.total</I>. Dismiss that dialog, and then press the “Add Metric” button, to add this metric into the list of metrics for our new chart.<BR></TD></TR> +</TABLE> +<P>A default color is selected (this is chosen from the charts Color scheme, which can be set on the first tab) – this color can also be explicitly set by:<UL><LI>selecting the metric from the Chart Plots tree + <LI>selecting a new color from the color palette on the Plot tab + <LI>pressing the Apply color button +</UL> +<P>This change can also be reverted by using the revert color button, which returns it to its previous color (displayed alongside that button).</P> +<BR><CENTER><IMG SRC="images/pmchart_new_chart_colors.png" BORDER=0></CENTER></P> +<TABLE WIDTH=100% BORDER=0 CELLPADDING=10 CELLSPACING=20> + <TR><TD BGCOLOR="#e2e2e2" WIDTH=70%><BR><IMG SRC="images/stepfwd_on.png" WIDTH=16 HEIGHT=16 BORDER=0> Set the label for the plots as “1 Min”, “5 Min” and “15 Min”, then press OK.<BR></TD></TR> +</TABLE> +<P>A new chart will appear at the bottom of the main window with one plot, and on the next sample interval current values will be plotted.</P> +<BR><CENTER><IMG SRC="images/pmchart_cpu_disk_load.png" BORDER=0></CENTER> +<P><BR></P> +<TABLE WIDTH=100% BORDER=0 CELLPADDING=0 CELLSPACING=0 BGCOLOR="#e2e2e2"> + <TR><TD WIDTH=100% BGCOLOR="#081c59"><P ALIGN=LEFT><FONT SIZE=5 COLOR="#ffffff"><B><A NAME="playback">Playback Recording</A></B></FONT></P></TD></TR> +</TABLE> +<TABLE WIDTH=100% BORDER=0 CELLPADDING=10 CELLSPACING=20> + <TR><TD BGCOLOR="#e2e2e2" WIDTH=70%><BR><IMG SRC="images/stepfwd_on.png" WIDTH=16 HEIGHT=16 BORDER=0> Click on the <I>Record</I> menu, then </I>Stop</I>.<BR></TD></TR> +</TABLE> +<CENTER><IMG SRC="images/pmchart_stop_recording.png" BORDER=0></CENTER> +<P>The dialog shown explains the status of your recording session (started earlier). At any time while recording, you also have the option of querying the recording process to see the same status, and also to detach the recording from the control of pmchart. But for now, we've simply ended the recording (note the red indicator light is now off on the time control button), and we're left with an archive containing the history from our recording, which we can now replay.</P> + +<TABLE WIDTH=100% BORDER=0 CELLPADDING=10 CELLSPACING=20> + <TR><TD BGCOLOR="#e2e2e2" WIDTH=70%><BR><IMG SRC="images/stepfwd_on.png" WIDTH=16 HEIGHT=16 BORDER=0> End your pmchart process now, open a command shell and run:<BR> +<PRE><B> +$ pmafm ~/.pcp/pmlogger/20100826.10.11.28.folio replay</B><BR></TD></TR> +</B></PRE> +</TABLE> +<P>(substituting the current recording timestamp into the folio file name from your earlier recording session)</P> +<BR><CENTER><IMG SRC="images/pmchart_cpu_disk_record.png" BORDER=0></CENTER> +<P>You are now in archive replay mode. Initially the time is stopped at the start of the archive, and the chart canvas area displays the recorded data in the views which were active at the time recording begun.</P> +<TABLE WIDTH=100% BORDER=0 CELLPADDING=10 CELLSPACING=20> + <TR><TD BGCOLOR="#e2e2e2" WIDTH=70%><BR><IMG SRC="images/stepfwd_on.png" WIDTH=16 HEIGHT=16 BORDER=0> Click on the "Archive" Time Control push button in the bottom right corner to show the Time Controls.<BR></TD></TR> +</TABLE> +<P><A NAME="pmtime"><B><FONT SIZE=4>Time Control</FONT></B></A></P> +<P>We are now presented with the Time Control window, which is actually a separate process (<I>pmtime</I>). This program controls the flow of time in pmchart. +</P> +<TABLE WIDTH=100% BORDER=0 CELLPADDING=0 CELLSPACING=0 STYLE="page-break-before: always"> + <TR><TD WIDTH=350><P VALIGN=MIDDLE ALIGN=LEFT><CENTER><BR><IMG ALIGN=LEFT SRC="images/pmtime_archive.png" BORDER=0></CENTER></P></TD> + <TD><BR><P>There are several modes of playback available in archive mode:<UL><LI>Normal mode, where time updates are sent to the client at a continuous rate (usually not too different to the original live recording), as determined by the "Speed" wheel setting. + <LI>Step mode, where time is only advanced/retreated (by clicking on the Step button) one sample at a time. + <LI>Fast mode, where time is moved quickly in either a fast forward or fast rewind direction, and the visible charts are updated as quickly as possible. +</UL></P><P>The Speed setting can be changed by directly editing the text entry box, or more simply by selecting and rotating the wheel either left or right. Speed is only relevent in Normal mode.</TD> + </TR> +</TABLE> +</P> +<TABLE WIDTH=100% BORDER=0 CELLPADDING=10 CELLSPACING=20> + <TR><TD BGCOLOR="#e2e2e2" WIDTH=70%><BR><IMG SRC="images/stepfwd_on.png" WIDTH=16 HEIGHT=16 BORDER=0> Press the Play button.<BR></TD></TR> +</TABLE> +<P>We now see the pmchart Disk and CPU charts displaying the recorded data, one sample after another, and the chart appears to be moving from right to left as time advances at the leading (right) edge of the time axis. +<P>We can increase the speed of the playback by moving the Time Controls wheel from left to right, and vice-versa to reduce the playback speed</B> +</P> +<TABLE WIDTH=100% BORDER=0 CELLPADDING=10 CELLSPACING=20> + <TR><TD BGCOLOR="#e2e2e2" WIDTH=70%><BR><IMG SRC="images/stepfwd_on.png" WIDTH=16 HEIGHT=16 BORDER=0> Press the Stop button.<BR></TD></TR> +</TABLE> +<P>We have now effectively paused, showing a number of Visible Points from the current sample time (displayed in both the Time Control window and the time axis, in the bottom right of the pmchart display) backward in time. +</P> +<TABLE WIDTH=100% BORDER=0 CELLPADDING=10 CELLSPACING=20> + <TR><TD BGCOLOR="#e2e2e2" WIDTH=70%><BR><IMG SRC="images/stepfwd_on.png" WIDTH=16 HEIGHT=16 BORDER=0> Use the Position slider in the Time Control window to move toward the end of the archive.<BR>Press the Back button.<BR></TD></TR> +</TABLE> +<P>Now time appears to be moving backward, with time updates scrolling past in the pmchart time axis from left to right, until we reach the start of the archive. At that point, playback will stop and the Time Controls will be updated accordingly. + +<P><BR></P> +<TABLE WIDTH=100% BORDER=0 CELLPADDING=0 CELLSPACING=0 BGCOLOR="#e2e2e2"> + <TR><TD WIDTH=100% BGCOLOR="#081c59"><P ALIGN=LEFT><FONT SIZE=5 COLOR="#ffffff"><B><A NAME="next">Next Steps</A></B></FONT></P></TD></TR> +</TABLE> +<P>This introductory tutorial has touched on the basics of using this handy analysis tool. Many functions have not been discussed at all, or only briefly touched on – feel free to investigate these areas in detail now:<BR> +<UL> + <LI>Multiple Tabs + <LI>Different chart styles + <LI>Monitoring multiple hosts simultaneously +</UL> +<P><BR></P> +<HR> +<CENTER> +<TABLE WIDTH=100% BORDER=0 CELLPADDING=0 CELLSPACING=0> + <TR> <TD WIDTH=50%><P>Copyright © 2007-2010 <A HREF="http://www.aconex.com/"><FONT COLOR="#000060">Aconex</FONT></A><BR>Copyright © 2000-2004 <A HREF="http://www.sgi.com/"><FONT COLOR="#000060">Silicon Graphics Inc</FONT></P></TD> + <TD WIDTH=50%><P ALIGN=RIGHT><A HREF="http://pcp.io/"><FONT COLOR="#000060">PCP Site</FONT></A><BR>Copyright © 2012-2014 <A HREF="http://www.redhat.com/"><FONT COLOR="#000060">Red Hat</FONT></P></TD> </TR> +</TABLE> +</CENTER> +</BODY> +</HTML> diff --git a/man/html/lab.pmdas.html b/man/html/lab.pmdas.html new file mode 100644 index 0000000..a61bc1d --- /dev/null +++ b/man/html/lab.pmdas.html @@ -0,0 +1,44 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> +<HTML> +<HEAD> + <meta http-equiv="content-type" content="text/html; charset=utf-8"> + <meta http-equiv="content-style-type" content="text/css"> + <link href="pcpdoc.css" rel="stylesheet" type="text/css"> + <link href="images/pcp.ico" rel="icon" type="image/ico"> + <TITLE>Adding Metrics</TITLE> +</HEAD> +<BODY LANG="en-AU" TEXT="#000060" DIR="LTR"> +<TABLE WIDTH=100% BORDER=0 CELLPADDING=0 CELLSPACING=0 STYLE="page-break-before: always"> + <TR> <TD WIDTH=64 HEIGHT=64><FONT COLOR="#000080"><A HREF="http://pcp.io/"><IMG SRC="images/pcpicon.png" NAME="pmcharticon" ALIGN=TOP WIDTH=64 HEIGHT=64 BORDER=0></A></FONT></TD> + <TD WIDTH=1><P> </P></TD> + <TD WIDTH=500><P VALIGN=MIDDLE ALIGN=LEFT><A HREF="index.html"><FONT COLOR="#cc0000">Home</FONT></A> · <A HREF="lab.pmchart.html"><FONT COLOR="#cc0000">Charts</FONT></A> · <A HREF="timecontrol.html"><FONT COLOR="#cc0000">Time Control</FONT></A></P></TD> + </TR> +</TABLE> +<H1 ALIGN=CENTER STYLE="margin-top: 0.48cm; margin-bottom: 0.32cm"><FONT SIZE=7>Adding Metrics</FONT></H1> +<TABLE WIDTH=15% BORDER=0 CELLPADDING=5 CELLSPACING=10 ALIGN=RIGHT> + <TR><TD BGCOLOR="#e2e2e2"><IMG SRC="images/system-search.png" WIDTH=16 HEIGHT=16 BORDER=0> <I>Tools</I><BR><PRE> +dbpmda +genpmda +python +perl +</PRE></TD></TR> +</TABLE> +<P>Introductory text. This is a placeholder. TODO... +</P> + +<P><BR></P> +<TABLE WIDTH=100% BORDER=0 CELLPADDING=0 CELLSPACING=0 BGCOLOR="#e2e2e2"> + <TR><TD WIDTH=100% BGCOLOR="#081c59"><P ALIGN=LEFT><FONT SIZE=5 COLOR="#ffffff"><B>Next Section</B></FONT></P></TD></TR> +</TABLE> +<P>Next paragraph.</P> + +<P><BR></P> +<HR> +<CENTER> +<TABLE WIDTH=100% BORDER=0 CELLPADDING=0 CELLSPACING=0> + <TR> <TD WIDTH=50%><P>Copyright © 2007-2010 <A HREF="http://www.aconex.com/"><FONT COLOR="#000060">Aconex</FONT></A><BR>Copyright © 2000-2004 <A HREF="http://www.sgi.com/"><FONT COLOR="#000060">Silicon Graphics Inc</FONT></P></TD> + <TD WIDTH=50%><P ALIGN=RIGHT><A HREF="http://pcp.io/"><FONT COLOR="#000060">PCP Site</FONT></A><BR>Copyright © 2012-2014 <A HREF="http://www.redhat.com/"><FONT COLOR="#000060">Red Hat</FONT></P></TD> </TR> +</TABLE> +</CENTER> +</BODY> +</HTML> diff --git a/man/html/lab.pmie.html b/man/html/lab.pmie.html new file mode 100644 index 0000000..3967bf9 --- /dev/null +++ b/man/html/lab.pmie.html @@ -0,0 +1,550 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> +<!-- + (c) Copyright 2010 Aconex. All rights reserved. + (c) Copyright 2000-2004 Silicon Graphics Inc. All rights reserved. + Permission is granted to copy, distribute, and/or modify this document + under the terms of the Creative Commons Attribution-Share Alike, Version + 3.0 or any later version published by the Creative Commons Corp. A copy + of the license is available at + http://creativecommons.org/licenses/by-sa/3.0/us/ . +--> +<HTML> +<HEAD> + <meta http-equiv="content-type" content="text/html; charset=utf-8"> + <meta http-equiv="content-style-type" content="text/css"> + <link href="pcpdoc.css" rel="stylesheet" type="text/css"> + <link href="images/pcp.ico" rel="icon" type="image/ico"> + <TITLE>Automated reasoning with pmie</TITLE> +</HEAD> +<BODY LANG="en-AU" TEXT="#000060" DIR="LTR"> +<TABLE WIDTH=100% BORDER=0 CELLPADDING=0 CELLSPACING=0 STYLE="page-break-before: always"> + <TR> <TD WIDTH=64 HEIGHT=64><FONT COLOR="#000080"><A HREF="http://pcp.io/"><IMG SRC="images/pcpicon.png" NAME="pmcharticon" ALIGN=TOP WIDTH=64 HEIGHT=64 BORDER=0></A></FONT></TD> + <TD WIDTH=1><P> </P></TD> + <TD WIDTH=500><P VALIGN=MIDDLE ALIGN=LEFT><A HREF="index.html"><FONT COLOR="#cc0000">Home</FONT></A> · <A HREF="lab.pmchart.html"><FONT COLOR="#cc0000">Charts</FONT></A> · <A HREF="timecontrol.html"><FONT COLOR="#cc0000">Time Control</FONT></A></P></TD> + </TR> +</TABLE> +<H1 ALIGN=CENTER STYLE="margin-top: 0.48cm; margin-bottom: 0.32cm"><FONT SIZE=7> +Automated reasoning with <I>pmie</I></FONT></H1> +<TABLE WIDTH=15% BORDER=0 CELLPADDING=5 CELLSPACING=10 ALIGN=RIGHT> + <TR><TD BGCOLOR="#e2e2e2"><IMG SRC="images/system-search.png" WIDTH=16 HEIGHT=16 BORDER=0> <I>Tools</I><BR><PRE> +pmie +dkvis +pminfo +pmchart +pmdumplog +</PRE></TD></TR> +</TABLE> + +<P>For many systems, the performance data is produced in volumes and at +rates that require some sort of automated and intelligent filtering by +which the mundane data can be removed from the interesting information.</P> +<P>Once interesting information has been found, there are a variety of +actions that may be appropriate.</P> +<P>The Performance Metrics Inference Engine (<I>pmie</I>) is the tool +within PCP that is designed for automated filtering and reasoning +about performance.</P> +<P>For an explanation of Performance Co-Pilot terms and acronyms, consult +the <A HREF="glossary.html">PCP glossary</A>.</P> +<BR> +<UL> +<LI><A HREF="#basics"><I>pmie</I> basics</A> +<LI><A HREF="#repeat">Action repetition and launching arbitrary actions</A> +<LI><A HREF="#value-sets">Rule evaluation over sets of values</A> +<LI><A HREF="#predicates">Forms of <I>pmie</I> predicate</A> + <UL> + <LI><A HREF="#exist">Existential quantification</A> + <LI><A HREF="#universal">Universal quantification</A> + <LI><A HREF="#percentile">Percentile quantification</A> + <LI><A HREF="#others">Other predicates</A> + </UL> +<LI><A HREF="#expr"><I>pmie</I> expressions</A> +<LI><A HREF="#actions">Actions and parameter substitution of predicate context</A> +<LI><A HREF="#audit">Performance audit using archives</A> +<LI><A HREF="#interval">Influence of the update interval</A> +</UL> +<BR> +<P><I>pmie</I> evaluates a set of assertions against a time-series of +performance metric values collected in real-time from PMCD on one or +more hosts or from one or more PCP archives.</P> +<P>For those assertions that are found to be true, <I>pmie</I> is able +to print messages, activate alarms, write syslog entries and launch +arbitrary programs.</P> +<P>Typical <I>pmie</I> usage might include: +<UL> + <LI> monitoring for exceptional performance conditions + <LI> raising alarms + <LI> automated filtering of acceptable performance + <LI> early warning of pending performance problems + <LI> "call home" to the support center + <LI> retrospective performance audits + <LI> evaluating assertions about "before and after" + performance in the context of upgrades or system reconfiguration + <LI> hypothesis evaluation for capacity planning + <LI> as part of the <I>post mortem</I> analysis following a system failure +</UL> +</P> + +<P><BR></P> +<TABLE WIDTH=100% BORDER=0 CELLPADDING=0 CELLSPACING=0 BGCOLOR="#e2e2e2"> + <TR><TD WIDTH=100% BGCOLOR="#081c59"><P ALIGN=LEFT><FONT SIZE=5 COLOR="#ffffff"><B><A NAME="basics"><I>pmie</I> basics</A></B></FONT></P></TD></TR> +</TABLE> +<P>The simplest rules test thresholds and are formed from expressions +involving performance metrics and constants. For example, the following +statement:</P> +<PRE> +<I> If the context switch rate exceeds 2000 switches per second</I> +<I> then activate an alarm notifier</I> +</PRE> +<P>may be translated into the following <I>pmie</I> rule:</P> +<CENTER><P ALIGN="CENTER"><IMG SRC="images/pmie_rule1.png" WIDTH="495" HEIGHT="200"></P> +</CENTER> +<P>where the "alarm" action launches an information dialog with +the specified message.</P> +<P>Other <I>pmie</I> actions are discussed later in the +<A HREF="#actions">Actions and parameter substitution of predicate context</A> section.</P> + +<TABLE WIDTH=100% BORDER=0 CELLPADDING=0 CELLSPACING=0> +<TR><TD> + <TABLE WIDTH=100% BORDER=0 CELLPADDING=10 CELLSPACING=20> + <TR><TD BGCOLOR="#e2e2e2" WIDTH=50%><BR><IMG SRC="images/stepfwd_on.png" WIDTH=16 HEIGHT=16 BORDER=0> Generate alot of context switches, and watch 'em:<BR> +<PRE><B> +$ . /etc/pcp.env +$ pmie -v -c $PCP_DEMOS_DIR/pmie/pswitch.pmie & +$ pmchart -t 1sec -c $PCP_DEMOS_DIR/pmie/pswitch.view & +$ while true; do sleep 0; done & +$ jobs +[1]- Running pmie -v -c $PCP_DEMOS_DIR/pmie/pswitch.pmie & +[2]- Running pmchart -t 0.5sec -c $PCP_DEMOS_DIR/pmie/pswitch.view & +[3]+ Running while true; do sleep 0; done & +</B></PRE> +<BR> +<B>Important:</B> the above test case can be quite intrusive on low processor +count machines, so remember to terminate it when you've finished this tutorial: +<PRE><B> +$ jobs +... +[3]+ Running while true; do sleep 0; done & +$ fg %3 +</B></PRE> +</TD></TR> +</TABLE> +</TD> +<TD><IMG ALIGN=RIGHT SRC="images/cpu_pswitch.png" BORDER=0></TD> +</TR> +</TABLE> + +<P><BR></P> +<TABLE WIDTH=100% BORDER=0 CELLPADDING=0 CELLSPACING=0 BGCOLOR="#e2e2e2"> + <TR><TD WIDTH=100% BGCOLOR="#081c59"><P ALIGN=LEFT><FONT SIZE=5 COLOR="#ffffff"><B><A NAME="repeat">Action repetition and launching arbitrary actions</A></B></FONT></P></TD></TR> +</TABLE> +<P>Sometimes it is useful for an action not to be repeated for a time. +For example, the English statement:</P> +<PRE></I> + If the context switch rate exceeds 2000 switches per second + then launch <B>top</B> in an <B>xterm</B> window + but hold off repetition of the action for 5 minutes +</I></PRE> +<P>may be translated into the following <I>pmie</I> rule:</P> +<CENTER><P ALIGN="CENTER"><IMG SRC="images/pmie_rule2.png" WIDTH="495" HEIGHT="200"></P> +</CENTER> +<P> +Note the <B><TT><FONT COLOR="#ff0000">shell</FONT></TT></B> keyword +introduces an arbitrary action in which any program can be launched.</P> + +<P><BR></P> +<TABLE WIDTH=100% BORDER=0 CELLPADDING=0 CELLSPACING=0 BGCOLOR="#e2e2e2"> + <TR><TD WIDTH=100% BGCOLOR="#081c59"><P ALIGN=LEFT><FONT SIZE=5 COLOR="#ffffff"><B><A NAME="value-sets">Rule evaluation over sets of values</A></B></FONT></P></TD></TR> +</TABLE> +<P>Each <I>pmie</I> rule may be evaluated over a set of performance metric values.</P> +<P>Conceptually these sets of values are constructed for a single performance +metric by taking the cross product of observed values over the three +dimensions of: <B>hosts</B>, <B>instances</B> and <B>times</B>.</P> +<P>The default host is:</P> +<UL> + <LI> + the host named in the <B><TT>-h</TT></B> command line option to + <I>pmie</I>, or + <LI> + the host associated with the archive named in the first + <B><TT>-a</TT></B> command line option to <I>pmie</I>, or + <LI> + the local host if neither <B><TT>-h</TT></B> nor <B><TT>-a</TT></B> + appears on the command line. +</UL> +<P> +By default, a metric name represents the set of values formed by the +cross product of the default host for <I>pmie</I>, <B>all</B> instances +and the current time. If there is only one instance, then the set +contains a singular value.</P> +<P> +For example <B><TT>filesys.free</TT></B> is the most recent set of +values for the amount of free space on every mounted file system on the +default host, and may be represented by the shaded rectangle in the +following figure:</P> +<CENTER><P ALIGN="CENTER"><IMG SRC="images/pmie_axis1.png" WIDTH="396" HEIGHT="226"></P> +</CENTER> +<P> +One or more suffix of the form <B><TT>#<I>instance</I></TT></B> +(where <TT><I>instance</I></TT> is the external instance identifier) +after a metric name restricts the set of values on the default host +for <I>pmie</I>, to the <B>nominated</B> instances and the current time. +If <I><TT>instance</TT></I> includes any special characters then it +should be enclosed in single quotes.</P> +<P> +For example <B><TT>filesys.free #'/usr'</TT></B> is the most recent +value for the amount of free space on the <I>/usr</I> file system on the +default host, and may be represented as follows:</P> +<CENTER><P ALIGN="CENTER"><IMG SRC="images/pmie_axis2.png" WIDTH="396" HEIGHT="226"></P> +</CENTER> +<P> +One or more suffix of the form <B><TT>:<I>hostname</I></TT></B> after +a metric name changes the set of values to include <B>all</B> instances +on the <B>nominated</B> hosts, at the current time.</P> +<P> +For example <B><TT>filesys.free :otherhost</TT></B> is the most +recent set of values for the amount of free space on every mounted file +system on the host <B>otherhost</B>, and may be represented as follows:</P> +<CENTER><P ALIGN="CENTER"><IMG SRC="images/pmie_axis3.png" WIDTH="396" HEIGHT="226"></P> +</CENTER> +<P> +A suffix of the form <B><TT>@<I>N..M</I></TT></B> after a metric name +changes the set of values to be that formed by <B>all</B> instances on +the default host for <I>pmie</I>, at the sample times +<B><I><TT>N</TT></I></B>, <B><I><TT>N+1</TT></I></B>, ... +<B><I><TT>M</TT></I></B><TT> </TT><B>back</B> from the current time.</P> +<P> +And finally more than one type of suffix may be used to control enumeration +in each of the three axis directions.</P> +<P> +For example <B><TT>filesys.free #'/usr' @0..3</TT></B> refers to +the default host, restricts the instances and enumerates the time. +This may be represented as follows:</P> +<CENTER><P ALIGN="CENTER"><IMG SRC="images/pmie_axis4.png" WIDTH="396" HEIGHT="226"></P> +</CENTER> + +<P><BR></P> +<TABLE WIDTH=100% BORDER=0 CELLPADDING=0 CELLSPACING=0 BGCOLOR="#e2e2e2"> + <TR><TD WIDTH=100% BGCOLOR="#081c59"><P ALIGN=LEFT><FONT SIZE=5 COLOR="#ffffff"><B><A NAME="predicates">Forms of <I>pmie</I> predicate</A></B></FONT></P></TD></TR> +</TABLE> +<H3><A NAME="exist">Existential quantification</A></H3> +<P> +The predicate <B><TT><FONT COLOR="#ff0000">some_inst</FONT></TT></B><TT> +<I>expr</I></TT> is true if there is some instance of a metric that +makes <I><TT>expr</TT></I> true.</P> +<P> +Existential quantification over hosts and consecutive samples is also +supported by <B><TT><FONT COLOR="#ff0000">some_host</FONT></TT></B><TT> +<I>expr</I></TT> and +<B><TT><FONT COLOR="#ff0000">some_sample</FONT></TT></B><TT> +<I>expr</I></TT>.</P> +<P> +For example, the English statement:</P> +<PRE> +<I> if some disk is doing a lot of I/O</I> +<I> then launch a visible alarm</I> +</PRE> +<P>may be translated into the following <I>pmie</I> rule:</P> +<CENTER><P ALIGN="CENTER"><IMG SRC="images/pmie_rule3.png" WIDTH="495" HEIGHT="120"></P> +</CENTER> +<BR> +<H3><A NAME="universal">Universal quantification</A></H3> +<P> +The predicate <B><TT><FONT COLOR="#ff0000">all_inst</FONT></TT></B> +<TT><I>expr</I></TT> is true if <I><TT>expr</TT></I> is true for every +instance of a metric.</P> +<P> +Universal quantification over hosts and consecutive samples is also +supported by +<B><TT><FONT COLOR="#ff0000">all_host</FONT></TT></B> <TT><I>expr</I></TT> +and <B><TT><FONT COLOR="#ff0000">all_sample</FONT></TT></B> +<TT><I>expr</I></TT>.</P> +<P> +Quantification predicates may be nested.</P> +<P> +For example, the English statement:</P> +<PRE> +<I> if for every one of the last 5 samples,</I> +<I> some disk (but not necessarily the same disk) is doing a lot of I/O</I> +<I> then launch a visible alarm</I> +</PRE> +<P>may be translated into the following <I>pmie</I> rule:</P> +<CENTER><P ALIGN="CENTER"><IMG SRC="images/pmie_rule4.png" WIDTH="540" HEIGHT="140"></P> +</CENTER> +<P>Note that reversing the nesting of the universal and existential predicates produces +a rule which has slightly different English semantics, namely:</P> +<PRE> +<I> if the same disk has been doing a lot of I/O</I> +<I> for every one of the last 5 samples,</I> +<I> then launch a visible alarm</I> +</PRE> +<CENTER><P ALIGN="CENTER"><IMG SRC="images/pmie_rule5.png" WIDTH="540" HEIGHT="140"></P> +</CENTER> +<BR> +<H3><A NAME="percentile">Percentile quantification</A></H3> +<P> +The predicate +<TT><I><FONT COLOR="#000000">N</FONT></I><B><FONT COLOR="#ff0000">%_inst</FONT></B> <I>expr</I></TT> +is true if <I><TT>expr</TT></I> is true for <I><TT>N</TT></I> percent +of the instances of a metric.</P> +<P> +Percentile quantification over hosts and consecutive samples is also +supported by +<TT><I><FONT COLOR="#000000">N</FONT></I><B><FONT COLOR="#ff0000">%_host</FONT></B> <I>expr</I></TT> and +<TT><I><FONT COLOR="#000000">N</FONT></I><B><FONT COLOR="#ff0000">%_sample</FONT></B> <I>expr</I></TT>.</P> +<P> +For example, the English phrase:</P> +<PRE> +<I> if at least 30% of the disks are doing a lot of I/O</I> +<I> then launch a visible alarm</I> +</PRE> +<P> +may be translated into the following <I>pmie</I> expression:</P> +<CENTER><P ALIGN="CENTER"><IMG SRC="images/pmie_rule3.png" WIDTH="495" HEIGHT="120"></P> +</CENTER> +<BR> +<H3><A NAME="others">Other predicates</A></H3> +<P> +Instance quantification: +<B><TT><FONT COLOR="#ff0000">match_inst</FONT></TT>, +<TT><FONT COLOR="#ff0000">nomatch_inst</FONT></TT></B></P> +<P> +Value aggregation: +<B><TT><FONT COLOR="#ff0000">avg_inst</FONT></TT>, +<TT><FONT COLOR="#ff0000">sum_inst</FONT></TT>, +<TT><FONT COLOR="#ff0000">avg_host</FONT></TT>, +<TT><FONT COLOR="#ff0000">sum_host</FONT></TT>, +<TT><FONT COLOR="#ff0000">avg_sample</FONT></TT>, +<TT><FONT COLOR="#ff0000">sum_sample</FONT></TT></B></P> +<P> +Value extrema: +<B><TT><FONT COLOR="#ff0000">min_inst</FONT></TT>, +<TT><FONT COLOR="#ff0000">max_inst</FONT></TT>, +<TT><FONT COLOR="#ff0000">min_host</FONT></TT>, +<TT><FONT COLOR="#ff0000">max_host</FONT></TT>, +<TT><FONT COLOR="#ff0000">min_sample</FONT></TT>, +<TT><FONT COLOR="#ff0000">max_sample</FONT></TT></B></P> +<P> +Value set cardinality: +<B><TT><FONT COLOR="#ff0000">count_inst</FONT></TT>, +<TT><FONT COLOR="#ff0000">count_host</FONT></TT>, +<TT><FONT COLOR="#ff0000">count_sample</FONT></TT></B></P> +<P> +Trends: +<B><TT><FONT COLOR="#ff0000">rising</FONT></TT>, +<TT><FONT COLOR="#ff0000">falling</FONT></TT>, +<TT><FONT COLOR="#ff0000">rate</FONT></TT></B></P> +<P>These predicates are discussed in depth in the <I>pmie</I> manual page.</P> + + +<P><BR></P> +<TABLE WIDTH=100% BORDER=0 CELLPADDING=0 CELLSPACING=0 BGCOLOR="#e2e2e2"> + <TR><TD WIDTH=100% BGCOLOR="#081c59"><P ALIGN=LEFT><FONT SIZE=5 COLOR="#ffffff"><B><I><A NAME="expr">pmie</I> expressions</A></B></FONT></P></TD></TR> +</TABLE> +<P><I>pmie</I> expressions are very similar to the C programming language; +especially with regard to arithmetic, relational and Boolean operators, +and the use of parenthesis for grouping.</P> +<P>The <I>pmie</I> language allows macro definition and textual substitution +for common expressions and metric names.</P> +<PRE> + // Macro for later use ... + bc = "buffer_cache"; + + // Using the above macro + // If the buffer cache is in use (more than 50 read requests) + // with hit ratio less than 90%, then popup an alarm + $bc.getblks > 50 && $bc.getfound / $bc.getblks < 0.9 + -> alarm "poor buffer cache hit rate"; + +</PRE> +<P>All calculations are done in double precision, where default units are +<B>bytes</B>, <B>seconds</B> and <B>counts</B>. +Note that this can sometimes cause surprises:</P> +<PRE> + mem.freemem > 10; +</PRE> +<P> +will always be true, unlike</P> +<PRE> + mem.freemem > 10 Mbyte; +</PRE> +<P> +Metrics with "counter" semantics have their units, semantics +and values converted to rates. For example, the metric +<B><TT>network.interface.total.bytes</TT></B> measures the number of bytes passed +across all of the configured network interfaces. The metric is a counter and the +units are <B><TT>bytes</TT></B>. If <I>pmie</I> finds the value of +<B><TT>network.interface.total.bytes</TT></B> to be 10000 and 15000 on consecutive +fetches 5 seconds apart, then the <I>pmie</I> expression</P> +<PRE> + <B><TT>kernel.interface.total.bytes;</TT></B> +</PRE> +<P> +would have the value <B>1000</B> and the units of +<B><TT>bytes/second</TT></B>.</P> + +<P><BR></P> +<TABLE WIDTH=100% BORDER=0 CELLPADDING=0 CELLSPACING=0 BGCOLOR="#e2e2e2"> + <TR><TD WIDTH=100% BGCOLOR="#081c59"><P ALIGN=LEFT><FONT SIZE=5 COLOR="#ffffff"><B><A NAME="actions">Actions and parameter substitution of predicate context</A></B></FONT></P></TD></TR> +</TABLE> +<P> The available <I>pmie</I> actions are:</P> +<UL> +<LI><B><TT><FONT COLOR="#ff0000">alarm</FONT></TT></B> - popup alarm notifier +<LI><B><TT><FONT COLOR="#ff0000">shell</FONT></TT></B> - launch any program +<LI><B><TT><FONT COLOR="#ff0000">syslog</FONT></TT></B> - write an entry in the system log +<LI><B><TT><FONT COLOR="#ff0000">print</FONT></TT></B> - print message to standard output +</UL> +<P>Within the arguments that follow the action keyword, parameter substitution +may be used to incorporate some context from the predicate in the arguments +to the actions. For example, when using <B><TT><FONT COLOR="#ff0000">some_host</FONT></TT></B> or <B><TT><FONT COLOR="#ff0000">some_inst</FONT></TT></B> in a predicate, it is most helpful to know "which hosts" or "which instances" +made the condition true.</P> +<P>The following substitutions are available:</P> +<UL> +<LI><B><TT><FONT COLOR="#ff0000">%h</FONT></TT></B> appearing in an action is replaced by the qualifying hosts +<LI><B><TT><FONT COLOR="#ff0000">%i</FONT></TT></B> appearing in an action is replaced by the qualifying instances +<LI><B><TT><FONT COLOR="#ff0000">%v</FONT></TT></B> appearing in an action is replaced by value of the left-most top-level +expression in the expression tree that represents the parsed condition +</UL> + +<P><BR></P> +<TABLE WIDTH=100% BORDER=0 CELLPADDING=0 CELLSPACING=0 BGCOLOR="#e2e2e2"> + <TR><TD WIDTH=100% BGCOLOR="#081c59"><P ALIGN=LEFT><FONT SIZE=5 COLOR="#ffffff"><B><A NAME="audit">Performance audit using archives</A></B></FONT></P></TD></TR> +</TABLE> +<P> In this exercise, we shall use <I>pmie</I> to investigate performance from +a PCP archive.</P> + +<TABLE WIDTH=100% BORDER=0 CELLPADDING=0 CELLSPACING=0> +<TR><TD> + <TABLE WIDTH=100% BORDER=0 CELLPADDING=10 CELLSPACING=10> + <TR><TD BGCOLOR="#e2e2e2" WIDTH=50%><BR><IMG SRC="images/stepfwd_on.png" WIDTH=16 HEIGHT=16 BORDER=0> Use <I>pmdumplog</I> to report the details of when the archive was created and from which host the archive was created:<BR> +<PRE><B> +$ . /etc/pcp.env +$ tar xzf $PCP_DEMOS_DIR/tutorials/pmie.tar.gz +$ pmdumplog -L pmie/babylon.perdisk +Log Label (Log Format Version 2) +Performance metrics from host babylon + commencing Wed Jan 25 08:17:48.460 1995 + ending Wed Jan 25 14:12:48.457 1995 +Archive timezone: PST8PDT +PID for pmlogger: 18496 +</B></PRE> +<I>Yes, PCP archives from <B>that</B> long ago still work today!</I><BR> +<BR>From running the command:<BR> +<PRE><B> +$ dkvis -a pmie/babylon.perdisk & +</B></PRE> +we can visually determine which disks and which controllers are active. +</TD> +<TD><IMG ALIGN=RIGHT SRC="images/dkvis.png" BORDER=0></TD> +</TR> +</TABLE> +<P>This is easy, which is good. +However, consider the situation where we have a large number of +separate archives, possibly collected from different machines and with +different disk configurations. We'd like to be able to quickly process +these archives, and filter out the extraneous information, to focus on +those times at which the disks were busy, how busy they were, etc.</P> + +<TABLE WIDTH=100% BORDER=0 CELLPADDING=10 CELLSPACING=20> + <TR><TD BGCOLOR="#e2e2e2" WIDTH=50%><BR><IMG SRC="images/stepfwd_on.png" WIDTH=16 HEIGHT=16 BORDER=0> Using the <I>pmie</I> configuration file in <A HREF="pmie/disk.pmie">pmie/disk.pmie</A> as a starting point, run this against the archive:<BR> +<PRE><B> +$ pmie -t 5min -a pmie/babylon.perdisk < pmie/disk.pmie +</B></PRE> +<BR> +Copy the configuration file and extend it by adding new rules to report +different messages for each of the following: +<OL> + <LI> some disk is doing more than 30 reads per second (make use of the <B><TT>disk.dev.read</TT></B> metric) + <LI> some disk is doing more than 30 writes per second (make use of the <B><TT>disk.dev.write</TT></B> metric) + <LI> some disk has a high I/O rate (consider a high I/O rate to be when the +transfers are greater than 40 per second), and where reads contribute +greater than ninety-five percent of the total transfers + <LI> some disk has a high I/O rate (as defined above) and the system's 1 +minute load average is greater than 5 (make use of the "1 +minute" instance for the <B><TT>kernel.all.load</TT></B> metric). +</OL> +<P>Use the <I>pmie/babylon.perdisk</I> archive extracted earlier to cross check your rules as you add each one.</P> +</OL> +</TD></TR> +</TABLE> + +<H4> <I>Hints:</I> </H4> +<UL> + <LI> Make sure you sample the archive every 5 minutes (<B>-t 5min</B> on the command line). + <LI> You'll need to use existential quantification (the <B>some_inst</B> keyword) in all of the rules. + <LI> When producing the final rule, start with the load average metric using the command: +<BR><BR> +<TT><B>$ pminfo -f kernel.all.load</B></TT> +<BR><BR> +Notice there are three values corresponding to the 1, 5 and 15 minute load average. +<BR> +For <I>pmie</I> the metric <TT><B>kernel.all.load</B></TT> +is a set of <B>three</B> values, one for each instance at each point +of time. To choose <B>one</B> instance append the <B><TT>#</B></TT> +qualifier to the name of the metric and the name of a particular instance, +e.g. <TT><B>kernel.all.load #'1 minute'</B></TT>. + <LI> The <I>pmie(1)</I> man page describes the <I>pmie</I> language in detail. + <LI> You may find it helpful to use <I>dkvis</I> to visually predict +when the rules should be triggered. Using the <B>PCP Archive Time Control</B> +dialog, you can position the <I>dkvis</I> display at the time where <I>pmie</I> +is reporting interesting activity. +</UL> +<P> +When all else fails, the solution is at <A HREF="pmie/answer.pmie">pmie/answer.pmie</A>.</P> + +<P><BR></P> +<TABLE WIDTH=100% BORDER=0 CELLPADDING=0 CELLSPACING=0 BGCOLOR="#e2e2e2"> + <TR><TD WIDTH=100% BGCOLOR="#081c59"><P ALIGN=LEFT><FONT SIZE=5 COLOR="#ffffff"><B><A NAME="interval">Influence of the update interval </A></B></FONT></P></TD></TR> +</TABLE> +<P>As a final exercise, investigate the effects of using different update +intervals on the <I>pmie</I> command line (the <B>-t</B> option) with +the initial configuration file and archive from the previous exercise.</P> +<TABLE WIDTH=100% BORDER=0 CELLPADDING=10 CELLSPACING=20> + <TR><TD BGCOLOR="#e2e2e2" WIDTH=50%><BR><IMG SRC="images/stepfwd_on.png" WIDTH=16 HEIGHT=16 BORDER=0> Try each of the following:<BR> +<PRE><B> +$ pmie -t 5min -a pmie/babylon.perdisk < pmie/disk.pmie +$ pmie -t 6min -a pmie/babylon.perdisk < pmie/disk.pmie +$ pmie -t 10min -a pmie/babylon.perdisk < pmie/disk.pmie +</B></PRE> +</TD></TR> +</TABLE> +<P>Why does the number of reported incidents decline as the rule evaluation interval increases?</P> +<TABLE WIDTH=100% BORDER=0 CELLPADDING=10 CELLSPACING=20> + <TR><TD BGCOLOR="#e2e2e2" WIDTH=50%><BR><IMG SRC="images/stepfwd_on.png" WIDTH=16 HEIGHT=16 BORDER=0> Repeat the exercise but use <I>pmchart</I>:<BR> +<PRE><B> +$ pmchart -t 5min -a pmie/babylon.perdisk & +</B></PRE> +<BR> +Use the <B>New Chart...</B> command of the <B>File</B> menu to plot +the <B><TT>disk.dev.total</TT></B> metric for the disk <B>jag3d5</B>:<P> + <UL> + <LI> Enter the name <TT>disk.dev.total</TT> into the Metric Selection dialog. + <LI> There should be 54 instances of the metric listed. + Find the instance <B>jag3d5</B>, select it, and press OK. + </UL> +</B></PRE> +</TD></TR> +</TABLE> + +<P>Use the PCP Archive Time Control dialog to change the <B><I>Interval</I></B>.</P> +<P>By using <B>smaller</B> values of the update interval, can you +deduce the sampling rate of the data in the PCP archive?</P> + +<H4> <I>Hint:</I> </H4> +<UL> + <LI> From a PCP archive you can get a dump of the raw data and timestamps +when the data for a particular metric was collected using the command: +<BR> <BR> +<TT><B>$ pmdumplog pmie/babylon.perdisk disk.dev.total | more</B></TT> +<BR> <BR> +</UL> + +<P><BR></P> +<HR> +<CENTER> +<TABLE WIDTH=100% BORDER=0 CELLPADDING=0 CELLSPACING=0> + <TR> <TD WIDTH=50%><P>Copyright © 2007-2010 <A HREF="http://www.aconex.com/"><FONT COLOR="#000060">Aconex</FONT></A><BR>Copyright © 2000-2004 <A HREF="http://www.sgi.com/"><FONT COLOR="#000060">Silicon Graphics Inc</FONT></P></TD> + <TD WIDTH=50%><P ALIGN=RIGHT><A HREF="http://pcp.io/"><FONT COLOR="#000060">PCP Site</FONT></A><BR>Copyright © 2012-2014 <A HREF="http://www.redhat.com/"><FONT COLOR="#000060">Red Hat</FONT></P></TD> </TR> +</TABLE> +</CENTER> +</BODY> +</HTML> diff --git a/man/html/lab.pmieconf.html b/man/html/lab.pmieconf.html new file mode 100644 index 0000000..f8b90dd --- /dev/null +++ b/man/html/lab.pmieconf.html @@ -0,0 +1,199 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> +<!-- + (c) Copyright 2010 Aconex. All rights reserved. + (c) Copyright 2000-2004 Silicon Graphics Inc. All rights reserved. + Permission is granted to copy, distribute, and/or modify this document + under the terms of the Creative Commons Attribution-Share Alike, Version + 3.0 or any later version published by the Creative Commons Corp. A copy + of the license is available at + http://creativecommons.org/licenses/by-sa/3.0/us/ . +--> +<HTML> +<HEAD> + <meta http-equiv="content-type" content="text/html; charset=utf-8"> + <meta http-equiv="content-style-type" content="text/css"> + <link href="pcpdoc.css" rel="stylesheet" type="text/css"> + <link href="images/pcp.ico" rel="icon" type="image/ico"> + <TITLE>Site rules with pmieconf</TITLE> +</HEAD> +<BODY LANG="en-AU" TEXT="#000060" DIR="LTR"> +<TABLE WIDTH=100% BORDER=0 CELLPADDING=0 CELLSPACING=0 STYLE="page-break-before: always"> + <TR> <TD WIDTH=64 HEIGHT=64><FONT COLOR="#000080"><A HREF="http://pcp.io/"><IMG SRC="images/pcpicon.png" NAME="pmcharticon" ALIGN=TOP WIDTH=64 HEIGHT=64 BORDER=0></A></FONT></TD> + <TD WIDTH=1><P> </P></TD> + <TD WIDTH=500><P VALIGN=MIDDLE ALIGN=LEFT><A HREF="index.html"><FONT COLOR="#cc0000">Home</FONT></A> · <A HREF="lab.pmchart.html"><FONT COLOR="#cc0000">Charts</FONT></A> · <A HREF="timecontrol.html"><FONT COLOR="#cc0000">Time Control</FONT></A></P></TD> + </TR> +</TABLE> +<H1 ALIGN=CENTER STYLE="margin-top: 0.48cm; margin-bottom: 0.32cm"><FONT SIZE=7> +Site rules with <I>pmieconf</I></FONT></H1> +<TABLE WIDTH=15% BORDER=0 CELLPADDING=5 CELLSPACING=10 ALIGN=RIGHT> + <TR><TD BGCOLOR="#e2e2e2"><IMG SRC="images/system-search.png" WIDTH=16 HEIGHT=16 BORDER=0> <I>Tools</I><BR><PRE> +pmie +pmval +pmchart +pmieconf +pmdashping +</PRE></TD></TR> +</TABLE> +<P>This tutorial covers customization of <I>pmie</I> rules using +<I>pmieconf</I>. For an explanation of Performance Co-Pilot +terms and acronyms, consult the <A HREF="glossary.html">PCP glossary</A>.</P> +<UL> + <LI> + <A HREF="#start">Initial setup</A> + <LI> + <A HREF="#pmieconf">Using <I>pmieconf</I> and <I>pmie</I></A> + <LI> + <A HREF="#shping">Monitoring state with the <I>shping</I> PMDA</A> + <LI> + <A HREF="#custom">Custom site rules with <I>pmieconf</I></A> +</ul> +<P>It is advisable to first read the comprehensive introductory +<A HREF="lab.pmie.html">pmie</A> tutorial before tackling this one.</P> + +<P><BR></P> +<TABLE WIDTH=100% BORDER=0 CELLPADDING=0 CELLSPACING=0 BGCOLOR="#e2e2e2"> + <TR><TD WIDTH=100% BGCOLOR="#081c59"><P ALIGN=LEFT><FONT SIZE=5 COLOR="#ffffff"><B><A NAME="start">Initial Setup</A></B></FONT></P></TD></TR> +</TABLE> +<P>In this exercise we create a scenario which exhibits the sort of behaviour +that might be of concern in a production environment. We'll then use +several PCP tools to detect, identify and understand the problem.</P> +<TABLE WIDTH=100% BORDER=0 CELLPADDING=0 CELLSPACING=0> +<TR><TD> + <TABLE WIDTH=100% BORDER=0 CELLPADDING=10 CELLSPACING=20> + <TR><TD BGCOLOR="#e2e2e2" WIDTH=50%><BR><IMG SRC="images/stepfwd_on.png" WIDTH=16 HEIGHT=16 BORDER=0> Simulate an "interesting" problem scenario:<BR> +<PRE><B> +$ while true; do sleep 0; done & +</B></PRE> +<BR> + Have a look at some of the effects it's having on the system:<BR> +<PRE><B> +$ pmchart -t 0.5sec -c CPU & +</B></PRE> +<BR> +Create a new chart showing the process context switch rate (<I>kernel.all.pswitch</I>), +adding it to your existing display.<BR><BR> +<B>Important:</B> the above test case can be quite intrusive on low processor +count machines, so remember to terminate it when you've finished this tutorial: +<PRE><B> +$ jobs +[1]- Running while true; do sleep 0; done & +[2]+ Running pmchart -t 0.5sec -c CPU & +$ fg %1 +</B></PRE> +<BR> +However, you should leave it running throughout all of the tests below. +</TD></TR> +</TABLE> +</TD> +<TD><IMG ALIGN=RIGHT SRC="images/cpu_pswitch.png" BORDER=0></TD> +</TR> +</TABLE> + +<P><BR></P> +<TABLE WIDTH=100% BORDER=0 CELLPADDING=0 CELLSPACING=0 BGCOLOR="#e2e2e2"> + <TR><TD WIDTH=100% BGCOLOR="#081c59"><P ALIGN=LEFT><FONT SIZE=5 COLOR="#ffffff"><B><A NAME="pmieconf">Using <I>pmieconf</I> and <I>pmie</I></A></B></FONT></P></TD></TR> +</TABLE> +<TABLE WIDTH=100% BORDER=0 CELLPADDING=10 CELLSPACING=20> + <TR><TD BGCOLOR="#e2e2e2" WIDTH=70%><BR><IMG SRC="images/stepfwd_on.png" WIDTH=16 HEIGHT=16 BORDER=0> Create your own <I>pmie</I> rules using <I>pmieconf</I>:<BR> +<PRE><B>$ pmieconf -f myrules +<I>pmieconf></I> disable all +<I>pmieconf></I> enable cpu.context_switch +<I>pmieconf></I> modify global delta "5 sec" +<I>pmieconf></I> modify global holdoff "" +<I>pmieconf></I> modify global syslog_action no +<I>pmieconf></I> modify global user_action yes +<I>pmieconf></I> quit +</B></PRE> +Determine what this command sequence has done by:<BR> +<UL> + <LI>Inspecting the created file <I>myrules</I> + <LI>Making reference to the <I>pmieconf</I> man page + <LI>Exploring other <I>pmieconf</I> commands ("help" + and "list" are useful in this context) +</UL> +Run <I>pmie</I> rules using <I>pmieconf</I>, and see if the alarm messages appear on standard output:<BR> +<PRE><B>$ pmie -c myrules +</B></PRE> +Terminate <I>pmie</I> and use the reported values from <I>pmchart</I> +to determine what the average rate of system calls is. Then +re-run <I>pmieconf</I> to adjust the threshold level up or down to alter +the behaviour of <I>pmie</I>. +Re-run <I>pmie</I>. +<PRE><B> +$ pmieconf -f myrules +<I>pmieconf></I> modify cpu.context_switch threshold 5000 <I># <-- insert suitable value here</I> +<I>pmieconf></I> quit +$ pmie -c myrules +</B></PRE> +</TD></TR> +</TABLE> + +<P><BR></P> +<TABLE WIDTH=100% BORDER=0 CELLPADDING=0 CELLSPACING=0 BGCOLOR="#e2e2e2"> + <TR><TD WIDTH=100% BGCOLOR="#081c59"><P ALIGN=LEFT><FONT SIZE=5 COLOR="#ffffff"><B><A NAME="shping">Monitoring state with the <I>shping</I> PMDA</A></B></FONT></P></TD></TR> +</TABLE> +<H3>Installing <I>pmdashping</I> to record system state</H3> +<P>The default <I>shping</I> configuration is <I>$PCP_PMDAS_DIR/shping/sample.conf</I>. The comments explain the syntax.</P> +<P>Create a new configuration file, say <I>$PCP_PMDAS_DIR/shping/my.conf</I>, with shell tag and command of the form:</P> +<PRE><B> + no-pmie test ! -f /tmp/no-pmie +</B></PRE> +<TABLE WIDTH=100% BORDER=0 CELLPADDING=10 CELLSPACING=20> + <TR><TD BGCOLOR="#e2e2e2" WIDTH=70%><BR><IMG SRC="images/stepfwd_on.png" WIDTH=16 HEIGHT=16 BORDER=0> Install <I>pmdashping</I>: +<PRE><B># cd $PCP_PMDAS_DIR/shping +# ./Install +</B></PRE> +Mostly take the defaults, other than specifying your own +configuration file (<I>my.conf</I>) and setting the cycle +time to 5 (seconds); don't worry about the timeout period, as +timeouts are not going to happen in this configuration of the +agent. +</TABLE> + +<H3>Monitoring <I>pmdashping</I> to observe system state</H3> +<P>In one window, use <I>pmval</I> to monitor shping.status.</P> +<TABLE WIDTH=100% BORDER=0 CELLPADDING=10 CELLSPACING=20> + <TR><TD BGCOLOR="#e2e2e2" WIDTH=70%><BR><IMG SRC="images/stepfwd_on.png" WIDTH=16 HEIGHT=16 BORDER=0> In a command shell:<BR> +<PRE><B>$ pmval -t 5 shping.status</B></PRE> +</TD></TR> +</TABLE> +<P>In another window, first create the file <I>/tmp/no-pmie</I>, +wait ten seconds, and then remove the file. +Observe what <I>pmval</I> reports in the other window. +Terminate <I>pmval</I>. +</P> + +<P><BR></P> +<TABLE WIDTH=100% BORDER=0 CELLPADDING=0 CELLSPACING=0 BGCOLOR="#e2e2e2"> + <TR><TD WIDTH=100% BGCOLOR="#081c59"><P ALIGN=LEFT><FONT SIZE=5 COLOR="#ffffff"><B><A NAME="custom">Custom site rules with <I>pmieconf</I></A></B></FONT></P></TD></TR> +</TABLE> +<P>Using your editor of choice, edit the <I>pmieconf</I> output +file created earlier, i.e. <I>myrules</I>. +Append a new rule at the end (after the <b>END GENERATED SECTION</b> line), +that is a <I>copy</I> of the <b>cpu.context_switch</b> rule.</P> +<P>To this new rule, add the following conjunct before the action line (containing ->), modify the message in the new rule's action to be different to the standard rule, make sure the threshold is low enough for the predicate to be true, and then save the file.</P> +<PRE><B> && shping.status #'no-pmie' == 0</B></PRE> + +<TABLE WIDTH=100% BORDER=0 CELLPADDING=10 CELLSPACING=20> + <TR><TD BGCOLOR="#e2e2e2" WIDTH=70%><BR><IMG SRC="images/stepfwd_on.png" WIDTH=16 HEIGHT=16 BORDER=0> Re-run <I>pmieconf</I> to disable the standard rule:<BR> +<PRE><B>$ pmieconf -f myrules +<I>pmieconf></I> disable cpu.context_switch +<I>pmieconf></I> quit +</B></PRE> +Inspect the re-created file <I>myrules</I>. +Check your new rule is still there and the standard rule has been removed. +</TABLE> +<P>Run <I>pmie</I> using <I>myrules</I>, and verify that your new alarm messages appear on standard output. +In another window, create the file <I>/tmp/no-pmie</I>, wait a while, then remove the file.</P> +<P>Notice there may be some delay between the creation or removal of <I>/tmp/no-pmie</I> and the change in <I>pmie</I> behaviour. Can you explain this?</P> + +<P><BR></P> +<HR> +<CENTER> +<TABLE WIDTH=100% BORDER=0 CELLPADDING=0 CELLSPACING=0> + <TR> <TD WIDTH=50%><P>Copyright © 2007-2010 <A HREF="http://www.aconex.com/"><FONT COLOR="#000060">Aconex</FONT></A><BR>Copyright © 2000-2004 <A HREF="http://www.sgi.com/"><FONT COLOR="#000060">Silicon Graphics Inc</FONT></P></TD> + <TD WIDTH=50%><P ALIGN=RIGHT><A HREF="http://pcp.io/"><FONT COLOR="#000060">PCP Site</FONT></A><BR>Copyright © 2012-2014 <A HREF="http://www.redhat.com/"><FONT COLOR="#000060">Red Hat</FONT></P></TD> </TR> +</TABLE> +</CENTER> +</BODY> +</HTML> diff --git a/man/html/lab.pmlogconf.html b/man/html/lab.pmlogconf.html new file mode 100644 index 0000000..6c20ae6 --- /dev/null +++ b/man/html/lab.pmlogconf.html @@ -0,0 +1,43 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> +<HTML> +<HEAD> + <meta http-equiv="content-type" content="text/html; charset=utf-8"> + <meta http-equiv="content-style-type" content="text/css"> + <link href="pcpdoc.css" rel="stylesheet" type="text/css"> + <link href="images/pcp.ico" rel="icon" type="image/ico"> + <TITLE>Configuring Logging</TITLE> +</HEAD> +<BODY LANG="en-AU" TEXT="#000060" DIR="LTR"> +<TABLE WIDTH=100% BORDER=0 CELLPADDING=0 CELLSPACING=0 STYLE="page-break-before: always"> + <TR> <TD WIDTH=64 HEIGHT=64><FONT COLOR="#000080"><A HREF="http://pcp.io/"><IMG SRC="images/pcpicon.png" NAME="pmcharticon" ALIGN=TOP WIDTH=64 HEIGHT=64 BORDER=0></A></FONT></TD> + <TD WIDTH=1><P> </P></TD> + <TD WIDTH=500><P VALIGN=MIDDLE ALIGN=LEFT><A HREF="index.html"><FONT COLOR="#cc0000">Home</FONT></A> · <A HREF="lab.pmchart.html"><FONT COLOR="#cc0000">Charts</FONT></A> · <A HREF="timecontrol.html"><FONT COLOR="#cc0000">Time Control</FONT></A></P></TD> + </TR> +</TABLE> +<H1 ALIGN=CENTER STYLE="margin-top: 0.48cm; margin-bottom: 0.32cm"><FONT SIZE=7>Configuring Logging</FONT></H1> +<TABLE WIDTH=15% BORDER=0 CELLPADDING=5 CELLSPACING=10 ALIGN=RIGHT> + <TR><TD BGCOLOR="#e2e2e2"><IMG SRC="images/system-search.png" WIDTH=16 HEIGHT=16 BORDER=0> <I>Tools</I><BR><PRE> +pmlogconf +pmlogger +</PRE></TD></TR> +</TABLE> +<P>Introductory text. This is a placeholder. TODO... +</P> + +<P><BR></P> +<TABLE WIDTH=100% BORDER=0 CELLPADDING=0 CELLSPACING=0 BGCOLOR="#e2e2e2"> + <TR><TD WIDTH=100% BGCOLOR="#081c59"><P ALIGN=LEFT><FONT SIZE=5 COLOR="#ffffff"><B>Next Section</B></FONT></P></TD></TR> +</TABLE> +<P>Next paragraph. +</P> + +<P><BR></P> +<HR> +<CENTER> +<TABLE WIDTH=100% BORDER=0 CELLPADDING=0 CELLSPACING=0> + <TR> <TD WIDTH=50%><P>Copyright © 2007-2010 <A HREF="http://www.aconex.com/"><FONT COLOR="#000060">Aconex</FONT></A><BR>Copyright © 2000-2004 <A HREF="http://www.sgi.com/"><FONT COLOR="#000060">Silicon Graphics Inc</FONT></P></TD> + <TD WIDTH=50%><P ALIGN=RIGHT><A HREF="http://pcp.io/"><FONT COLOR="#000060">PCP Site</FONT></A><BR>Copyright © 2012-2014 <A HREF="http://www.redhat.com/"><FONT COLOR="#000060">Red Hat</FONT></P></TD> </TR> +</TABLE> +</CENTER> +</BODY> +</HTML> diff --git a/man/html/lab.pmlogger.html b/man/html/lab.pmlogger.html new file mode 100644 index 0000000..c400f5a --- /dev/null +++ b/man/html/lab.pmlogger.html @@ -0,0 +1,242 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<!-- + (c) Copyright 2010 Aconex. All rights reserved. + (c) Copyright 2000-2004 Silicon Graphics Inc. All rights reserved. + Permission is granted to copy, distribute, and/or modify this document + under the terms of the Creative Commons Attribution-Share Alike, Version + 3.0 or any later version published by the Creative Commons Corp. A copy + of the license is available at + http://creativecommons.org/licenses/by-sa/3.0/us/ . +--> +<HTML> +<HEAD> + <meta http-equiv="content-type" content="text/html; charset=utf-8"> + <meta http-equiv="content-style-type" content="text/css"> + <link href="pcpdoc.css" rel="stylesheet" type="text/css"> + <link href="images/pcp.ico" rel="icon" type="image/ico"> + <TITLE>Archive log management</TITLE> +</HEAD> +<BODY LANG="en-AU" TEXT="#000060" DIR="LTR"> +<TABLE WIDTH=100% BORDER=0 CELLPADDING=0 CELLSPACING=0 STYLE="page-break-before: always"> + <TR> <TD WIDTH=64 HEIGHT=64><FONT COLOR="#000080"><A HREF="http://pcp.io/"><IMG SRC="images/pcpicon.png" NAME="pmcharticon" ALIGN=TOP WIDTH=64 HEIGHT=64 BORDER=0></A></FONT></TD> + <TD WIDTH=1><P> </P></TD> + <TD WIDTH=500><P VALIGN=MIDDLE ALIGN=LEFT><A HREF="index.html"><FONT COLOR="#cc0000">Home</FONT></A> · <A HREF="lab.pmchart.html"><FONT COLOR="#cc0000">Charts</FONT></A> · <A HREF="timecontrol.html"><FONT COLOR="#cc0000">Time Control</FONT></A></P></TD> + </TR> +</TABLE> +<H1 ALIGN=CENTER STYLE="margin-top: 0.48cm; margin-bottom: 0.32cm"><FONT SIZE=7>Archive log management</FONT></H1> +<TABLE WIDTH=15% BORDER=0 CELLPADDING=5 CELLSPACING=10 ALIGN=RIGHT> + <TR><TD BGCOLOR="#e2e2e2"><IMG SRC="images/system-search.png" WIDTH=16 HEIGHT=16 BORDER=0> <I>Tools</I><BR><PRE> +pmlc +pmafm +pmlogger +pmdumplog +mpvis +mkaf +</PRE></TD></TR> +</TABLE> +<P>This chapter of the Performance Co-Pilot tutorial covers PCP tools for +creating and managing PCP archive logs.</P> +<P>For an explanation of Performance Co-Pilot terms and acronyms, consult +the <A HREF="glossary.html">PCP glossary</A>.</P> +<UL> + <LI> + <A HREF="#overview">Overview</A> + <LI> + <A HREF="#primary">Primary Logger</A> + <LI> + <A HREF="#other">Other Logger Instances</A> + <LI> + <A HREF="#create">Creating and Replaying PCP Archive Logs</A> + <LI> + <A HREF="#folios">PCP Archive Folios</A> + <LI> + <A HREF="#control">Controlling <I>pmlogger</I></A> + <LI> + <A HREF="#manage">Management of PCP Archives</A> +</UL> + +<P><BR></P> +<TABLE WIDTH=100% BORDER=0 CELLPADDING=0 CELLSPACING=0 BGCOLOR="#e2e2e2"> + <TR><TD WIDTH=100% BGCOLOR="#081c59"><P ALIGN=LEFT><FONT SIZE=5 COLOR="#ffffff"><B><A NAME="overview">Overview</I></A></B></FONT></P></TD></TR> +</TABLE> +<P>The Performance Co-Pilot includes many facilities for creating and +replaying archive logs that capture performance information.</P> +<P>For all PCP monitoring tools, metrics values may come from a real-time +feed (i.e. from <I>pmcd</I> on some host), or from an archive log.</P> +<P>Users have complete control of what metrics are collected, how often +and in which logs. These decisions can be changed dynamically.</P> + +<P><BR></P> +<TABLE WIDTH=100% BORDER=0 CELLPADDING=0 CELLSPACING=0 BGCOLOR="#e2e2e2"> + <TR><TD WIDTH=100% BGCOLOR="#081c59"><P ALIGN=LEFT><FONT SIZE=5 COLOR="#ffffff"><B><A NAME="primary">Primary Logger</A></B></FONT></P></TD></TR> +</TABLE> +<P>The primary instance of the PCP archive logger (<I>pmlogger</I>) may be +started on a collector system each time <I>pmcd</I> is started.</P> +<P>This action is controlled by the chkconfig option `pmlogger'. +To turn it on, as <B>root</B> do the following:</P> +<P> +<TT># chkconfig pmlogger on</TT></BR> +<TT># /etc/init.d/pcp start</TT></P> +<P>The specification for hosts to log, and <I>pmlogger</I> options is +given in the $PCP_CONFIG_DIR/pmlogger/control</A> file.</P> +<P>This has a default entry for the local host, which specifies the metrics +to be logged, and the frequency of logging - by default, using the file +$PCP_CONFIG_DIR/pmlogger/config.default</A>.</P> + +<P><BR></P> +<TABLE WIDTH=100% BORDER=0 CELLPADDING=0 CELLSPACING=0 BGCOLOR="#e2e2e2"> + <TR><TD WIDTH=100% BGCOLOR="#081c59"><P ALIGN=LEFT><FONT SIZE=5 COLOR="#ffffff"><B><A NAME="other">Other Logger Instances</A></B></FONT></P></TD></TR> +</TABLE> +<P>Additional instances of <I>pmlogger</I> may be started at any time, +running on either a collector system or a monitor system.</P> +<P>In all cases, each <I>pmlogger</I> instance will create an archive log +for metrics from a single collector system.</P> +<P>The initial specification of what to log is given in a configuration file; +the syntax is fully described in the <I>pmlogger</I>(1) man page.</P> + +<P><BR></P> +<TABLE WIDTH=100% BORDER=0 CELLPADDING=0 CELLSPACING=0 BGCOLOR="#e2e2e2"> + <TR><TD WIDTH=100% BGCOLOR="#081c59"><P ALIGN=LEFT><FONT SIZE=5 COLOR="#ffffff"><B><A NAME="create">Creating and Replaying PCP Archive Logs</A></B></FONT></P></TD></TR> +</TABLE> +<P>Some configuration files are supplied, e.g. to create archive logs +suitable for the PCP visualization tools. +These may be found in the directory $PCP_CONFIG_DIR/pmlogger.</P> +<P>A simple example has been provided to illustrate the creation of an +archive log, and subsequent playback using <I>mpvis</I>. +(All of the PCP monitoring tools accept the command line arguments +<B>-a </B><TT>archivename</TT> to replay from an archive).</P> + +<TABLE WIDTH=100% BORDER=0 CELLPADDING=10 CELLSPACING=20> + <TR><TD BGCOLOR="#e2e2e2" WIDTH=70%><BR><IMG SRC="images/stepfwd_on.png" WIDTH=16 HEIGHT=16 BORDER=0> In a command shell enter:<BR> +<PRE><B> +$ source /etc/pcp.conf +$ cd /tmp +$ rm -f myarchive.* +$ $PCP_BINADM_DIR/pmlogger -T 30sec -t 1sec \ + -c $PCP_CONFIG_DIR/pmlogger/config.mpvis myarchive +$ ls myarchive.* +$ mpvis -a myarchive +</B></PRE> +</TD></TR> +</TABLE> + +<UL> + <LI> + This starts <I>pmlogger</I> with <B><I>localhost</I></B> as the default + host from which metrics will be fetched, a logging duration of + <B>30 seconds</B>, a logging interval of <B>1 second</B>, a configuration + from the $PCP_CONFIG_DIR/pmlogger/config.mpvis</A> file, and + <I>myarchive</I> as the base name of the output archive. + <LI> + Once the archive has been created, the directory listing of + <I>myarchive.*</I> shows that the archive log created by <I>pmlogger</I> + is composed of 3 files. + <LI> + When <I>mpvis</I> starts up, click the left mouse button on the + <B><I>Play</I></B> button in the <B>PCP Archive Time Control</B> + dialog. <I>mpvis</I> will start replaying values from the archive + at the same speed at which they were recorded. + <LI> + Double click the left mouse button on the <B><I>Play</I></B> button + in the <B>PCP Archive Time Control</B> dialog. <I>mpvis</I> should + now replay the values in a <I>Fast Forward</I> mode until it reaches + the end of the archive. + <LI> + Select the <B>Options->Show Bounds</B> option from the <B>PCP Archive + Time Control</B> dialog menu bar. The exposed <B>Archive Time Bounds</B> + dialog displays the bounds of the archive. Another way to look at + the bounds of the archive is by using <I>pmdumplog</I>: +<PRE> + $ pmdumplog -L myarchive +</PRE> + For more information on <I>pmdumplog</I> refer to the <I>pmdumplog</I>(1) + man page. +</UL> +</P> + +<P><BR></P> +<TABLE WIDTH=100% BORDER=0 CELLPADDING=0 CELLSPACING=0 BGCOLOR="#e2e2e2"> + <TR><TD WIDTH=100% BGCOLOR="#081c59"><P ALIGN=LEFT><FONT SIZE=5 COLOR="#ffffff"><B><A NAME="folios">Archive Folios</A></B></FONT></P></TD></TR> +</TABLE> +<P>An archive folio is a named collection of PCP archives. +These are typically used to provide a convenient way of processing multiple, +correlated PCP archives.</P> +<P>Archive folios are created with <I>mkaf</I>.</P> +<P>The contents of an archive folio can be processed using the <I>pmafm</I> +utility.</P> +<P>A simple example has been provided to illustrate the creation and +subsequent processing of a folio.</P> + +<TABLE WIDTH=100% BORDER=0 CELLPADDING=10 CELLSPACING=20> + <TR><TD BGCOLOR="#e2e2e2" WIDTH=70%><BR><IMG SRC="images/stepfwd_on.png" WIDTH=16 HEIGHT=16 BORDER=0> In a command shell enter:<BR> +<PRE><B> +$ source /etc/pcp.conf +$ cd /tmp +$ tar xzf $PCP_DEMOS_DIR/tutorials/pmie.tar.gz +$ tar xzf $PCP_DEMOS_DIR/tutorials/cpuperf.tar.gz +$ $PCP_BINADM_DIR/mkaf pmie/babylon.perdisk.0 \ + cpuperf/babylon.percpu.0 > myfolio +$ pmafm myfolio list +$ pmafm myfolio pmdumplog -l +</B></PRE> +</TD></TR> +</TABLE> +<UL> + <LI> + The <I>mkaf</I> creates a folio called <B><I>myfolio</I></B> which + includes the archives <I>babylon.percpu</I> and <I>babylon.perdisk</I>. + Note that the archives are not changed in any way, and a new archive + is not created. + <LI> + The <I>pmafm</I> tool may now be used to perform different operations + on the folio <B><I>myfolio</I></B>, such as listing the folio contents, + or using other tools to open the archive logs contained in the folio. + If <I>pmafm</I> is given a folio name but no arguments, it will run + in interactive mode. +</UL> +</P> +<P>For more information on folios refer to the <I>mkaf</I>(1) and +<I>pmafm</I>(1) man pages.</P> + +<P><BR></P> +<TABLE WIDTH=100% BORDER=0 CELLPADDING=0 CELLSPACING=0 BGCOLOR="#e2e2e2"> + <TR><TD WIDTH=100% BGCOLOR="#081c59"><P ALIGN=LEFT><FONT SIZE=5 COLOR="#ffffff"><B><A NAME="control">Controlling <I>pmlogger</I></A></B></FONT></P></TD></TR> +</TABLE> +<P>The <I>pmlc</I> utility may be used to interrogate any <I>pmlogger</I> +instance running either locally or remotely. Use <I>pmlc</I> to</P> +<UL> + <LI> + add or delete metrics or metric instances to be logged + <LI> + change the logging frequency for selected metrics +</UL> +<P>The line-oriented command interface to <I>pmlc</I>(1) is fully described +in the man page.</P> + +<P><BR></P> +<TABLE WIDTH=100% BORDER=0 CELLPADDING=0 CELLSPACING=0 BGCOLOR="#e2e2e2"> + <TR><TD WIDTH=100% BGCOLOR="#081c59"><P ALIGN=LEFT><FONT SIZE=5 COLOR="#ffffff"><B><A NAME="manage">Management of PCP Archives</A></B></FONT></P></TD></TR> +</TABLE> +<P>PCP includes a suite of scripts and tools to automate the collection +and management of archives.</P> +<P>Briefly, these facilities include:</P> +<UL> + <LI>daily log rotation (<I>pmlogger_daily</I>(1)) + <LI>archive log merging (<I>pmlogextract</I>(1)) + <LI>automatic restarting of failed <I>pmlogger</I> instances + (<I>pmlogger_check</I>(1)) + <LI>creation of snapshots from archives (<I>pmsnap</I>(1)) + <LI>maintenance of archive folios for active archives + (<I>mkaf</I>(1) and <I>pmafm</I>(1)) +</UL> + +<P><BR></P> +<HR> +<CENTER> +<TABLE WIDTH=100% BORDER=0 CELLPADDING=0 CELLSPACING=0> + <TR> <TD WIDTH=50%><P>Copyright © 2007-2010 <A HREF="http://www.aconex.com/"><FONT COLOR="#000060">Aconex</FONT></A><BR>Copyright © 2000-2004 <A HREF="http://www.sgi.com/"><FONT COLOR="#000060">Silicon Graphics Inc</FONT></P></TD> + <TD WIDTH=50%><P ALIGN=RIGHT><A HREF="http://pcp.io/"><FONT COLOR="#000060">PCP Site</FONT></A><BR>Copyright © 2012-2014 <A HREF="http://www.redhat.com/"><FONT COLOR="#000060">Red Hat</FONT></P></TD> </TR> +</TABLE> +</CENTER> +</BODY> +</HTML> diff --git a/man/html/lab.pmview.html b/man/html/lab.pmview.html new file mode 100644 index 0000000..964cbfb --- /dev/null +++ b/man/html/lab.pmview.html @@ -0,0 +1,211 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> +<!-- + (c) Copyright 2010 Aconex. All rights reserved. + (c) Copyright 2000-2004 Silicon Graphics Inc. All rights reserved. + Permission is granted to copy, distribute, and/or modify this document + under the terms of the Creative Commons Attribution-Share Alike, Version + 3.0 or any later version published by the Creative Commons Corp. A copy + of the license is available at + http://creativecommons.org/licenses/by-sa/3.0/us/ . +--> +<HTML> +<HEAD> + <meta http-equiv="content-type" content="text/html; charset=utf-8"> + <meta http-equiv="content-style-type" content="text/css"> + <link href="pcpdoc.css" rel="stylesheet" type="text/css"> + <link href="images/pcp.ico" rel="icon" type="image/ico"> + <TITLE>Performance Visualisation with pmview</TITLE> +</HEAD> +<BODY LANG="en-AU" TEXT="#000060" DIR="LTR"> +<TABLE WIDTH=100% BORDER=0 CELLPADDING=0 CELLSPACING=0 STYLE="page-break-before: always"> + <TR> <TD WIDTH=64 HEIGHT=64><FONT COLOR="#000080"><A HREF="http://pcp.io/"><IMG SRC="images/pcpicon.png" NAME="pmcharticon" ALIGN=TOP WIDTH=64 HEIGHT=64 BORDER=0></A></FONT></TD> + <TD WIDTH=1><P> </P></TD> + <TD WIDTH=500><P VALIGN=MIDDLE ALIGN=LEFT><A HREF="index.html"><FONT COLOR="#cc0000">Home</FONT></A> · <A HREF="lab.pmchart.html"><FONT COLOR="#cc0000">Charts</FONT></A> · <A HREF="timecontrol.html"><FONT COLOR="#cc0000">Time Control</FONT></A></P></TD> + </TR> +</TABLE> +<H1 ALIGN=CENTER STYLE="margin-top: 0.48cm; margin-bottom: 0.32cm"><FONT SIZE=7>Performance Visualisation with <I>pmview</I></FONT></H1> +<TABLE WIDTH=15% BORDER=0 CELLPADDING=5 CELLSPACING=10 ALIGN=RIGHT> + <TR><TD BGCOLOR="#e2e2e2"><IMG SRC="images/system-search.png" WIDTH=16 HEIGHT=16 BORDER=0> <I>Tools</I><BR><PRE> +pmview +mpvis +osvis +dkvis +pmafm +pmtime +pmchart +</PRE></TD></TR> +</TABLE> +<P><B>Note:</B> The open source version of <I>pmview</I> is currently under development, and is <B>not</B> yet shipped as part of PCP GUI, but is available for experimental use in the development source tree.</P> +<P>Visual tools take advantage of common cognitive skills, especially for visual pattern matching and scene change discrimination. +The motivation for visualization of performance data is very similar to that used for engineering visualization, visual simulation, and database mining through visualization - visually rich representations of complex data sets are powerful aids to understanding and detection of unexpected relationships.</P> + +<UL> + <LI> + <A HREF="#realtime">Live monitoring and user interface concepts</A> + <LI> + <A HREF="#archive">Retrospective monitoring and tool drill-down</A> + <LI> + <A HREF="#vis">The "vis" tools</A> + <LI> + <A HREF="#simple">Simple scene construction</A> +</UL> +<TABLE WIDTH=50% BORDER=0 CELLPADDING=10 CELLSPACING=20> + <TR><TD BGCOLOR="#e2e2e2" WIDTH=70%><BR><IMG SRC="images/stepfwd_on.png" WIDTH=16 HEIGHT=16 BORDER=0> Extract the PCP archives and configuration files we will use in this tutorial into the current working directory: +<PRE><B> +$ . /etc/pcp.env +$ tar xzf $PCP_DEMOS_DIR/tutorials/pmview.tar.gz +</B></PRE> +</TD></TR> +</TABLE> +<P>For an explanation of Performance Co-Pilot terms and acronyms, consult +the <A HREF="glossary.html">PCP glossary</A>.</P> + +<P><BR></P> +<TABLE WIDTH=100% BORDER=0 CELLPADDING=0 CELLSPACING=0 BGCOLOR="#e2e2e2"> + <TR><TD WIDTH=100% BGCOLOR="#081c59"><P ALIGN=LEFT><FONT SIZE=5 COLOR="#ffffff"><B><A NAME="realtime">Live monitoring and user interface concepts</A></B></FONT></P></TD></TR> +</TABLE> +<TABLE WIDTH=100% BORDER=0 CELLPADDING=0 CELLSPACING=0> + <TR> <TD WIDTH=568><P VALIGN=MIDDLE ALIGN=RIGHT><CENTER><BR><IMG ALIGN=RIGHT SRC="images/mpvis.png" BORDER=0></CENTER></P></TD> + <TD WIDTH=10></TD> + <TD><TABLE WIDTH=100% BORDER=0 CELLPADDING=10 CELLSPACING=20> + <TR><TD BGCOLOR="#e2e2e2" WIDTH=70%><BR><IMG SRC="images/stepfwd_on.png" WIDTH=16 HEIGHT=16 BORDER=0> The <I>mpvis</I> command monitors the CPU utilization for each CPU:<BR> +<PRE><B> +$ mpvis +</B></PRE> +<UL> + <LI> Move the cursor over each block in the scene. Take time to read the + (changed) text box above the 3D scene and understand what it is telling + you. In particular, identify the source of the metric, the name of the + metric, the instance of the metric, the current value ... can you + explain what "millisec / second" really means? + <LI> Click the left mouse over one block in the scene. How is this + different? + <LI> Click on the "Live" button or Ctrl-T or <B><I>Options -> + Show Time Control</I></B> from the menu bar. In the <B>PCP Live Time + Control</B> dialog, experiment with changing the update <B><I>Interval</I></B> + (this is the interval at which new metric values are fetched from <I>pmcd</I>). + <LI> Quit with <B><I>File -> Quit</I></B> or Ctrl-Q. +</UL> + </TD></TR> + </TABLE></TD> +</TABLE> + +<P><BR></P> +<TABLE WIDTH=100% BORDER=0 CELLPADDING=0 CELLSPACING=0 BGCOLOR="#e2e2e2"> + <TR><TD WIDTH=100% BGCOLOR="#081c59"><P ALIGN=LEFT><FONT SIZE=5 COLOR="#ffffff"><B><A NAME="archive">Retrospective monitoring and tool drill-down</A></B></FONT></P></TD></TR> +</TABLE> + +<TABLE WIDTH=100% BORDER=0 CELLPADDING=0 CELLSPACING=0> + <TR><TD><TABLE WIDTH=100% BORDER=0 CELLPADDING=10 CELLSPACING=20> + <TD BGCOLOR="#e2e2e2" WIDTH=70%><BR><IMG SRC="images/stepfwd_on.png" WIDTH=16 HEIGHT=16 BORDER=0> The <I>dkvis</I> command monitors the per-disk I/O activity:<BR> +<PRE><B> +$ dkvis -a pmie/babylon.perdisk +</B></PRE> +<UL> + <LI> In the <I>dkvis</I> window (above the top left-hand corner of the + scene) change the <B><I>Scale</I></B> to be 5 using either the + thumbwheel or the text box to the right of the thumbwheel. + <LI> In the associated <B>PCP Archive Time Control</B> dialog, changing + the update <B><I>Interval</I></B> to 2 minutes (remember to Enter + after you have changed the <B><I>Interval</I></B> text box). + <LI> Double click the <B><I>Play</I></B> button. When the replay + finished, drag the slider in the <B>PCP Archive Time Control</B> + dialog back to near the middle of the range and release the + slider. + <LI> Back in the <I>dkvis</I> window, move the cursor over each block in + the scene. Take time to read the (changed) text box above the 3D scene + and understand what it's telling you. In particular, identify the + source of the metric, the name of the metric, the instance of the + metric, the current value ... can you explain what "count / + second" really means? + <LI> Select all of the blocks for controller <B>dks1</B> (use + "Shift-select" to do multiple selections), and then <B><I>Launch -> pmchart</I></B> + from the main menu. In the pmchart window use <B><I>File -> Open View</I></B> + from the menu bar to add the <B>LoadAvg</B> view. + This is a "drill-down" example. + <LI> Use the <B>PCP Archive Time Control</B> dialog again - this time + notice that you're controlling movement through both <I>dkvis</I> + and <I>pmchart</I> using the same time control window (that's + because <I>pmchart</I> was launched from <I>dkvis</I>). + <LI> Quit from <I>dkvis</I>. Notice that <I>pmchart</I> and the <I>pmtime</I> + dialog remain. Quit from <I>pmchart</I>. +</UL> + </TD></TABLE> + </TD> + <TD WIDTH=10></TD> + <TD WIDTH=486><P VALIGN=MIDDLE ALIGN=RIGHT><CENTER><BR><IMG ALIGN=RIGHT SRC="images/dkvis.png" BORDER=0></CENTER></P></TD> + </TR> +</TABLE> + +<P><BR></P> +<TABLE WIDTH=100% BORDER=0 CELLPADDING=0 CELLSPACING=0 BGCOLOR="#e2e2e2"> + <TR><TD WIDTH=100% BGCOLOR="#081c59"><P ALIGN=LEFT><FONT SIZE=5 COLOR="#ffffff"><B><A NAME="vis">The "vis" tools</A></B></FONT></P></TD></TR> +</TABLE> +<P> Try some of the other "vis" tools. All of these are + "front-ends" to <I>pmview</I> as shown in this diagram:</P> +<CENTER> +<IMG SRC="images/pmview.flow.png" ALIGN="MIDDLE" WIDTH="444" HEIGHT="227"> +</CENTER> + +<TABLE WIDTH=100% BORDER=0 CELLPADDING=10 CELLSPACING=20> + <TR><TD BGCOLOR="#e2e2e2" WIDTH=70%><BR><IMG SRC="images/stepfwd_on.png" WIDTH=16 HEIGHT=16 BORDER=0> In a command shell enter:<BR> +<PRE><B> +$ osvis +</B></PRE> +Move the cursor over each baseplane for more information. Now enter: +<PRE><B> +$ pmafm pmie/godzillaweb.folio replay +</B></PRE> +<I>pmafm</I> is a folio manager which allows you to work with a folio of archives for +many visualisation tools; in this case, with the folio <TT>godzillaweb</TT>. +</TD></TR> +</TABLE> + +<P><BR></P> +<TABLE WIDTH=100% BORDER=0 CELLPADDING=0 CELLSPACING=0 BGCOLOR="#e2e2e2"> + <TR><TD WIDTH=100% BGCOLOR="#081c59"><P ALIGN=LEFT><FONT SIZE=5 COLOR="#ffffff"><B><A NAME="simple">Simple scene construction</A></B></FONT></P></TD></TR> +</TABLE> +<P>The text file <A HREF="pmview/example.view">pmview/example.view</A> +specifies a <I>pmview</I> configuration having one baseplane with +one bar containing three metrics (5, 10, and 15 minute load averages), +and separate bars for each of the disk read and write metrics. +<TABLE WIDTH=100% BORDER=0 CELLPADDING=10 CELLSPACING=20> + <TR><TD BGCOLOR="#e2e2e2" WIDTH=70%><BR><IMG SRC="images/stepfwd_on.png" WIDTH=16 HEIGHT=16 BORDER=0> To display this scene, run:<BR> +<PRE><B> +$ pmview < pmie/example.view +</B></PRE> +An a learning exercise, copy <I>example.view</I> and modify the configuration so +that instead of having the disk metrics as two separate blocks (bars), they +appear as a single stacked bar showing both metrics, one on top of the other. +</TD></TR> +</TABLE> +<H4>Hints</H4> +<UL> + <LI> + The <I>osvis</I> tool we saw earlier uses stacked bars for memory + and CPU utilization. + <LI> + The configuration generated by <B>any</B> <I>pmview </I>front-end + script can be viewed using a <B>-V</B> option to the front-end + tool, and a <B>-C</B> option means quit after generating the + configuration (do not launch <I>pmview</I>). So the following may + be helpful: + <PRE> + <I> </I><B>$</B><I> </I>osvis -V -C<I> </I> + +</PRE> + <LI> + The <I>pmview(1)</I> man page describes the <I>pmview </I>configuration + format in detail. Look for the <B><TT>_stack</TT></B> object. +</UL> + +<P><BR></P> +<HR> +<CENTER> +<TABLE WIDTH=100% BORDER=0 CELLPADDING=0 CELLSPACING=0> + <TR> <TD WIDTH=50%><P>Copyright © 2007-2010 <A HREF="http://www.aconex.com/"><FONT COLOR="#000060">Aconex</FONT></A><BR>Copyright © 2000-2004 <A HREF="http://www.sgi.com/"><FONT COLOR="#000060">Silicon Graphics Inc</FONT></P></TD> + <TD WIDTH=50%><P ALIGN=RIGHT><A HREF="http://pcp.io/"><FONT COLOR="#000060">PCP Site</FONT></A><BR>Copyright © 2012-2014 <A HREF="http://www.redhat.com/"><FONT COLOR="#000060">Red Hat</FONT></P></TD> </TR> +</TABLE> +</CENTER> +</BODY> +</HTML> diff --git a/man/html/lab.secure.html b/man/html/lab.secure.html new file mode 100644 index 0000000..601641b --- /dev/null +++ b/man/html/lab.secure.html @@ -0,0 +1,320 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<!-- + (c) Copyright 2013-2014 Red Hat. + Permission is granted to copy, distribute, and/or modify this document + under the terms of the Creative Commons Attribution-Share Alike, Version + 3.0 or any later version published by the Creative Commons Corp. A copy + of the license is available at + http://creativecommons.org/licenses/by-sa/3.0/us/ . +--> +<HTML> +<HEAD> + <meta http-equiv="content-type" content="text/html; charset=utf-8"> + <meta http-equiv="content-style-type" content="text/css"> + <link href="pcpdoc.css" rel="stylesheet" type="text/css"> + <link href="images/pcp.ico" rel="icon" type="image/ico"> + <TITLE>Secure Connections</TITLE> +</HEAD> +<BODY LANG="en-AU" TEXT="#000060" DIR="LTR"> +<TABLE WIDTH=100% BORDER=0 CELLPADDING=0 CELLSPACING=0 STYLE="page-break-before: always"> + <TR> <TD WIDTH=64 HEIGHT=64><FONT COLOR="#000080"><A HREF="http://pcp.io/"><IMG SRC="images/pcpicon.png" NAME="pmcharticon" ALIGN=TOP WIDTH=64 HEIGHT=64 BORDER=0></A></FONT></TD> + <TD WIDTH=1><P> </P></TD> + <TD WIDTH=500><P VALIGN=MIDDLE ALIGN=LEFT><A HREF="index.html"><FONT COLOR="#cc0000">Home</FONT></A> · <A HREF="lab.pmchart.html"><FONT COLOR="#cc0000">Charts</FONT></A> · <A HREF="timecontrol.html"><FONT COLOR="#cc0000">Time Control</FONT></A></P></TD> + </TR> +</TABLE> +<H1 ALIGN=CENTER STYLE="margin-top: 0.48cm; margin-bottom: 0.32cm"><FONT SIZE=7>Secure Connections</FONT></H1> +<TABLE WIDTH=15% BORDER=0 CELLPADDING=5 CELLSPACING=10 ALIGN=RIGHT> + <TR><TD BGCOLOR="#e2e2e2"><IMG SRC="images/system-search.png" WIDTH=16 HEIGHT=16 BORDER=0> <I>Tools</I><BR><PRE> +certutil +pmcd +pminfo +pmchart +pmproxy +</PRE></TD></TR> +</TABLE> +<P>This chapter of the Performance Co-Pilot tutorial covers setting up secure +connections between PCP collector and monitor components. +PCP network connections can be made secure against eavesdropping, data tampering +and man-in-the-middle class attacks.</P> +<P>For an explanation of Performance Co-Pilot terms and acronyms, consult +the <A HREF="glossary.html">PCP glossary</A>.</P> +<UL> + <LI> + <A HREF="#overview">Overview</A> + <LI> + <A HREF="#recipe">Enabling TLS/SSL: Steps Involved</A> + <LI> + <A HREF="#collector">Collector Setup</A> + <LI> + <A HREF="#monitor">Monitor Setup</A> +</UL> + +<P><BR></P> +<TABLE WIDTH=100% BORDER=0 CELLPADDING=0 CELLSPACING=0 BGCOLOR="#e2e2e2"> + <TR><TD WIDTH=100% BGCOLOR="#081c59"><P ALIGN=LEFT><FONT SIZE=5 COLOR="#ffffff"><B><A NAME="overview">Overview</I></A></B></FONT></P></TD></TR> +</TABLE> +<P>The Performance Co-Pilot includes facilities for establishing secure +connections between remote collector and monitoring components.</P> +<P>All connections made to the PCP metrics collector daemon (<I>pmcd</I>) +are made using the PCP protocol, which is TCP/IP based. Traditionally, no +functionality was available to secure connections between PCP collectors and +monitors. However, as PCP evolved to be able to export sensitive information +(event trace parameters and detailed per-process statistics, for example), +it became necessary to provide safeguards against malicious behaviour.</P> +<P>The cryptographic services used to augment the PCP protocol are provided +by Network Security Services (NSS), a library implementing Transport Layer +Security (TLS) and the Secure Sockets Layer (SSL) standards, and base +cryptographic functions. NSS includes a software-based cryptographic token +which is FIPS 140-2 certified.</P> +<P>Both the <I>pmcd</I> and <I>pmproxy</I> daemons are capable of simultaneous +TLS/SSL and non-SSL communications. This means that you do not have to choose +between TLS/SSL or non-SSL communications for your PCP Collector systems; both +can be used at the same time.</P> + +<P><BR></P> +<TABLE WIDTH=100% BORDER=0 CELLPADDING=0 CELLSPACING=0 BGCOLOR="#e2e2e2"> + <TR><TD WIDTH=100% BGCOLOR="#081c59"><P ALIGN=LEFT><FONT SIZE=5 COLOR="#ffffff"><B><A NAME="recipe">Enabling TLS/SSL: Steps Involved</A></B></FONT></P></TD></TR> +</TABLE> +<P>Before the PCP Collector system can be requested to communicate with TLS/SSL, +certificates must be properly configured on the Collector Server host.</P> +<P>This typically involves:</P> +<OL> +<LI>Obtain and install certificates for your PCP Collector systems, and +configure each system to trust the certification authority's (CA's) certificate. +Alternatively, the less secure option of generating a self-signed certificate may +be appropriate for installations where using trusted certificates is impractical. +This tutorial uses the latter approach. +<LI>Enable secure connections in the <I>pmcd</I> and <I>pmproxy</I> daemons by +configuring the system certificate database with the PCP Collector certificate. +<LI>Ensure that each user monitoring a PCP Collector system obtains and installs a +personal certificate for the tools that will communicate with that collector.<BR> +This can be done by manually updating a monitor-side certificate database, or +automatically by reviewing and accepting the certificate delivered to the monitor +tools during the first attempt to access the PCP Collector system. +</OL> +<P>The process of obtaining trusted certificates is beyond the scope of this +document, and will differ depending on whether the certificate authority is +internal or external to your organisation. +Refer to the chapter titled <I>"Requesting and Receiving Certificates"</I> in the +<A HREF="https://access.redhat.com/knowledge/docs/Red_Hat_Certificate_System/"> +Certificate System Admin Guide</A> +for details on managing trusted certificates from a certificate authority.</P> +<P>However, at a high-level: a certificate request (CR) must be generated, +then sent to the certificate authority (CA) you will be using. +The CA will generate a new trusted certificate and send it to you. +Once this certificate has been received install it in the system-wide +certificate database as described below.</P> + +<P><BR></P> +<TABLE WIDTH=100% BORDER=0 CELLPADDING=0 CELLSPACING=0 BGCOLOR="#e2e2e2"> + <TR><TD WIDTH=100% BGCOLOR="#081c59"><P ALIGN=LEFT><FONT SIZE=5 COLOR="#ffffff"><B><A NAME="collector">Collector Setup</A></B></FONT></P></TD></TR> +</TABLE> +<P>All PCP Collector systems must have a valid certificate in order to +participate in secure PCP protocol exchanges. +Certificates are stored in a certificate database, and can be created using +<I>certutil</I> (an NSS tool).</P> +<P>In some (non-default) configurations the system certificate database +may be protected by a password. +Should you choose to select this (non-default) option, by placing the +certificate database password in a file the server can still be started +as a regular service (i.e. automatically at bootup or otherwise running +unattended). +<I> This password is stored in clear text within the password file, +so its usage represents a significant security risk.</I> +Because this password is stored in plaintext, the password file should +be owned by the user account under which the PCP Collector system runs. +By default this is the <I>"pcp"</I> user. +It must be set as read-only for this user and allow no access to others +(mode 0400).</P> + +<TABLE WIDTH=100% BORDER=0 CELLPADDING=10 CELLSPACING=20> + <TR><TD BGCOLOR="#e2e2e2" WIDTH=70%><BR><IMG SRC="images/stepfwd_on.png" WIDTH=16 HEIGHT=16 BORDER=0> Create a system-wide NSS database in a privileged (root) shell, <B><I>only if it does not exist already</I></B>:<BR> +<PRE><B> +# ls /etc/pki/nssdb +ls: cannot access /etc/pki/nssdb: No such file or directory +# mkdir -p -m 0755 /etc/pki/nssdb +# echo > /tmp/empty +# certutil -d sql:/etc/pki/nssdb -N -f /tmp/empty +# chmod 644 /etc/pki/nssdb/* +</B></PRE> +</TD></TR> +</TABLE> + +<P><I>certutil</I> is part of many modern software distributions, and can also be +downloaded from the Mozilla +<A HREF="ftp://ftp.mozilla.org/pub/mozilla.org/security/nss/releases/">NSS</A> +project. +</P> +<P>At this stage we have a valid (possibly empty) NSS database for our collector +certificate. A list of all installed certificates can be obtained using the <B>-L</B> +option to <I>certutil</I>, as follows. + +<TABLE WIDTH=100% BORDER=0 CELLPADDING=10 CELLSPACING=20> + <TR><TD BGCOLOR="#e2e2e2" WIDTH=70%><BR><IMG SRC="images/stepfwd_on.png" WIDTH=16 HEIGHT=16 BORDER=0> List certificates in system-wide NSS database:<BR> +<PRE><B> +$ certutil -d sql:/etc/pki/nssdb -L + +Certificate Nickname Trust Attributes + SSL,S/MIME,JAR/XPI +</B><I> +[...certificates list, possibly none at this stage...]</I> +</PRE> +</TD></TR> +</TABLE> + +<P>Certificates should now be requested from your local trusted certificate authority (CA). +Alternatively, it is possible to generate a "self-signed" certificate as follows, +using the <B>-x</B> option to <I>certutil</I>. + +<TABLE WIDTH=100% BORDER=0 CELLPADDING=10 CELLSPACING=20> + <TR><TD BGCOLOR="#e2e2e2" WIDTH=70%><BR><IMG SRC="images/stepfwd_on.png" WIDTH=16 HEIGHT=16 BORDER=0> After customising the certificate subject names (<B>-s</B> and <B>-8</B> options below), in a privileged shell enter:<BR> +<PRE><B> +# certutil -d sql:/etc/pki/nssdb -S -x \ + -n "<FONT COLOR=#000000">Local CA certificate</FONT>" -s "cn=<FONT COLOR="#000000">Local PCP Installation</FONT>, dc=<FONT COLOR="#cc0000">YOUR</FONT>,dc=<FONT COLOR="#cc0000">DOMAIN</FONT>,dc=<FONT COLOR="#cc0000">NAME</FONT>" \ + -t "CT,," -v 120 + +# certutil -d sql:/etc/pki/nssdb -S \ + -c "<FONT COLOR=#000000">Local CA certificate</FONT>" \ + -n "PCP Collector certificate" -s "cn=PCP Collector" -8 "<FONT COLOR="#cc0000">YOUR.HOST.NAME,ALT.DNS.NAME,...</FONT>" \ + -t "P,," -v 120 +</B></PRE> +</TD></TR> +</TABLE> +</P> +<P>Note: You <B>must</B> customise the red parameters above in upper-case. +If you are not using self-signed certificates, you will also need to +customise the black parameters above to match certificate details provided +by your CA. Finally, you may also wish to change the <B>-v</B> setting, +which sets the certificate expiry timeframe. <I>certutil</I> defaults +to 3 months, the example above sets expiry in 10 years (120 months). +</P> +<P>At this stage, attempts to restart the PCP Collector infrastructure will +begin to take notice of the new contents of the certificate database. +If we earlier chose to create the system-wide database in the non-default +configuration of having a password, we must now configure <I>pmcd</I> +and <I>pmproxy</I> to make use of it. +This configuration must be performed in the <I>$PCP_PMCDOPTIONS_PATH</I> and +<I>$PCP_PMPROXYOPTIONS_PATH</I> files, as recorded in <I>/etc/pcp.conf</I>, +using the <B>-P <path></B> option to these daemons. +Detailed diagnostics are available in the daemon log files, +located below <I>$PCP_LOG_DIR</I>. +</P> + +<P><BR></P> +<TABLE WIDTH=100% BORDER=0 CELLPADDING=0 CELLSPACING=0 BGCOLOR="#e2e2e2"> + <TR><TD WIDTH=100% BGCOLOR="#081c59"><P ALIGN=LEFT><FONT SIZE=5 COLOR="#ffffff"><B><A NAME="monitor">Monitor Setup</A></B></FONT></P></TD></TR> +</TABLE> +<P>PCP Monitoring (client) tools require a trusted certificate to validate +the server in a TLS/SSL connection. +This certificate can be installed beforehand or can be delivered via the +TLS/SSL connection exchange. +In the latter situation, the user is prompted as to whether the +certificate is to be trusted (see example below).</P> +<P>Once certificates are in place, we are ready to attempt to establish secure +connections between remote PCP Monitor and Collector hosts. +This can be achieved by specifically requesting a secure connection for individual +host connections, in tools that support this explictly (e.g. <I>pmchart</I> below). +Alternatively, an environment variable can be set to request that all client +connections within that shell environment be made securely. +This environment variable can have the value <I><B>enforce</B></I> meaning "all +connections must be secure, fail if this cannot be achieved", +or <I><B>relaxed</B></I> meaning "establish secure connections only for remote +collector systems that are configured, fallback to insecure connections if not". +</P> + +<P>Using the approach of certificate delivery via the TLS/SSL protocol, the database +and certificate will be automatically setup in the correct location on your behalf. +<TABLE WIDTH=100% BORDER=0 CELLPADDING=10 CELLSPACING=20> + <TR><TD BGCOLOR="#e2e2e2" WIDTH=70%><BR><IMG SRC="images/stepfwd_on.png" WIDTH=16 HEIGHT=16 BORDER=0> To establish a secure connection, in a shell enter:<BR> +<PRE><B> +$ export PCP_SECURE_SOCKETS=enforce +$ pminfo -h <FONT COLOR="#cc0000">YOUR.HOST.NAME</FONT> -f kernel.all.load +WARNING: issuer of certificate received from host <FONT COLOR="#000000">YOUR.HOST.NAME</FONT> is not trusted. +SHA1 fingerprint is <FONT COLOR="#000000">34:92:D2:DC:DE:28:3A:2D:DD:B9:1A:6C:C9:51:1E:B8:FA:CE:63:51</FONT> +Do you want to accept and save this certificate locally anyway (y/n)? <FONT COLOR="#000000">y</FONT> + +kernel.all.load + inst [1 or "1 minute"] value <FONT COLOR="#000000">1.26</FONT> + inst [5 or "5 minute"] value <FONT COLOR="#000000">1.29</FONT> + inst [15 or "15 minute"] value <FONT COLOR="#000000">1.28</FONT> +</B></PRE> +</TD></TR> +</TABLE> +</P> +<P>At any time, you can query the certificates you have installed locally +for remote collector hosts. +<TABLE WIDTH=100% BORDER=0 CELLPADDING=10 CELLSPACING=20> + <TR><TD BGCOLOR="#e2e2e2" WIDTH=70%><BR><IMG SRC="images/stepfwd_on.png" WIDTH=16 HEIGHT=16 BORDER=0> To list the locally installed server certificates, in a shell enter:<BR> +<PRE><B> +$ certutil -d sql:$HOME/.pki/nssdb -L + +Certificate Nickname Trust Attributes + SSL,S/MIME,JAR/XPI + +PCP Collector certificate Pu,u,u +PCP Collector certificate Pu,u,u +PCP Collector certificate Pu,u,u +PCP Collector certificate Pu,u,u + +$ certutil -d sql:$HOME/.pki/nssdb -L -n 'PCP Collector certificate' | grep 'DNS name:' +</B></PRE> +</TD></TR> +</TABLE> +When listing by nickname, this provides a detailed certificate list, so using an +output filter as shown above can be handy to report only the hostnames. +</P> +<BR> +<P>Alternatively, using the manual approach, first use <I>certutil</I> to ensure +a user database exists, then export either the CA or the collector certificate +in ASCII format for the PCP Collector system we wish to monitor and +finally import it into the user database. +<TABLE WIDTH=100% BORDER=0 CELLPADDING=10 CELLSPACING=20> + <TR><TD BGCOLOR="#e2e2e2" WIDTH=70%><BR><IMG SRC="images/stepfwd_on.png" WIDTH=16 HEIGHT=16 BORDER=0> Step 1: Create a local user NSS database in a command shell, <B><I>only if it does not exist already</I></B>:<BR> +<PRE><B> +$ ls $HOME/.pki/nssdb +ls: cannot access .pki/nssdb: No such file or directory +$ mkdir -p -m 0755 $HOME/.pki/nssdb +$ test -f /tmp/empty || echo > /tmp/empty +$ certutil -d sql:$HOME/.pki/nssdb -N -f /tmp/empty +</B></PRE> +</TD></TR> + <TR><TD BGCOLOR="#e2e2e2" WIDTH=70%><BR><IMG SRC="images/stepfwd_on.png" WIDTH=16 HEIGHT=16 BORDER=0> Step 2: To export the <I>collector</I> system CA certificate as ASCII, in a shell enter:<BR> +<PRE><B> +$ certutil -d sql:/etc/pki/nssdb -L -n "Local CA certificate" -a > /tmp/ca-certificate.asc +</B></PRE> +</TD></TR> + <TR><TD BGCOLOR="#e2e2e2" WIDTH=70%><BR><IMG SRC="images/stepfwd_on.png" WIDTH=16 HEIGHT=16 BORDER=0> Step 3: To import the certificate as ASCII on a <I>monitor</I> system, in a shell enter:<BR> +<PRE><B> +$ certutil -d sql:$HOME/.pki/nssdb -A -n "Local CA certificate" -t "CT,," -a -i /tmp/ca-certificate.asc +</B></PRE> +</TD></TR> +</TABLE> +Note: Cunning use of this trusted certificate could be used as the root certificate +for many hosts in an environment, and a single certificate could then be installed +on a monitor system allowing access to a group of hosts. +<BR> +</P> +<BR> +<P ALIGN=LEFT><FONT SIZE=4><B>Graphical Monitor Tools</B></FONT> +<TABLE WIDTH=100% BORDER=0 CELLPADDING=0 CELLSPACING=0 STYLE="page-break-before: always"> + <TR><TD WIDTH=500><P VALIGN=MIDDLE ALIGN=><CENTER><BR><IMG ALIGN=MIDDLE SRC="images/pmchart_add_host_secure.png" BORDER=0></CENTER></P></TD> + <TD><P>In the PCP strip chart utility <I>pmchart</I> from version 1.5.7 onward, secure connections can be established using the "Add Host" dialog. This can be accessed via the "New Chart" or "Open View" menu entries.<UL> + <LI>Specify the name of the PCP Collector system where <I>pmcd</I> is running. + <LI>Select the "Secure" check box. + <LI>Press "OK" to establish a new secure connection to the host. + </UL> + Note that it is not necessary to use the PCP_SECURE_SOCKETS environment variable described above with <I>pmchart</I>. However, if it is used, secure connections will become the default mode for all connections established by <I>pmchart</I> too. + </P></TD> + </TR> +</TABLE> +</P> +<P><BR></P> +<HR> +<CENTER> +<TABLE WIDTH=100% BORDER=0 CELLPADDING=0 CELLSPACING=0> + <TR> <TD WIDTH=50%><P>Copyright © 2007-2010 <A HREF="http://www.aconex.com/"><FONT COLOR="#000060">Aconex</FONT></A><BR>Copyright © 2000-2004 <A HREF="http://www.sgi.com/"><FONT COLOR="#000060">Silicon Graphics Inc</FONT></P></TD> + <TD WIDTH=50%><P ALIGN=RIGHT><A HREF="http://pcp.io/"><FONT COLOR="#000060">PCP Site</FONT></A><BR>Copyright © 2012-2014 <A HREF="http://www.redhat.com/"><FONT COLOR="#000060">Red Hat</FONT></P></TD> </TR> +</TABLE> +</CENTER> +</BODY> +</HTML> diff --git a/man/html/lab.trace.html b/man/html/lab.trace.html new file mode 100644 index 0000000..536217b --- /dev/null +++ b/man/html/lab.trace.html @@ -0,0 +1,555 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> +<!-- + (c) Copyright 2010 Aconex. All rights reserved. + (c) Copyright 2000-2004 Silicon Graphics Inc. All rights reserved. + Permission is granted to copy, distribute, and/or modify this document + under the terms of the Creative Commons Attribution-Share Alike, Version + 3.0 or any later version published by the Creative Commons Corp. A copy + of the license is available at + http://creativecommons.org/licenses/by-sa/3.0/us/ . +--> +<HTML> +<HEAD> + <meta http-equiv="content-type" content="text/html; charset=utf-8"> + <meta http-equiv="content-style-type" content="text/css"> + <link href="pcpdoc.css" rel="stylesheet" type="text/css"> + <link href="images/pcp.ico" rel="icon" type="image/ico"> + <TITLE>Trace Agent</TITLE> +</HEAD> +<BODY LANG="en-AU" TEXT="#000060" DIR="LTR"> +<TABLE WIDTH=100% BORDER=0 CELLPADDING=0 CELLSPACING=0 STYLE="page-break-before: always"> + <TR> <TD WIDTH=64 HEIGHT=64><FONT COLOR="#000080"><A HREF="http://pcp.io/"><IMG SRC="images/pcpicon.png" NAME="pmcharticon" ALIGN=TOP WIDTH=64 HEIGHT=64 BORDER=0></A></FONT></TD> + <TD WIDTH=1><P> </P></TD> + <TD WIDTH=500><P VALIGN=MIDDLE ALIGN=LEFT><A HREF="index.html"><FONT COLOR="#cc0000">Home</FONT></A> · <A HREF="lab.pmchart.html"><FONT COLOR="#cc0000">Charts</FONT></A> · <A HREF="timecontrol.html"><FONT COLOR="#cc0000">Time Control</FONT></A></P></TD> + </TR> +</TABLE> +<H1 ALIGN=CENTER STYLE="margin-top: 0.48cm; margin-bottom: 0.32cm"><FONT SIZE=7>Trace Agent</FONT></H1> +<TABLE WIDTH=15% BORDER=0 CELLPADDING=5 CELLSPACING=10 ALIGN=RIGHT> + <TR><TD BGCOLOR="#e2e2e2"><IMG SRC="images/system-search.png" WIDTH=16 HEIGHT=16 BORDER=0> <I>Tools</I><BR><PRE> +pmdatrace +pmtrace +pminfo +</PRE></TD></TR> +</TABLE> +<P>This chapter of the Performance Co-Pilot tutorial discusses application +instrumentation using the <B>trace</B> PMDA (Performance Metrics Domain Agent). +The trace agent has similar aims to the <A HREF="lab.mmapvalues.html">Memory +Mapped Values</A> (MMV) agent, in that both interfaces for application instrumentation. +The main differences are:</P> +<UL> + <LI> The <I>trace</I> PMDA is a predecessor to <I>MMV</I>, and it is expected + that most instrumented applications would use <I>MMV</I>. + <LI> The <I>trace</I> interface uses sockets for communication between + applications and agent, <I>MMV</I> uses memory mapped files. This + is heavier weight but allows for instrumentation to be sent between hosts, + optionally. + <LI> <I>MMV</I> allows the application to completely specify every aspect of + each metric it exports, the <I>trace</I> agent has a small number of metrics + with relatively fixed metadata, and each applications instrumentation is + exported as an instance of these fixed metrics. + <LI> This fixed nature of the <I>trace</I> metrics caters for existance of the + program <I>pmtrace</I> allowing simple instrumentation from the shell. +</UL> + +<P>For an explanation of Performance Co-Pilot terms and acronyms, consult +the <A HREF="glossary.html">PCP glossary</A>.</P> +<UL> + <LI> <A HREF="#overview">Overview</A> + <LI> <A HREF="#design">Trace Agent Design</A> + <UL> + <LI> Application Interaction + <LI> Sampling Techniques + <LI> Configuring the Trace Agent + </UL> + <LI> <A HREF="#traceapi">The Trace API</A> + <UL> + <LI> Transactions + <LI> Point Tracing + <LI> Observations/Counters + <LI> Configuring the Trace library + </UL> + <LI> <A HREF="#export">Instrumenting Applications to Export Performance Data</A> +</UL> + +<P><BR></P> +<TABLE WIDTH=100% BORDER=0 CELLPADDING=0 CELLSPACING=0 BGCOLOR="#e2e2e2"> + <TR><TD WIDTH=100% BGCOLOR="#081c59"><P ALIGN=LEFT><FONT SIZE=5 COLOR="#ffffff"><B><A NAME="overview">Overview</A></B></FONT></P></TD></TR> +</TABLE> +<P> This document provides an introduction to the design of the <B>trace</B> +agent, in an effort to explain how to configure the agent optimally for +a particular problem domain. This will be most useful as a supplement +to the functional coverage which the manual pages provide to both the +agent and the library interfaces.</P> +<P> Details of the use of the <B>trace</B> agent, and the associated +library (<I>libpcp_trace</I>) for instrumenting applications, are also +discussed.</P> +<TABLE WIDTH=100% BORDER=0 CELLPADDING=10 CELLSPACING=20> + <TR><TD BGCOLOR="#e2e2e2" WIDTH=70%><BR><IMG SRC="images/stepfwd_on.png" WIDTH=16 HEIGHT=16 BORDER=0> In a command shell enter:<BR> +<PRE><B> +# . /etc/pcp.conf +# cd $PCP_PMDAS_DIR/trace +# ./Install +</PRE></B> +Export a value, from the shell using: +<PRE><B> +$ pmtrace -v 100 "database-users" +$ pminfo -f trace +</PRE></B> +</TD></TR> +</TABLE> + +<P><BR></P> +<TABLE WIDTH=100% BORDER=0 CELLPADDING=0 CELLSPACING=0 BGCOLOR="#e2e2e2"> + <TR><TD WIDTH=100% BGCOLOR="#081c59"><P ALIGN=LEFT><FONT SIZE=5 COLOR="#ffffff"><B><A NAME="design">Trace Agent Design</A></B></FONT></P></TD></TR> +</TABLE> +<H4>Application Interaction</H4> +<P> The diagram below describes the general state maintained within the <B>trace</B> +agent. Applications which are linked with the <I>libpcp_trace</I> + library make calls through the trace Applications Programmer Interface +(API), resulting in inter-process communication of trace data between +the application and the <B>trace</B> agent. This data consists of an +identification tag, and the performance data associated with that +particular tag. The <B>trace</B> agent aggregates the incoming +information and periodically updates the exported summary information +to describe activity in the recent past.</P> +<P> +As each PDU (Protocol Data Unit) is received, its data is stored in the +current <I>working buffer</I>, and at the same time the global counter +associated with the particular tag contained within the PDU is +incremented. The working buffer contains all performance data which has +arrived since the previous time interval elapsed, and is discussed in +greater detail in the <B>Rolling Window Sampling Technique</B> section +below.</P> +<CENTER><P ALIGN="CENTER"> +<IMG SRC="images/trace_1.png" ALIGN="MIDDLE" WIDTH="511" HEIGHT="332"></P> +</CENTER><P> +<BR> +</P> +<H4> +Sampling Techniques</H4> +<P> +The <B>trace</B> agent employs a <B>rolling window periodic sampling</B> + technique. The recency of the data exported by the agent is determined +by its arrival time at the agent in conjunction with the length of the +sampling period being maintained by the <B>trace</B> agent. Through the +use of rolling window sampling, the <B>trace</B> agent is able to +present a more accurate representation of the available trace data at +any given time.</P> +<P> +The metrics affected by the agents rolling window sampling technique +are:</P> +<UL> + <LI> + <B><TT>trace.transact.rate</TT></B> + <LI> + <B><TT>trace.transact.ave_time</TT></B> + <LI> + <B><TT>trace.transact.min_time</TT></B> + <LI> + <B><TT>trace.transact.max_time</TT></B> + <LI> + <B><TT>trace.point.rate</TT></B> + <LI> + <B><TT>trace.observe.rate</TT></B> + <LI> + <B><TT>trace.counter.rate</TT></B> +</UL> +<P> +The remaining metrics are either global counters, control metrics, or +the last seen observation/counter value. All metrics exported by the <B>trace</B> +agent are explained in detail in the API section below.</P> +<H5> +Simple periodic sampling</H5> +<P> +This technique uses a single historical buffer to store the history of +events which have occurred over the sampling interval. As events occur +they are recorded in the working buffer. At the end of each sampling +interval the working buffer (which at that time holds the historical +data for the sampling interval just finished) is copied into the +historical buffer, and the working buffer is cleared (ready to hold new +events from the sampling interval now starting).</P> +<H5> +Rolling window periodic sampling</H5> +<P> +In contrast to simple periodic sampling with its single historical +buffer, the rolling window periodic sampling technique maintains a +number of separate buffers. One buffer is marked as the current working +buffer, and the remainder of the buffers hold historical data. As each +event occurs, the current working buffer is updated to reflect this.</P> +<P> +At a specified interval (which is a function of the number of +historical buffers maintained) the current working buffer and the +accumulated data which it holds is moved into the set of historical +buffers, and a new working buffer is used.</P> +<P> +The primary advantage of the rolling window approach is that at the +point where data is actually exported, the data which is exported has a +higher probability of reflecting a more recent sampling period than the +data exported using simple periodic sampling.</P> +<CENTER><P ALIGN="CENTER"> +<IMG SRC="images/trace_buffer.png" ALIGN="MIDDLE" WIDTH="425" + HEIGHT="391"></P> +</CENTER><P> +<BR> +</P> +<P> +The data collected over each sample duration and exported using the +rolling window technique provides a more up-to-date representation of +the activity during the most recently completed sample duration.</P> +<P> +The <B>trace</B> agent allows the length of the sample duration to be +configured, as well as the number of historical buffers which are to be +maintained. The rolling window is implemented in the <B>trace</B> agent +as a ring buffer (as shown earlier in the "Trace agent +Overview" diagram), such that when the current working buffer is +moved into the set of historical buffers, the least recent historical +buffer is cleared of data and becomes the new working buffer.</P> +<H5> +Example of window periodic sampling </H5> +<P> +Consider the scenario where one wants to know the rate of transactions +over the last 10 seconds. To do this one would set the sampling rate +for the trace agent to be 10 seconds and would fetch the metric <B><TT>trace.transact.rate</TT></B>. +So if in the last 10 seconds we had 8 transactions take place then we +would have a transaction rate of 8/10 or 0.8 transactions per second.</P> +<P> +As mentioned above, the trace agent does not actually do this. It +instead does its calculations automatically at a subinterval of the +sampling interval. Consider the example above with a calculation +subinterval of 2 seconds. Please refer to the bar chart below. At time +13.5 secs the user requests the transaction rate and is told it is has +a value of 0.7 transactions per second. In actual fact, the transaction +rate was 0.8 but the agent has done its calculations on the sampling +interval from 2 secs to 12 secs and not from 3.5 secs to 13.5 secs. +Every 2 seconds it will do the metrics calculations on the last 10 +seconds at that time. It does this for efficiency and so it is not +driven each time to do a calculation for a fetch request.</P> +<CENTER><P ALIGN="CENTER"> +<IMG SRC="images/trace_example.png" ALIGN="MIDDLE"></P> +</CENTER><P> +<BR> +</P> +<H4> +Configuring the Trace agent</H4> +<P> +The <B>trace</B> agent is configurable primarily through command line +options. The list of command line options presented below is not +exhaustive, but covers those options which are particularly relevant to +tuning the manner in which performance data is collected.</P> +<H5> +Options: </H5> +<DL> + <DT> + <B>Access Controls</B> + <DD> + host-based access control is offered by the <B>trace</B> agent, + allowing and disallowing connections from instrumented applications + running on specified hosts or groups of hosts. Limits to the number of + connections allowed from individual hosts can also be mandated + <DT> + <B>Sample Duration</B> + <DD> + interval over which metrics are to be maintained before being + discarded. + <DT> + <B>Number of Historical Buffers</B> + <DD> + the data maintained for the sample duration is held in a number of + internal buffers within the <B>trace</B> agent. This number is + configurable, allowing the rolling window effect to be tuned (within + the sample duration) + <DT> + <B>Observation/Counter Metric Units</B> + <DD> + since the data being exported by the <B><TT>trace.observe.value</TT></B> + and <B><TT>trace.counter.value</TT></B> metrics is user-defined, + the <B>trace</B> agent by default exports these metrics with a type + of "none". A framework is provided allowing this to be made + more specific (bytes per second, for example), allowing the exported + values to be plotted along with other performance metrics of similar + units by tools like <I>pmchart</I>) + <DT> + <B>Instance Domain Refresh</B> + <DD> + the set of instances exported for each of the trace metrics can be + cleared through the storable <B><TT>trace.control.reset</TT></B> + metric. +</DL> + +<P><BR></P> +<TABLE WIDTH=100% BORDER=0 CELLPADDING=0 CELLSPACING=0 BGCOLOR="#e2e2e2"> + <TR><TD WIDTH=100% BGCOLOR="#081c59"><P ALIGN=LEFT><FONT SIZE=5 COLOR="#ffffff"><B><A NAME="traceapi">The Trace API</A></B></FONT></P></TD></TR> +</TABLE> +<P>The <I>libpcp_trace</I> Applications Programmer Interface (API) may be +called from C, C++, Fortran, and Java. Each language has access to the +complete set of functionality offered by <I>libpcp_trace</I>, although +in some cases the calling conventions differ slightly between +languages. An overview of each of the different tracing mechanisms +offered by the API follows, as well as an explanation of their mappings +to the actual performance metrics exported by the <B>trace</B> agent.</P> +<H4>Transactions </H4> +<P>Paired calls to the <I>pmtracebegin</I>(3) and <I>pmtraceend</I>(3) API +functions will result in transaction data being sent to the agent with +a measure of the time interval between the two calls (which is assumed +to be the transaction service time). Using the <I>pmtraceabort</I>(3) +call causes data for that particular transaction to be discarded. +Transaction data is exported through the <B>trace</B> agents <B><TT>trace.transact</TT></B> + metrics.</P> +<DL> + <DT> + <B><TT>trace.transact.count</TT></B> + <DD> + running count for each transaction type seen since the trace agent started + <DT> + <B><TT>trace.transact.rate</TT></B> + <DD> + the average rate at which each transaction type is completed, + calculated over the last sample duration + <DT> + <B><TT>trace.transact.ave_time</TT></B> + <DD> + the average service time per transaction type, calculated over the last + sample duration + <DT> + <B><TT>trace.transact.min_time</TT></B> + <DD> + minimum service time per transaction type within the last sample + duration + <DT> + <B><TT>trace.transact.max_time</TT></B> + <DD> + maximum service time per transaction type within the last sample + duration + <DT> + <B><TT>trace.transact.total_time</TT></B> + <DD> + cumulative time spent processing each transaction since the <B>trace</B> + agent started running +</DL> +<H4> +Point tracing </H4> +<P> +Point tracing allows the application programmer to export metrics +related to salient events. The <I>pmtracepoint</I>(3) function is most +useful when start and end points are not well defined, eg. when the +code branches in such a way that a transaction cannot be clearly +identified, or when processing does not follow a transactional model, +or the desired instrumentation is akin to event rates rather than event +service times. This data is exported through the <B><TT>trace.point</TT></B> + metrics.</P> +<DL> + <DT> + <B><TT>trace.point.count</TT></B> + <DD> + running count of point observations for each tag seen since the <B>trace</B> + agent started + <DT> + <B><TT>trace.point.rate</TT></B> + <DD> + the average rate at which observation points occur for each tag, within + the last sample duration +</DL> +<H4> +Observations/Counters</H4> +<P> +The <I>pmtraceobs</I>(3) and <I>pmtracecounter</I>(3) functions have +similar semantics to <I>pmtracepoint</I>(3), but also allow an +arbitrary numeric value to be passed to the <B>trace</B> agent. The most +recent value for each tag is then immediately available from the agent. +Observation and counter data is exported through the <B><TT>trace.observe</TT></B> + and <B><TT>trace.counter</TT></B> metrics, and these differ only in +the PMAPI semantics associated with their respective value metrics (the +PMAPI semantics for these two metrics is "instantaneous" or +"counter" - refer to the PMAPI(3) manual page for details on +PMAPI metric semantics).</P> +<DL> + <DT> + <B><TT>trace.observe.count, trace.counter.count</TT></B> + <DD> + running count of observations/counters seen since the <B>trace</B> + agent started + <DT> + <B><TT>trace.observe.rate, trace.counter.rate</TT></B> + <DD> + the average rate at which observations/counters for each tag occur, + calculated over the last sample duration + <DT> + <B><TT>trace.observe.value, trace.counter.value</TT></B> + <DD> + the numeric value associated with the observation/counter last seen by + the agent +</DL> +<H4> +Configuring the Trace library </H4> +<P> +The trace library is configurable through the use of environment +variables, as well as through state flags, which provide diagnostic +output and enable or disable the configurable functionality within the +library.</P> +<H5> +Environment variables: </H5> +<DL> + <DT> + <B><TT>PCP_TRACE_HOST</TT></B> + <DD> + the name of the host where the <B>trace</B> agent is running + <DT> + <B><TT>PCP_TRACE_PORT</TT></B> + <DD> + TCP/IP port number on which the <B>trace</B> agent is accepting + client connections + <DT> + <B><TT>PCP_TRACE_TIMEOUT</TT></B> + <DD> + number to seconds to wait until assuming that the initial connection is + not going to be made, and timeout is to occur (the default is three + seconds) + <DT> + <B><TT>PCP_TRACE_REQTIMEOUT</TT></B> + <DD> + number of seconds to allow before timing out on awaiting + acknowledgement from the <B>trace</B> agent after trace data has + been sent to it. This variable has no effect in the asynchronous trace + protocol (refer to <B><TT>PMTRACE_STATE_ASYNC</TT></B> under `State + Flags', below) + <DT> + <B><TT>PCP_TRACE_RECONNECT</TT></B> + <DD> + a list of values which represents the backoff approach to be taken by + the <I>libpcp_trace</I> library routines when attempting to + reconnect to the <B>trace</B> agent after a connection has been + lost. The list of values should be a positive number of seconds for the + application to delay before making the next reconnection attempt. When + the final value in the list is reached, that value is then used for all + subsequent reconnection attempts. +</DL> +<H5> +State flags: </H5> +<P> +The following flags can be used to customize the operation of the <I>libpcp_trace</I> + routines. These are registered through the <I>pmtracestate</I>(3) +call, and can be set either individually or together.</P> +<DL> + <DT> + <B><TT>PMTRACE_STATE_NONE</TT></B> + <DD> + the default - no state flags have been set - the fault-tolerant, + synchronous protocol is used for communicating with the agent, and no + diagnostic messages are displayed by the <I>libpcp_trace</I> + routines <B><TT>PMTRACE_STATE_API</TT></B> + <DD> + high-level diagnostics - simply displays entry into each of the API + routines + <DT> + <B><TT>PMTRACE_STATE_COMMS</TT></B> + <DD> + diagnostic messages related to establishing and maintaining the + communication channel between application and agent + <DT> + <B><TT>PMTRACE_STATE_PDU</TT></B> + <DD> + the low-level details of the trace PDUs (Protocol Data Units) is + displayed as each PDU is transmitted or received + <DT> + <B><TT>PMTRACE_STATE_PDUBUF</TT></B> + <DD> + the full contents of the PDU buffers are dumped, as PDUs are + transmitted and received + <DT> + <B><TT>PMTRACE_STATE_NOAGENT</TT></B> + <DD> + if set, causes inter-process communication between the instrumented + application and the <B>trace</B> agent to be skipped - this is + intended as a debugging aid for applications using <I>libpcp_trace</I> + + <DT> + <B><TT>PMTRACE_STATE_ASYNC</TT></B> + <DD> + flag which enables the asynchronous trace protocol, such that the + application does not block awaiting acknowledgement PDUs from the agent. + This must be set before using the other <I>libpcp_trace</I> entry + points in order for it to be effective. +</DL> + +<P><BR></P> +<TABLE WIDTH=100% BORDER=0 CELLPADDING=0 CELLSPACING=0 BGCOLOR="#e2e2e2"> + <TR><TD WIDTH=100% BGCOLOR="#081c59"><P ALIGN=LEFT><FONT SIZE=5 COLOR="#ffffff"><B><A NAME="export">Instrumenting Applications to Export Performance Data</A></B></FONT></P></TD></TR> +</TABLE> +<P>The <I>libpcp_trace</I> library is designed to encourage application +developers (Independent Software Vendors and end-user customers) to +embed calls in their code that enable application performance data to +be exported. When combined with system-level performance data this +allows total performance and resource demands of an application to be +correlated with application activity.</P> +<P>Some illustrative application performance metrics might be:</P> +<UL> + <LI> + computation state (especially for codes with major shifts in resource + demands between phases of their execution) + <LI> + problem size and parameters, e.g. degree of parallelism + <LI> + throughput in terms of sub problems solved, iteration count, + transactions, data sets inspected, etc. + <LI> + service time by operation type +</UL> +<P> +The <I>libpcp_trace</I> library approach offers a number of attractive +features:</P> +<UL> + <LI> + a simple API for inserting instrumentation calls into an application, + eg. + <PRE> + pmtracebegin("pass 1"); + ... + pmtraceend("pass 1"); + ... + pmtraceobs("threads", N); +</PRE> + <LI> trace routines may be called from C, C++, Fortran and Java, and are + well suited to macro encapsulation for compile-time inclusion/exclusion + <LI>the PCP version of the library allows numerical observations, measures + time between matching begin-end calls, etc. to be shipped to a PCP + agent and then exported into the PCP infrastructure ... exporting is + controlled by environment variables, so the overhead is very low if the + metrics are not being exported +</UL> +<P> +Once the application performance metrics are exported into the PCP +framework, all of the PCP tools may be leveraged to provide performance +monitoring and management, including:</P> +<UL> + <LI> + 2-D and 3-D visualization of resource demands and performance, showing + concurrent system activity and application activity + <LI> + transport of performance data over the network for distributed + performance management + <LI> + archive logging for historical records of performance, most useful for + problem diagnosis, post mortem analysis, performance regression + testing, capacity planning, benchmarking + <LI> + automated alarms when "bad" performance is observed (either + in real-time or when scanning archives) +</UL> +<P> +The relationship between the application, the <I>libpcp_trace</I> + library, the <B>trace</B> agent and the rest of the PCP infrastructure +is shown below:</P> +<CENTER><P ALIGN="CENTER"> +<IMG SRC="images/trace_libpcp.png" WIDTH="288" HEIGHT="183"></P> +</CENTER> + +<P><BR></P> +<HR> +<CENTER> +<TABLE WIDTH=100% BORDER=0 CELLPADDING=0 CELLSPACING=0> + <TR> <TD WIDTH=50%><P>Copyright © 2007-2010 <A HREF="http://www.aconex.com/"><FONT COLOR="#000060">Aconex</FONT></A><BR>Copyright © 2000-2004 <A HREF="http://www.sgi.com/"><FONT COLOR="#000060">Silicon Graphics Inc</FONT></P></TD> + <TD WIDTH=50%><P ALIGN=RIGHT><A HREF="http://pcp.io/"><FONT COLOR="#000060">PCP Site</FONT></A><BR>Copyright © 2012-2014 <A HREF="http://www.redhat.com/"><FONT COLOR="#000060">Red Hat</FONT></P></TD> </TR> +</TABLE> +</CENTER> +</BODY> +</HTML> diff --git a/man/html/overview.html b/man/html/overview.html new file mode 100644 index 0000000..241f97d --- /dev/null +++ b/man/html/overview.html @@ -0,0 +1,31 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> +<HTML> +<HEAD> + <meta http-equiv="content-type" content="text/html; charset=utf-8"> + <meta http-equiv="content-style-type" content="text/css"> + <link href="pcpdoc.css" rel="stylesheet" type="text/css"> + <link href="images/pcp.ico" rel="icon" type="image/ico"> + <TITLE>PCP Manual</TITLE> +</HEAD> +<BODY LANG="en-AU" TEXT="#000060" DIR="LTR"> +<TABLE WIDTH=100% BORDER=0 CELLPADDING=0 CELLSPACING=0 STYLE="page-break-before: always"> + <TR> <TD WIDTH=64 HEIGHT=64><A HREF="http://pcp.io/"><IMG SRC="images/pmcharticon.png" NAME="pmcharticon" ALIGN=TOP WIDTH=64 HEIGHT=64 BORDER=0></A></TD> + <TD WIDTH=1><P> </P></TD> + <TD WIDTH=500><P VALIGN=MIDDLE ALIGN=LEFT><A HREF="index.html"><FONT COLOR="#cc0000">Home</FONT></A> · <A HREF="lab.pmchart.html"><FONT COLOR="#cc0000">Charts</FONT></A> · <A HREF="timecontrol.html"><FONT COLOR="#cc0000">Time Control</FONT></A></P></TD> + </TR> +</TABLE> +<H1 ALIGN=CENTER STYLE="margin-top: 0.48cm; margin-bottom: 0.32cm"><FONT SIZE=7>Overview</FONT></H1> +<P>The PCP Charts tool, pmchart, is a stripchart tool for graphically displaying changes in the values of performance metric values available through the facilities of the Performance Co-Pilot (PCP). Metric values can be sourced from one or more live hosts (simultaneously). Alternatively, one or more PCP archives can be used as a source of historical data. See the <A HREF="pcpintro.html">PCP Introduction</A> for an in-depth discussion of the capabilities of the PCP framework, many of which are used by pmchart. +<P>Many aspects of the behaviour of pmchart can be customised through the interface. The use of <A HREF="views.html">Views</A> allows predefined sets of metrics and charting parameters like colors, scaling, titles, legends, and so on to be stored for later use, or use with different hosts and archives. +<P>In addition, the Preferences dialog allows customisations to the rest of the pmchart user interface to be saved and restored between different invocations of the tool. This allows the default background color, highlight color, contents and location of the toolbar, and many other aspects to be configured. +<P>pmchart makes extensive use of the pmtime utility for <A HREF="timecontrol.html">time control</A>, refer to the pmtime manual pages for further details of its operation. +<P><BR></P> +<HR> +<CENTER> +<TABLE WIDTH=100% BORDER=0 CELLPADDING=0 CELLSPACING=0> + <TR> <TD WIDTH=50%><P>Copyright © 2007-2010 <A HREF="http://www.aconex.com/"><FONT COLOR="#000060">Aconex</FONT></A><BR>Copyright © 2000-2004 <A HREF="http://www.sgi.com/"><FONT COLOR="#000060">Silicon Graphics Inc</FONT></P></TD> + <TD WIDTH=50%><P ALIGN=RIGHT><A HREF="http://pcp.io/"><FONT COLOR="#000060">PCP Site</FONT></A><BR>Copyright © 2012-2014 <A HREF="http://www.redhat.com/"><FONT COLOR="#000060">Red Hat</FONT></P></TD> </TR> +</TABLE> +</CENTER> +</BODY> +</HTML> diff --git a/man/html/pcpdoc.css b/man/html/pcpdoc.css new file mode 100644 index 0000000..80201cc --- /dev/null +++ b/man/html/pcpdoc.css @@ -0,0 +1,45 @@ +h1 { + color: #000060; + font-family: Verdana,Arial,sans-serif; + font-size: 28pt; + font-style: bold; + font-weight: medium; + text-align: center; + margin-top: 0.48cm; + margin-bottom: 0.32cm; +} + +h2 { + color: #ffffff; + background-color: #081c59; + font-family: Verdana,Arial,sans-serif; + font-size: 16pt; + font-style: bold; + font-weight: medium; +} + +p, td { + color: #000060; + font-family: Verdana,Arial,sans-serif; + font-size: 11pt; +} + +li { + color: #000060; + font-family: Verdana,Arial,sans-serif; + font-size: 11pt; + padding-bottom: 5px; +} + +pre { + color: #000060; + font-size: 10pt; +} + +th { + color: #000060; + font-family: Verdana,Arial,sans-serif; + font-size: 11pt; + font-style: bold; + font-weight: medium; +} diff --git a/man/html/pcpintro.html b/man/html/pcpintro.html new file mode 100644 index 0000000..8ab3ea1 --- /dev/null +++ b/man/html/pcpintro.html @@ -0,0 +1,251 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> +<HTML> +<HEAD> + <meta http-equiv="content-type" content="text/html; charset=utf-8"> + <meta http-equiv="content-style-type" content="text/css"> + <link href="pcpdoc.css" rel="stylesheet" type="text/css"> + <link href="images/pcp.ico" rel="icon" type="image/ico"> + <TITLE>PCP Manual</TITLE> +</HEAD> +<BODY LANG="en-AU" TEXT="#000060" DIR="LTR"> +<TABLE WIDTH=100% BORDER=0 CELLPADDING=0 CELLSPACING=0 STYLE="page-break-before: always"> + <TR> <TD WIDTH=64 HEIGHT=64><A HREF="http://pcp.io/"><IMG SRC="images/pcpicon.png" NAME="pcpicon" ALIGN=TOP WIDTH=64 HEIGHT=64 BORDER=0></A></TD> + <TD WIDTH=1><P> </P></TD> + <TD WIDTH=500><P VALIGN=MIDDLE ALIGN=LEFT><A HREF="index.html"><FONT COLOR="#cc0000">Home</FONT></A> · <A HREF="lab.pmchart.html"><FONT COLOR="#cc0000">Charts</FONT></A> · <A HREF="timecontrol.html"><FONT COLOR="#cc0000">Time Control</FONT></A></P></TD> + </TR> +</TABLE> +<H1 ALIGN=CENTER STYLE="margin-top: 0.48cm; margin-bottom: 0.32cm"><FONT SIZE=7>PCP Introduction</FONT></H1> +<P>The Performance Co-Pilot (PCP) is an open source toolkit designed for monitoring and managing system-level performance. These services are distributed and scalable to accommodate the most complex system configurations and performance problems. +<P>PCP supports many different platforms, including (but not limited to) Linux, MacOSX, FreeBSD, IRIX, Solaris and Windows (Win32). From a high-level PCP can be considered to contain two classes of software utility: +<UL> <LI><I>PCP Collectors</I>. These are the parts of PCP that collect and extract performance data from various sources, e.g. the kernel or a database. These are available from <A HREF="http://pcp.io/">http://pcp.io/</A>. +<P> <LI><I>PCP Monitors</I>. These are the parts of PCP that display data collected from hosts (or archives) that have the PCP Collector installed. Many monitor tools are available as part of PCP. Other monitoring tools are available separately, such as pmchart, in layered packages that build on the core PCP functionality. +</UL> +<P>This document describes the high-level features and options common to most PCP utilities available on all platforms. +<P> </P> +<TABLE WIDTH=100% BORDER=0 CELLPADDING=0 CELLSPACING=0 BGCOLOR="#e2e2e2"> + <TR><TD WIDTH=100% BGCOLOR="#081c59"><P ALIGN=LEFT><FONT SIZE=5 COLOR="#ffffff"><B>Overview</B></FONT></P></TD></TR> +</TABLE> +<P>The PCP architecture is distributed in the sense that any PCP tool may be executing remotely. On the host (or hosts) being monitored, each domain of performance metrics, whether the kernel, a service layer, a database, a web server, an application, etc. requires a Performance Metrics Domain Agent (PMDA) which is responsible for collecting performance measurements from that domain. All PMDAs are controlled by the Performance Metrics Collector Daemon (<B>pmcd</B>(1)) on the same host. +<P>Client applications (the monitoring tools) connect to <B>pmcd</B>(1), which acts as a router for requests, by forwarding requests to the appropriate PMDA and returning the responses to the clients. Clients may also access performance data from a PCP archive (created using <B>pmlogger</B>(1)) for retrospective analysis. +<P>Each tool or command is documented completely in its own reference page. +<P>The following performance monitoring applications are primarily console based, are typically run directly from the command line, and are all part of the base PCP package. +<UL><LI><I>pmstat</I> - Outputs an ASCII high-level summary of system performance. + <LI><I>pmie</I> - An inference engine that can evaluate predicate-action rules to perform alarms and automate system management tasks. + <LI><I>pminfo</I> - Interrogate specific performance metrics and the meta data that describes them. + <LI><I>pmlogger</I> - Generates PCP archives of performance metrics suitable for replay by most PCP tools. + <LI><I>pmval</I> - Simple periodic reporting for some or all instances of a performance metric, with optional VCR time control. +</UL> +<P>Additional tools can be found in the layered PCP GUI package. +<UL><LI><I>pmchart</I> - Strip charts for arbitrary combinations of performance metrics. + <LI><I>pmdumptext</I> - Produce ASCII reports for arbitrary combinations of performance metrics. +</UL> +<P> </P> +<TABLE WIDTH=100% BORDER=0 CELLPADDING=0 CELLSPACING=0 BGCOLOR="#e2e2e2"> + <TR><TD WIDTH=100% BGCOLOR="#081c59"><P ALIGN=LEFT><FONT SIZE=5 COLOR="#ffffff"><B>Common Command Line Arguments</B></FONT></P></TD></TR> +</TABLE> +<P>There is a set of common command line arguments that are used consistently by most PCP tools. +<P> </P> +<TABLE WIDTH=100% BORDER=0 CELLPADDING=0 CELLSPACING=0 BGCOLOR="#e2e2e2"> + <TR><TD WIDTH=25%><P><B>-a archive</B></P></TD> + <TD><P>Performance metric information is retrospectively retrieved from the Performance Co-Pilot (PCP) archive, previously generated by <B>pmlogger</B>(1). The <B>-a</B> and <B>-h</B> options are mutually exclusive.</P></TD> + </TR> + <TR><TD WIDTH=25%><P><B>-a archive[,archive,..]</B></P></TD> + <TD><P>An alternate form of <B>-a</B> for applications that are able to handle multiple archives.</P></TD> + </TR> + <TR><TD WIDTH=25%><P><B>-h hostname</B></P></TD> + <TD><P>Unless directed to another host by the <B>-h</B> option, or to an archive by the <B>-a</B> option, the source of performance metrics will be the Performance Metrics Collector Daemon (PMCD) on the local host. The <B>-a</B> and <B>-h</B> options are mutually exclusive.</P></TD> + </TR> + <TR><TD WIDTH=25%><P><B>-s samples</B></P></TD> + <TD><P>The argument <B>samples</B> defines the number of samples to be retrieved and reported. If <B>samples</B> is 0 or <B>-s</B> is not specified, the application will sample and report continuously (in real time mode) or until the end of the PCP archive (in archive mode).</P></TD> + </TR> + <TR><TD WIDTH=25%><P><B>-z</B></P></TD> + <TD><P>Change the reporting timezone to the local timezone at the host that is the source of the performance metrics, as identified via either the <B>-h</B> or <B>-a</B> options.</P></TD> + </TR> + <TR><TD WIDTH=25%><P><B>-Z timezone</B></P></TD> + <TD><P>By default, applications report the time of day according to the local timezone on the system where the application is executed. The <B>-Z</B> option changes the timezone to <B>timezone</B> in the format of the environment variable TZ as described in <B>environ</B>(5).</P></TD> + </TR> +</TABLE> +<P> </P> +<TABLE WIDTH=100% BORDER=0 CELLPADDING=0 CELLSPACING=0 BGCOLOR="#e2e2e2"> + <TR><TD WIDTH=100% BGCOLOR="#081c59"><P ALIGN=LEFT><FONT SIZE=5 COLOR="#ffffff"><B>Interval Specification and Alignment</B></FONT></P></TD></TR> +</TABLE> +<P>Most PCP tools operate with periodic sampling or reporting, and the <B>-t</B> and <B>-A</B> options may be used to control the duration of the sample interval and the alignment of the sample times. +<P> </P> +<TABLE WIDTH=100% BORDER=0 CELLPADDING=0 CELLSPACING=0 BGCOLOR="#e2e2e2"> + <TR><TD WIDTH=25%><P><B>-t interval</B></P></TD> + <TD><P>Set the update or reporting interval.</P> +<P>The interval argument is specified as a sequence of one or more elements of the form + <I>number[units]</I> +where <I>number</I> is an integer or floating point constant (parsed using <B>strtod</B>(3)) and the optional <I>units</I> is one of: seconds, second, secs, sec, s, minutes, minute, mins, min, m, hours, hour, h, days, day and d. If the <I>unit</I> is empty, second is assumed.</P> +<P>In addition, the upper case (or mixed case) version of any of the above is also acceptable. +<P>Spaces anywhere in the <B>interval</B> are ignored, so 4 days 6 hours 30 minutes, 4day6hour30min, 4d6h30m and 4d6.5h are all equivalent. +<P>Multiple specifications are additive, e.g. ‘‘1hour 15mins 30secs’’ is interpreted as 3600+900+30 seconds. </TR> + <TR><TD WIDTH=25%><P><B>-A align</B></P></TD> + <TD><P>By default samples are not necessarily aligned on any natural unit of time. The <B>-A</B> option may be used to force the initial sample to be aligned on the boundary of a natural time unit. For example <B>-A 1sec</B>, <B>-A 30min</B> and <B>-A 1hour</B> specify alignment on whole seconds, half and whole hours respectively. +<P>The align argument follows the syntax for an interval argument described above for the <B>-t</B> option. +<P>Note that alignment occurs by advancing the time as required, and that <B>-A</B> acts as a modifier to advance both the start of the time window (see the next section) and the origin time (if the <B>-O</B> option is specified). +<P> </P></TR> +</TABLE> +<P> </P> +<TABLE WIDTH=100% BORDER=0 CELLPADDING=0 CELLSPACING=0 BGCOLOR="#e2e2e2"> + <TR><TD WIDTH=100% BGCOLOR="#081c59"><P ALIGN=LEFT><FONT SIZE=5 COLOR="#ffffff"><B>Time Window Specification</B></FONT></P></TD></TR> +</TABLE> +<P>Many PCP tools are designed to operate in some time window of interest, e.g. to define a termination time for real time monitoring or to define a start and end time within a PCP archive log. +<P>In the absence of the <B>-O</B> and <B>-A</B> options to specify an initial sample time origin and time alignment (see above), the PCP application will retrieve the first sample at the start of the time window. +<P>The following options may be used to specify a time window of interest. +<P> </P> +<TABLE WIDTH=100% BORDER=0 CELLPADDING=0 CELLSPACING=0 BGCOLOR="#e2e2e2"> + <TR><TD WIDTH=25%><P><B>-S starttime</B></P></TD> + <TD><P>By default the time window commences immediately in real time mode, or coincides with time at the start of the PCP archive log in archive mode. The <B>-S</B> option may be used to specify a later time for the start of the time window. +<P>The <B>starttime</B> parameter may be given in one of three forms (<B>interval</B> is the same as for the <B>-t</B> option as described above, <B>ctime</B> is described below): +<P><B>interval</B> To specify an offset from the current time (in real time mode) or the beginning of a PCP archive (in archive mode) simply specify the interval of time as the argument. For example <I>-S 30min</I> will set the start of the time window to be exactly 30 minutes from now in real time mode, or exactly 30 minutes from the start of a PCP archive. +<P><B>-interval</B> To specify an offset from the end of a PCP archive log, prefix the interval argument with a minus sign. In this case, the start of the time window precedes the time at the end of archive by the given interval. For example <I>-S -1hour</I> will set the start of the time window to be exactly one hour before the time of the last sample in a PCP archive log. +<P><B>@ctime</B> To specify the calendar date and time (local time in the reporting timezone) for the start of the time window, use the <B>ctime</B>(3) syntax preceded by an at sign. For example <I>-S ’@ Mon Mar 4 13:07:47 1996’</I>. </P></TD></TR> + <TR><TD WIDTH=25%><P><B>-T endtime</B></P></TD> + <TD><P>By default the end of the time window is unbounded (in real time mode) or aligned with the time at the end of a PCP archive log (in archive mode). The <B>-T</B> option may be used to specify an earlier time for the end of the time window. +<P>The <B>endtime</B> parameter may be given in one of three forms (interval is the same as for the <B>-t</B> option as described above, <B>ctime</B> is described below): +<P><B>interval</B> To specify an offset from the start of the time window simply use the interval of time as the argument. For example <I>-T 2h30m</I> will set the end of the time window to be 2 hours and 30 minutes after the start of the time window. +<P><B>-interval</B> To specify an offset back from the time at the end of a PCP archive log, prefix the interval argument with a minus sign. For example <I>-T -90m</I> will set the end of the time window to be 90 minutes before the time of the last sample in a PCP archive log. +<P><B>@ctime</B> To specify the calendar date and time (local time in the reporting timezone) for the end of the time window, use the <B>ctime</B>(3C) syntax preceded by an at sign. For example <I>-T ’@ Mon Mar 4 13:07:47 1996’</I>. </P></TD></TR> + <TR><TD WIDTH=25%><P><B>-O origin</B></P></TD> + <TD><P>By default samples are fetched from the start of the time window (see description of <B>-S</B> option) to the end of the time window (see description of <B>-T</B> option). The <B>-O</B> option allows the specification of an origin within the time window to be used as the initial sample time. This is useful for interactive use of a PCP tool with the <B>pmtime</B>(1) VCR replay facility. +<P>The <B>origin</B> argument accepted by <B>-O</B> conforms to the same syntax and semantics as the <B>starttime</B> argument for the <B>-T</B> option. +<P>For example <I>-O -0</I> specifies that the initial position should be at the end of the time window; this is most useful when wishing to replay "backwards" within the time window. </P></TD></TR> +</TABLE> +<P>The <B>ctime</B> argument for the <B>-O</B>, <B>-S</B> and <B>-T</B> options is based upon the calendar date and time format of <B>ctime</B>(3C), but may be a fully specified time string like <I>Mon Mar 4 13:07:47 1996</I> or a partially specified time like <I>Mar 4 1996</I>, <I>Mar 4</I>, <I>Mar</I>, <I>13:07:50</I> or <I>13:08</I>. +<P>For any missing low order fields, the default value of 0 is assumed for hours, minutes and seconds, 1 for day of the month and Jan for months. Hence, the following are equivalent: <I>-S ’@ Mar 1996’</I> and <I>-S ’@ Mar 1 00:00:00 1996’.</I> +<P>If any high order fields are missing, they are filled in by starting with the year, month and day from the current time (real time mode) or the time at the beginning of the PCP archive log (archive mode) and advancing the time until it matches the fields that are specified. So, for example if the time window starts by default at "Mon Mar 4 13:07:47 1996", then <I>-S @13:10</I> corresponds to 13:10:00 on Mon Mar 4, 1996, while <I>-S @10:00</I> corresponds to 10:00:00 on Tue Mar 5, 1996 (note this is the following day). +<P>For greater precision than afforded by <B>ctime</B>(3C), the seconds component may be a floating point number. +<P>Also the 12 hour clock (am/pm notation) is supported, so for example <I>13:07</I> and <I>1:07 pm</I> are equivalent. +<P> </P> +<TABLE WIDTH=100% BORDER=0 CELLPADDING=0 CELLSPACING=0 BGCOLOR="#e2e2e2"> + <TR><TD WIDTH=100% BGCOLOR="#081c59"><P ALIGN=LEFT><FONT SIZE=5 COLOR="#ffffff"><B>Performance Metrics - Names and Identifiers</B></FONT></P></TD></TR> +</TABLE> +<P>The number of performance metric names supported by PCP in IRIX is of the order of a few thousand. There are fewer metrics on Linux, but still a considerable number. The PCP libraries and applications use an internal identification scheme that unambiguously associates a single integer with each known performance metric. This integer is known as the Performance Metric Identifier, or PMID. Although not a requirement, PMIDs tend to have global consistency across all systems, so a particular performance metric usually has the same PMID. +<P>For all users and most applications, direct use of the PMIDs would be inappropriate (e.g. this would limit the range of accessible metrics, make the code hard to maintain, force the user interface to be particularly baroque, etc.). Hence a Performance Metrics Name Space (PMNS) is used to provide external names and a hierarchic classification for performance metrics. A PMNS is represented as a tree, with each node having a label, a pointer to either a PMID (for leaf nodes) or a set of descendent nodes in the PMNS (for non-leaf nodes). +<P>A node label must begin with an alphabetic character, followed by zero or more characters drawn from the alphabetics, the digits and character `_´ (underscore). For alphabetic characters in a node label, upper and lower case are distinguished. +<P>By convention, the name of a performance metric is constructed by concatenation of the node labels on a path through the PMNS from the root node to a leaf node, with a ‘‘.’’ as a separator. The root node in the PMNS is unlabeled, so all names begin with the label associated with one of the descendent nodes below the root node of the PMNS, e.g. <I>kernel.percpu.syscall</I>. Typically (although this is not a requirement) there would be at most one name for each PMID in a PMNS. For example <I>kernel.all.cpu.idle</I> and <I>disk.dev.read</I> are the unique names for two distinct performance metrics, each with a unique PMID. +<P>Groups of related PMIDs may be named by naming a non-leaf node in the PMNS tree, e.g. <I>disk</I>. +<P>There may be PMIDs with no associated name in a PMNS; this is most likely to occur when specific PMIDs are not available in all systems, e.g. if ORACLE is not installed on a system, there is no good reason to pollute the PMNS with names for all of the ORACLE performance metrics. +<P>Note also that there is no requirement for the PMNS to be the same on all systems, however in practice most applications would be developed against a stable PMNS that was assumed to be a subset of the PMNS on all systems. Indeed the PCP distribution includes a default local PMNS for just this purpose. +<P>The default local PMNS is located at $PCP_VAR_DIR/pmns/root however the environment variable PMNS_DEFAULT may be set to the full pathname of a different PMNS which will then be used as the default local PMNS. +<P>Most applications do not use the local PMNS, but rather import parts of the PMNS as required from the same place that performance metrics are fetched, i.e. from <B>pmcd</B>(1) for live monitoring or from a PCP archive for retrospective monitoring. +<P>To explore the PMNS use <B>pminfo</B>(1), or if the PCP GUI package is installed the New Chart and Metric Search windows within <B>pmchart</B>(1). +<P> </P> +<TABLE WIDTH=100% BORDER=0 CELLPADDING=0 CELLSPACING=0 BGCOLOR="#e2e2e2"> + <TR><TD WIDTH=100% BGCOLOR="#081c59"><P ALIGN=LEFT><FONT SIZE=5 COLOR="#ffffff"><B>Performance Metric Specifications</B></FONT></P></TD></TR> +</TABLE> +<P>In configuration files and (to a lesser extent) command line options, metric specifications adhere to the following syntax rules. +<P>If the source of performance metrics is real time from <B>pmcd</B>(1) then the accepted syntax is +<P><I> host:metric[instance1,instance2,...]</I> +<P>If the source of performance metrics is a PCP archive log then the accepted syntax is +<P><I> archive/metric[instance1,instance2,...]</I> +<P>The host:, archive/ and [instance1,instance2,...] components are all optional. +<P>The <B>,</B> delimiter in the list of instance names may be replaced by whitespace. +<P>Special characters in instance names may be escaped by surrounding the name in double quotes or preceding the character with a backslash. +<P>White space is ignored everywhere except within a quoted instance name. +<P>An empty instance is silently ignored, and in particular ‘‘[]’’ is the same as no instance, while ‘‘[one,,,two]’’ is parsed as specifying just the two instances ‘‘one’’ and ‘‘two’’. +<P> </P> +<TABLE WIDTH=100% BORDER=0 CELLPADDING=0 CELLSPACING=0 BGCOLOR="#e2e2e2"> + <TR><TD WIDTH=100% BGCOLOR="#081c59"><P ALIGN=LEFT><FONT SIZE=5 COLOR="#ffffff"><B>PMCD and Archive Versions</B></FONT></P></TD></TR> +</TABLE> +<P>Since PCP version 2, version information has been associated with <B>pmcd</B>(1) and PCP archives. The version number is used in a number of ways, but most noticeably for the distributed pmns(4). In PCP version 1, the client applications would load the PMNS from the default PMNS file but in PCP version 2, the client applications extract the PMNS information from <B>pmcd</B> or a PCP archive. Thus in PCP version 2, the version number is used to determine if the PMNS to use is from the default local file or from the actual current source of the metrics. +<P> </P> +<TABLE WIDTH=100% BORDER=0 CELLPADDING=0 CELLSPACING=0 BGCOLOR="#e2e2e2"> + <TR><TD WIDTH=100% BGCOLOR="#081c59"><P ALIGN=LEFT><FONT SIZE=5 COLOR="#ffffff"><B>Environment</B></FONT></P></TD></TR> +</TABLE> +<P>In addition to the PCP run time environment and configuration variables described in the PCP Environment section below, the following environment variables apply to all installations. +<P> </P> +<TABLE WIDTH=100% BORDER=0 CELLPADDING=0 CELLSPACING=0 BGCOLOR="#e2e2e2"> + <TR><TD WIDTH=25%><P><B>PCP_STDERR</B></P></TD> + <TD><P>Many PCP tools support the environment variable <B>PCP_STDERR</B>, which can be used to control where error messages are sent. When unset, the default behavior is that ‘‘usage’’ messages and option parsing errors are reported on standard error, other messages after initial startup are sent to the default destination for the tool, i.e. standard error for ASCII tools, or a dialog for GUI tools. +<P>If <B>PCP_STDERR</B> is set to the literal value <B>DISPLAY</B> then all messages will be displayed in a dialog. This is used for any tools launched from a Desktop environment. +<P>If <B>PCP_STDERR</B> is set to any other value, the value is assumed to be a filename, and all messages will be written there.</P></TD></TR> + <TR><TD WIDTH=25%><P><B>PMCD_CONNECT_TIMEOUT</B></P></TD> + <TD><P>When attempting to connect to a remote <B>pmcd</B>(1) on a machine that is booting, the connection attempt could potentially block for a long time until the remote machine finishes its initialization. +<P>Most PCP applications and some of the PCP library routines will abort and return an error if the connection has not been established after some specified interval has elapsed. The default interval is 5 seconds. This may be modified by setting <B>PMCD_CONNECT_TIMEOUT</B> in the environment to a real number of seconds for the desired timeout. This is most useful in cases where the remote host is at the end of a slow network, requiring longer latencies to establish the connection correctly.</P></TD></TR> + <TR><TD WIDTH=25%><P><B>PMCD_RECONNECT_TIMEOUT</B></P></TD> + <TD><P>When a monitor or client application loses a connection to a <B>pmcd</B>(1), the connection may be re-established by calling a service routine in the PCP library. However, attempts to reconnect are controlled by a back-off strategy to avoid flooding the network with reconnection requests. By default, the back-off delays are 5, 10, 20, 40 and 80 seconds for consecutive reconnection requests from a client (the last delay will be repeated for any further attempts after the fifth). Setting the environment variable <B>PMCD_RECONNECT_TIMEOUT</B> to a comma separated list of positive integers will re-define the back-off delays, e.g. setting <B>PMCD_RECONNECT_TIMEOUT</B> to ‘‘1,2’’ will back-off for 1 second, then attempt another connection request every 2 seconds thereafter. <P></TD></TR> + <TR><TD WIDTH=25%><P><B>PMCD_WAIT_TIMEOUT</B></P></TD> + <TD><P>When <B>pmcd</B>(1) is started from <I>$PCP_RC_DIR/pcp</I> then the primary instance of <B>pmlogger</B>(1) will be started if the configuration flag pmlogger is <B>chkconfig</B>’ed on and <B>pmcd</B> is running and accepting connections. +<P>The check on <B>pmcd</B>’s readiness will wait up to <B>PMCD_WAIT_TIMEOUT</B> seconds. If pmcd has a long startup time (such as on a very large system), then PMCD_WAIT_TIMEOUT can be set to provide a maximum wait longer than the default 60 seconds.</P></TD></TR> + <TR><TD WIDTH=25%><P><B>PMNS_DEFAULT</B></P></TD> + <TD><P>If set, then this is interpreted as the the full pathname to be used as the default local PMNS for <B>pmLoadNameSpace</B>(3). Otherwise, the default local PMNS is located at <I>$PCP_VAR_DIR/pcp/pmns/root</I> for base PCP installations.</P></TD></TR> + <TR><TD WIDTH=25%><P><B>PCP_COUNTER_WRAP</B></P></TD> + <TD><P>Many of the performance metrics exported from PCP agents have the semantics of <I>counter</I> meaning they are expected to be monotonically increasing. Under some circumstances, one value of these metrics may be less than the previously fetched value. This can happen when a counter of finite precision overflows, or when the PCP agent has been reset or restarted, or when the PCP agent is exporting values from some underlying instrumentation that is subject to some asynchronous discontinuity. +<P>The environment variable <B>PCP_COUNTER_WRAP</B> may be set to indicate that all such cases of a decreasing <I>counter</I> should be treated as a counter overflow, and hence the values are assumed to have wrapped once in the interval between consecutive samples. This ‘‘wrapping’’ behavior was the default in earlier PCP versions, but by default has been disabled in PCP release from version 1.3 on.</P></TD></TR> + <TR><TD WIDTH=25%><P><B>PMDA_PATH</B></P></TD> + <TD><P>The <B>PMDA_PATH</B> environment variable may be used to modify the search path used by <B>pmcd</B>(1) and <B>pmNewContext</B>(3) (for PM_CONTEXT_LOCAL contexts) when searching for a daemon or DSO PMDA. The syntax follows that for <B>PATH</B> in <B>sh</B>(1), i.e. a colon separated list of directories, and the default search path is ‘‘/var/pcp/lib:/usr/pcp/lib’’, (or ‘‘/var/lib/pcp/lib’’ on Linux, depending on the value of the $PCP_VAR_DIR environment variable).</P></TD></TR> + <TR><TD WIDTH=25%><P><B>PMCD_PORT</B></P></TD> + <TD><P>The TPC/IP port(s) used by <B>pmcd</B>(1) to create the socket for incoming connections and requests, was historically 4321 and more recently the officially registered port 44321; in the current release, both port numbers are used by default as a transitional arrangement. This may be over-ridden by setting PMCD_PORT to a different port number, or a comma-separated list of port numbers. If a non-default port is used when <B>pmcd</B>(1) is started, then every monitoring application connecting to that <B>pmcd</B>(1) must also have <B>PMCD_PORT</B> set in their environment before attempting a connection.</P></TD></TR> +</TABLE> +<P>The following environment variables are relevant to installations in which <B>pmlogger</B>(1), the PCP archive logger, is used. +<P> </P> +<TABLE WIDTH=100% BORDER=0 CELLPADDING=0 CELLSPACING=0 BGCOLOR="#e2e2e2"> + <TR><TD WIDTH=25%><P><B>PMLOGGER_PORT</B></P></TD> + <TD><P>The environment variable <B>PMLOGGER_PORT</B> may be used to change the base TCP/IP port number used by <B>pmlogger</B>(1) to create the socket to which <B>pmlc</B>(1) instances will try and connect. The default base port number is 4330. When used, <B>PMLOGGER_PORT</B> should be set in the environment before <B>pmlogger</B>(1) is executed.</P></TD></TR> +</TABLE> +<P>If you have the PCP package installed, then the following environment variables are relevant to the Performance Metrics Domain Agents (PMDAs). +<P> </P> +<TABLE WIDTH=100% BORDER=0 CELLPADDING=0 CELLSPACING=0 BGCOLOR="#e2e2e2"> + <TR><TD WIDTH=25%><P><B>PMDA_LOCAL_PROC</B></P></TD> + <TD><P>If set, then a context established with the type of <B>PM_CONTEXT_LOCAL</B> will have access to the ‘‘proc’’ PMDA to retrieve performance metrics about individual processes.</P></TD></TR> + <TR><TD WIDTH=25%><P><B>PMDA_LOCAL_SAMPLE</B></P></TD> + <TD><P>If set, then a context established with the type of PM_CONTEXT_LOCAL will have access to the ‘‘sample’’ PMDA if this optional PMDA has been installed locally.</P></TD></TR> + <TR><TD WIDTH=25%><P><B>PMIECONF_PATH</B></P></TD> + <TD><P>If set, <B>pmieconf</B>(1) will form its <B>pmieconf</B>(4) specification (set of parameterized <B>pmie</B>(1) rules) using all valid <B>pmieconf</B> files found below each subdirectory in this colon-separated list of subdirectories. If not set, the default is $PCP_VAR_DIR/config/pmieconf.</P></TD></TR> +</TABLE> +<P> </P> +<TABLE WIDTH=100% BORDER=0 CELLPADDING=0 CELLSPACING=0 BGCOLOR="#e2e2e2"> + <TR><TD WIDTH=100% BGCOLOR="#081c59"><P ALIGN=LEFT><FONT SIZE=5 COLOR="#ffffff"><B>Files</B></FONT></P></TD></TR> +</TABLE> +<P> </P> +<TABLE WIDTH=100% BORDER=0 CELLPADDING=0 CELLSPACING=0 BGCOLOR="#e2e2e2"> + <TR><TD WIDTH=25%><P><B>/etc/pcp.conf</B></P></TD> + <TD><P>Configuration file for the PCP runtime environment, see <B>pcp.conf</B>(4).</P></TD></TR> + <TR><TD WIDTH=25%><P><B>$PCP_RC_DIR/pcp</B></P></TD> + <TD><P>Script for starting and stopping <B>pmcd</B>(1).</P></TD></TR> + <TR><TD WIDTH=25%><P><B>$PCP_PMCDCONF_PATH</B></P></TD> + <TD><P>Control file for <B>pmcd</B>(1).</P></TD></TR> + <TR><TD WIDTH=25%><P><B>$PCP_PMCDOPTIONS_PATH</B></P></TD> + <TD><P>Command line options passed to <B>pmcd</B>(1) when it is started from <B>$PCP_RC_DIR/pcp</B>. All the command line option lines should start with a hyphen as the first character. This file can also contain environment variable settings of the form "VARIABLE=value". +</P></TD></TR> + <TR><TD WIDTH=25%><P><B>$PCP_BINADM_DIR</B></P></TD> + <TD><P>Location of PCP utilities for collecting and maintaining PCP archives, PMDA help text, PMNS files etc.</P></TD></TR> + <TR><TD WIDTH=25%><P><B>$PCP_PMDAS_DIR</B></P></TD> + <TD><P>Parent directory of the installation directory for Dynamic Shared Object (DSO) PMDAs.</P></TD></TR> + <TR><TD WIDTH=25%><P><B>$PCP_RUN_DIR/pmcd.pid</B></P></TD> + <TD><P>If pmcd is running, this file contains an ascii decimal representation of its process ID.</P></TD></TR> + <TR><TD WIDTH=25%><P><B>$PCP_LOG_DIR/pmcd</B></P></TD> + <TD><P>Default location of log files for <B>pmcd</B>(1), current directory for running PMDAs. Archives generated by <B>pmlogger</B>(1) are generally below <B>$PCP_LOG_DIR/pmlogger</B>.</P></TD></TR> + <TR><TD WIDTH=25%><P><B>$PCP_LOG_DIR/pmcd/pmcd.log</B></P></TD> + <TD><P>Diagnostic and status log for the current running <B>pmcd</B>(1) process. The first place to look when there are problems associated with <B>pmcd</B>.</P></TD></TR> + <TR><TD WIDTH=25%><P><B>$PCP_LOG_DIR/pmcd/pmcd.log.prev</B></P></TD> + <TD><P>Diagnostic and status log for the previous <B>pmcd</B>(1) instance.</P></TD></TR> + <TR><TD WIDTH=25%><P><B>$PCP_LOG_DIR/NOTICES</B></P></TD> + <TD><P>Log of <B>pmcd</B>(1) and PMDA starts, stops, additions and removals.</P></TD></TR> + <TR><TD WIDTH=25%><P><B>$PCP_VAR_DIR/config</B></P></TD> + <TD><P>Contains directories of configuration files for several PCP tools.</P></TD></TR> + <TR><TD WIDTH=25%><P><B>$PCP_VAR_DIR/config/pmcd/rc.local</B></P></TD> + <TD><P>Local script for controlling PCP boot, shutdown and restart actions.</P></TD></TR> + <TR><TD WIDTH=25%><P><B>$PCP_VAR_DIR/pmns/root</B></P></TD> + <TD><P>The ASCII <B>$PCP_LOG_DIR/NOTICES/pmns</B>(4) exported by <B>pmcd</B>(1) by default. This PMNS is be the super set of all other PMNS files installed in <B>$PCP_VAR_DIR/pmns</B>.</P></TD></TR> + <TR><TD WIDTH=25%><P><B>$PCP_LOG_DIR/NOTICES</B></P></TD> + <TD><P>In addition to the <B>pmcd</B>(1) and PMDA activity, may be used to log alarms and notices from <B>pmie</B>(1) via <B>pmpost</B>(1). </P></TD></TR> + <TR><TD WIDTH=25%><P><B>$PCP_VAR_DIR/config/pmlogger/control</B></P></TD> + <TD><P>Control file for <B>pmlogger</B>(1) instances launched from <B>$PCP_RC_DIR/pcp</B> and/or managed by <B>pmlogger_check</B>(1) and <B>pmlogger_daily</B>(1) as part of a production PCP archive collection setup.</P></TD></TR> +</TABLE> +<P> </P> +<TABLE WIDTH=100% BORDER=0 CELLPADDING=0 CELLSPACING=0 BGCOLOR="#e2e2e2"> + <TR><TD WIDTH=100% BGCOLOR="#081c59"><P ALIGN=LEFT><FONT SIZE=5 COLOR="#ffffff"><B>PCP Environment</B></FONT></P></TD></TR> +</TABLE> +<P>Environment variables with the prefix PCP_ are used to parameterize the file and directory names used by PCP. On each installation, the file <B>/etc/pcp.conf</B> contains the local values for these variables. The <B>$PCP_CONF</B> variable may be used to specify an alternative configuration file, as described in <B>pcp.conf</B>(4). +<HR> +<CENTER> +<TABLE WIDTH=100% BORDER=0 CELLPADDING=0 CELLSPACING=0> + <TR> <TD WIDTH=50%><P>Copyright © 2007-2010 <A HREF="http://www.aconex.com/"><FONT COLOR="#000060">Aconex</FONT></A><BR>Copyright © 2000-2004 <A HREF="http://www.sgi.com/"><FONT COLOR="#000060">Silicon Graphics Inc</FONT></P></TD> + <TD WIDTH=50%><P ALIGN=RIGHT><A HREF="http://pcp.io/"><FONT COLOR="#000060">PCP Site</FONT></A><BR>Copyright © 2012-2014 <A HREF="http://www.redhat.com/"><FONT COLOR="#000060">Red Hat</FONT></P></TD> </TR> +</TABLE> +</CENTER> +</BODY> +</HTML> diff --git a/man/html/pmchart.html b/man/html/pmchart.html new file mode 100644 index 0000000..76c1a07 --- /dev/null +++ b/man/html/pmchart.html @@ -0,0 +1,34 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> +<HTML> +<HEAD> + <meta http-equiv="content-type" content="text/html; charset=utf-8"> + <meta http-equiv="content-style-type" content="text/css"> + <link href="pcpdoc.css" rel="stylesheet" type="text/css"> + <link href="images/pcp.ico" rel="icon" type="image/ico"> + <TITLE>PCP Charts</TITLE> +</HEAD> +<BODY LANG="en-AU" TEXT="#000060" DIR="LTR"> +<TABLE WIDTH=100% BORDER=0 CELLPADDING=0 CELLSPACING=0 STYLE="page-break-before: always"> + <TR> <TD WIDTH=64 HEIGHT=64><A HREF="http://pcp.io/"><IMG SRC="images/pmcharticon.png" NAME="pmcharticon" ALIGN=TOP WIDTH=64 HEIGHT=64 BORDER=0></A></TD> + <TD WIDTH=1><P> </P></TD> + <TD WIDTH=500><P VALIGN=MIDDLE ALIGN=LEFT><A HREF="index.html"><FONT COLOR="#cc0000">Home</FONT></A> · <A HREF="lab.pmchart.html"><FONT COLOR="#cc0000">Charts</FONT></A> · <A HREF="timecontrol.html"><FONT COLOR="#cc0000">Time Control</FONT></A></P></TD> + </TR> +</TABLE> +<H1 ALIGN=CENTER STYLE="margin-top: 0.48cm; margin-bottom: 0.32cm"><FONT SIZE=7>Notes for pmchart users</FONT></H1> +<P>Users of the original SGI pmchart utility will be immediately at home with the new pmchart. This page discusses two areas where differences are more likely to be noticed by people familiar with pmchart. +<h2>Configuration file syntax</h2> +<P>pmchart provides the ability to parse and interpret all versions of the original SGI pmchart configuration file language (i.e. versions 1, 1.1, 1.2 and 2.0. In addition, the new pmchart provides it's own configuration file syntax extensions, which both addresses some of the quirkier aspects of the original pmchart language and provides support for features specific to pmchart (Legend Labels and Tabs, for example). +<P>Refer to the discussion of pmchart <A HREF="views.html">Views</A> for a detailed description of the configuration language. +<P>Finally, while pmchart will read all versions of configuration files, it does not implement support for writing the older formats - only the latest format is written during a View save operation. +<H2>User interface changes</H2> +<P>While every effort has been made to keep all of the excellent features of the original user interface, pmchart now provides support for several new user interface advances above and beyond those features of the original tool. +<P><BR></P> +<HR> +<CENTER> +<TABLE WIDTH=100% BORDER=0 CELLPADDING=0 CELLSPACING=0> + <TR> <TD WIDTH=50%><P>Copyright © 2007-2010 <A HREF="http://www.aconex.com/"><FONT COLOR="#000060">Aconex</FONT></A><BR>Copyright © 2000-2004 <A HREF="http://www.sgi.com/"><FONT COLOR="#000060">Silicon Graphics Inc</FONT></P></TD> + <TD WIDTH=50%><P ALIGN=RIGHT><A HREF="http://pcp.io/"><FONT COLOR="#000060">PCP Site</FONT></A><BR>Copyright © 2012-2014 <A HREF="http://www.redhat.com/"><FONT COLOR="#000060">Red Hat</FONT></P></TD> </TR> +</TABLE> +</CENTER> +</BODY> +</HTML> diff --git a/man/html/pmie/GNUmakefile b/man/html/pmie/GNUmakefile new file mode 100644 index 0000000..07336fa --- /dev/null +++ b/man/html/pmie/GNUmakefile @@ -0,0 +1,31 @@ +TOPDIR = ../../.. +include $(TOPDIR)/src/include/builddefs + +BUNDLE = pmie +BINTAR = $(BUNDLE).tar.gz +PCPLOGS = $(shell echo *.0 *.meta *.index) +CONFIGS = pswitch.view pswitch.pmie disk.pmie answer.pmie +LSRCFILES = $(PCPLOGS) $(CONFIGS) +LDIRT = $(BINTAR) manifest + +default: $(BINTAR) + +$(BINTAR): $(PCPLOGS) $(CONFIGS) + @ CDIR=`pwd`; cd ..; rm -f manifest; \ + for f in `echo $^`; do \ + echo $(BUNDLE)/$$f >> $$CDIR/manifest; \ + done; \ + $(TAR) -T $$CDIR/manifest -cf - | $(ZIP) --best > $$CDIR/$(BINTAR); \ + echo "Created $(BINTAR)" + +include $(BUILDRULES) + +install install-dev: default + $(INSTALL) -m 755 -d $(PCP_DEMOS_DIR)/tutorials + $(INSTALL) -m 644 $(BINTAR) $(PCP_DEMOS_DIR)/tutorials/$(BINTAR) + $(INSTALL) -m 755 -d $(PCP_BOOKS_DIR)/html/$(BUNDLE) + $(INSTALL) -m 644 $(CONFIGS) $(PCP_BOOKS_DIR)/html/$(BUNDLE) + +default_pcp : default + +install_pcp : install diff --git a/man/html/pmie/answer.pmie b/man/html/pmie/answer.pmie new file mode 100644 index 0000000..013d25a --- /dev/null +++ b/man/html/pmie/answer.pmie @@ -0,0 +1,23 @@ +// +// solution for the pmie tutorial +// + +// show any disk doing more than 50 I/Os per second +some_inst ( disk.dev.total > 50 ) -> print "high IOPs:" " %i: %v"; + +// some disk is doing more than 30 reads per second +some_inst ( disk.dev.read > 30 ) -> print "busy reads:" " %i: %v"; + +// some disk is doing more than 30 writes per second +some_inst ( disk.dev.write > 30 ) -> print "busy writes:" " %i: %v"; + +// some disk has a high I/O rate and more than 95% reads +some_inst ( disk.dev.total > 40 && + disk.dev.read / disk.dev.total > 0.95 ) +-> print "busy disk and >95% writes"; + +// some disk has a high I/O rate and 1 minute load average is +// greater than 5 +kernel.all.load #'1 minute' > 5 && +some_inst ( disk.dev.total > 40 ) +-> print "busy disk and high load avg"; diff --git a/man/html/pmie/babylon.perdisk.0 b/man/html/pmie/babylon.perdisk.0 Binary files differnew file mode 100644 index 0000000..7a1f26f --- /dev/null +++ b/man/html/pmie/babylon.perdisk.0 diff --git a/man/html/pmie/babylon.perdisk.index b/man/html/pmie/babylon.perdisk.index Binary files differnew file mode 100644 index 0000000..72b4af9 --- /dev/null +++ b/man/html/pmie/babylon.perdisk.index diff --git a/man/html/pmie/babylon.perdisk.meta b/man/html/pmie/babylon.perdisk.meta Binary files differnew file mode 100644 index 0000000..6004327 --- /dev/null +++ b/man/html/pmie/babylon.perdisk.meta diff --git a/man/html/pmie/disk.pmie b/man/html/pmie/disk.pmie new file mode 100644 index 0000000..3a15780 --- /dev/null +++ b/man/html/pmie/disk.pmie @@ -0,0 +1,7 @@ +// +// pmie configuration file starting point for the pmie lab +// + +// show any disk doing more than 40 I/Os per second +some_inst ( disk.dev.total > 40 ) -> print "busy IOPs:" " %i: %v"; + diff --git a/man/html/pmie/pswitch.pmie b/man/html/pmie/pswitch.pmie new file mode 100644 index 0000000..34c706a --- /dev/null +++ b/man/html/pmie/pswitch.pmie @@ -0,0 +1,5 @@ +// Sample interval +delta = 5 sec; + +// If context switch rate exceeds 2000 per second, display an alarm notifier. +kernel.all.pswitch > 2000 count/sec -> alarm "high context switch rate"; diff --git a/man/html/pmie/pswitch.view b/man/html/pmie/pswitch.view new file mode 100644 index 0000000..1e6f9d5 --- /dev/null +++ b/man/html/pmie/pswitch.view @@ -0,0 +1,14 @@ +#kmchart +version 1 + +chart title "CPU Utilization" style utilization + plot legend "User" color #2d2de2 metric kernel.all.cpu.user + plot legend "Kernel" color #e71717 metric kernel.all.cpu.sys + optional-plot legend "Nice" color #c2f3c2 metric kernel.all.cpu.nice + optional-plot legend "Intr" color #cdcd00 metric kernel.all.cpu.intr + optional-plot legend "Wait" color #00cdcd metric kernel.all.cpu.wait.total + optional-plot legend "Steal" color #fba2f5 metric kernel.all.cpu.steal + plot legend "Idle" color #16d816 metric kernel.all.cpu.idle + +chart title "Context Switch Rate" style plot + plot color yellow metric kernel.all.pswitch diff --git a/man/html/pmview/GNUmakefile b/man/html/pmview/GNUmakefile new file mode 100644 index 0000000..f33a089 --- /dev/null +++ b/man/html/pmview/GNUmakefile @@ -0,0 +1,31 @@ +TOPDIR = ../../.. +include $(TOPDIR)/src/include/builddefs + +BUNDLE = pmview +BINTAR = $(BUNDLE).tar.gz +PCPLOGS = $(shell echo *.0 *.meta *.index) +CONFIGS = godzilla.web.view godzilla.web.folio example.view +LSRCFILES = $(PCPLOGS) $(CONFIGS) +LDIRT = $(BINTAR) manifest + +default: $(BINTAR) + +$(BINTAR): $(PCPLOGS) $(CONFIGS) + @ CDIR=`pwd`; cd ..; rm -f manifest; \ + for f in `echo $^`; do \ + echo $(BUNDLE)/$$f >> $$CDIR/manifest; \ + done; \ + $(TAR) -T $$CDIR/manifest -cf - | $(ZIP) --best > $$CDIR/$(BINTAR); \ + echo "Created $(BINTAR)" + +include $(BUILDRULES) + +install install-dev: default + $(INSTALL) -m 755 -d $(PCP_DEMOS_DIR)/tutorials + $(INSTALL) -m 644 $(BINTAR) $(PCP_DEMOS_DIR)/tutorials/$(BINTAR) + $(INSTALL) -m 755 -d $(PCP_BOOKS_DIR)/html/$(BUNDLE) + $(INSTALL) -m 644 $(CONFIGS) $(PCP_BOOKS_DIR)/html/$(BUNDLE) + +default_pcp : default + +install_pcp : install diff --git a/man/html/pmview/example.view b/man/html/pmview/example.view new file mode 100644 index 0000000..2f61785 --- /dev/null +++ b/man/html/pmview/example.view @@ -0,0 +1,38 @@ +pmview Version 2.1 +# +# pmview configuration used as a starting point in the pmview exercises. +# + +_colorlist ctrl_colors ( green2 ) + +_grid hide ( + _label 0 1 _down _large "Disk" + + _bar 1 1 _west ( + _metrics ( + disk.all.read 100 + ) + _colorlist ctrl_colors + _baseLabel "Disk Reads\nNormalized to 100 reads/second" + ) + + _bar 2 1 _west ( + _metrics ( + disk.all.write 100 + ) + _colorlist ctrl_colors + _baseLabel "Disk Writes\nNormalized to 100 writes/second" + ) + + _label 0 3 _west _down _large "Load" + _bar 1 3 2 1 _west ( + _metrics ( + kernel.all.load[15] 2 + kernel.all.load[5] 2 + kernel.all.load[1] 2 + ) + _metriclabels _away ( "15" "5" "1" ) + _colorlist ( blue2 blue2 blue2 ) + _baseLabel "Average System Load over the last 1, 5, and 15 minutes\nNormalized to 2" + ) +) diff --git a/man/html/pmview/godzilla.disk.0 b/man/html/pmview/godzilla.disk.0 Binary files differnew file mode 100644 index 0000000..d06d4e8 --- /dev/null +++ b/man/html/pmview/godzilla.disk.0 diff --git a/man/html/pmview/godzilla.disk.index b/man/html/pmview/godzilla.disk.index Binary files differnew file mode 100644 index 0000000..053a3ee --- /dev/null +++ b/man/html/pmview/godzilla.disk.index diff --git a/man/html/pmview/godzilla.disk.meta b/man/html/pmview/godzilla.disk.meta Binary files differnew file mode 100644 index 0000000..4f7d1da --- /dev/null +++ b/man/html/pmview/godzilla.disk.meta diff --git a/man/html/pmview/godzilla.web.0 b/man/html/pmview/godzilla.web.0 Binary files differnew file mode 100644 index 0000000..3a9467b --- /dev/null +++ b/man/html/pmview/godzilla.web.0 diff --git a/man/html/pmview/godzilla.web.folio b/man/html/pmview/godzilla.web.folio new file mode 100644 index 0000000..5d12e2a --- /dev/null +++ b/man/html/pmview/godzilla.web.folio @@ -0,0 +1,9 @@ +PCPFolio +Version: 1 +# +# use pmafm(1) to process this PCP Archive Folio +# +Created: on godzilla at Mon Mar 26 17:11:33 2001 +Creator: pmview godzilla.web.view +# Host Basename +Archive: godzilla godzilla.web diff --git a/man/html/pmview/godzilla.web.index b/man/html/pmview/godzilla.web.index Binary files differnew file mode 100644 index 0000000..178700e --- /dev/null +++ b/man/html/pmview/godzilla.web.index diff --git a/man/html/pmview/godzilla.web.meta b/man/html/pmview/godzilla.web.meta Binary files differnew file mode 100644 index 0000000..0d7dee9 --- /dev/null +++ b/man/html/pmview/godzilla.web.meta diff --git a/man/html/pmview/godzilla.web.view b/man/html/pmview/godzilla.web.view new file mode 100644 index 0000000..652e3b9 --- /dev/null +++ b/man/html/pmview/godzilla.web.view @@ -0,0 +1,240 @@ +pmview Version 2.1 "webvis" + +_stackLength 26 +_marginWidth 8 +_marginDepth 8 + +_colorList cpu_colors ( blue2 red2 yellow2 cyan2 ) +_colorList disk_colors ( violet yellow ) +_colorList memory_colors ( + rgbi:1.0/1.0/0.0 + rgbi:0.0/1.0/1.0 + rgbi:1.0/0.0/0.0 + rgbi:1.0/0.0/1.0 + rgbi:0.0/0.0/1.0 + rgbi:0.0/1.0/0.0 +) +_colorList network_colors ( + rgbi:0.8/0.0/0.0 + rgbi:1.0/0.5/0.0 + rgbi:0.0/0.8/0.0 +) +_colorList type_colors ( + rgbi:0.8/0.0/0.0 + rgbi:1.0/1.0/0.6 + rgbi:1.0/0.0/1.0 + rgbi:0.0/1.0/1.0 + rgbi:1.0/1.0/0.0 +) + +_colorList size_colors ( + rgbi:1.0/0.35/0.0 + rgbi:0.6/0.0/0.9 + rgbi:0.0/1.0/0.0 + rgbi:1.0/0.5/0.0 + rgbi:0.65/0.3/1.0 + rgbi:0.3/1.0/0.3 + rgbi:1.0/0.65/0.3 + rgbi:0.8/0.6/1.0 + rgbi:0.6/1.0/0.6 + rgbi:1.0/0.8/0.6 +) + +_grid _hide ( + _grid 1 0 6 2 south _hide ( + _bar 0 1 6 1 west _row _groupbyrow ( + _metrics ( + network.tcp.drops 7 + network.tcp.conndrops 7 + network.tcp.timeoutdrop 7 + network.tcp.rcvbadsum 7 + network.tcp.rexmttimeo 7 + network.tcp.sndrexmitpack 7 + ) + _colorList ( + red1 red1 red1 red1 red1 red1 + ) + _baseLabel "TCP metrics which may indicate a problem\nNormalized to 7 events per second" + ) + _bar 0 0 3 1 west _row _groupbyrow ( + _metrics ( + swap.pagesout 7 + network.mbuf.failed 7 + network.mbuf.waited 7 + ) + _colorList ( + yellow rgbi:1.0/0.5/0.0 rgbi:1.0/0.5/0.0 + ) + _baseLabel "Memory metrics which may indicate a problem\nNormalized to 7 events per second" + ) + _label 3 0 west _right _medium "Alarms" + ) + + _bar 0 1 1 10 south _groupbycol ( + _metrics ( + web.allservers.requests.size.unknown 37 + web.allservers.requests.size.gt3m 37 + web.allservers.requests.size.le3m 37 + web.allservers.requests.size.le1m 37 + web.allservers.requests.size.le300k 37 + web.allservers.requests.size.le100k 37 + web.allservers.requests.size.le30k 37 + web.allservers.requests.size.le10k 37 + web.allservers.requests.size.le3k 37 + web.allservers.requests.size.zero 37 + ) + _metriclabels _towards ( + "?" ">3M" "3M" "1M" "300k" + "100k" "30k" "10k" "3k" "0k" + ) + _colorList size_colors + _baseLabel "HTTP request rate by response size in bytes\nNormalized to 37 hits per second" + ) + + _label 0 11 northeast _right _medium "Size" + + _bar 1 6 1 5 south _groupbycol ( + _metrics ( + web.allservers.errors 7 + web.allservers.requests.other 37 + web.allservers.requests.post 37 + web.allservers.requests.head 37 + web.allservers.requests.get 37 + ) + _colorList type_colors + _baseLabel "HTTP request rate by HTTP method\nNormalized to 37 hits per second" + ) + + _label 1 11 north _right _medium "Type" + + _grid 1 3 5 3 southwest ( + _stack 0 0 ( + _metrics ( + kernel.all.cpu.user 1000 + kernel.all.cpu.sys 1000 + kernel.all.cpu.intr 1000 + kernel.all.cpu.wait.total 1000 + ) + _colorList cpu_colors + _baseLabel "CPU Utilization\nSummed over 1 CPU" + ) + _label 0 1 north _right _medium "CPU" + +_marginWidth 4 +_marginDepth 4 +_baseHeight 4 + + _grid 1 0 2 1 _show ( +_baseColor rgbi:0.30/0.30/0.30 + _stack 0 0 south _cylinder ( + _metrics ( + disk.all.write 100 + disk.all.read 100 + ) + _colorList disk_colors + _baseLabel "Read and Write activity for all Disks\nNormalized to 100 I/Os per second" + ) + _bar 1 0 _cylinder ( + _metrics ( + disk.all.avg_disk.active 300 + ) + _colorList ( green2 ) + _baseLabel "Average Disk Utilization\nNormalized to 30% across 2 disks" + ) +_baseColor rgbi:0.15/0.15/0.15 + ) + _label 1 1 2 1 north _medium "Disk" + + _grid 3 0 2 1 _show ( +_baseColor rgbi:0.30/0.30/0.30 + _stack 0 0 ( + _metrics ( + mem.freemem 98304 + ) + _colorList ( rgbi:0.0/0.8/0.0 ) + _baseLabel "Free memory" + ) + + _stack 1 0 ( + _metrics ( + mem.util.kernel 98304 + mem.util.fs_ctl 98304 + mem.util.fs_dirty 98304 + mem.util.fs_clean 98304 + mem.util.user 98304 + ) + _colorList memory_colors + _baseLabel "Physical Memory Utilization\nNormalized to 98304 Kbytes" + ) +_baseColor rgbi:0.15/0.15/0.15 + ) + _label 3 1 2 1 north _medium "Mem" + +_marginWidth 8 +_marginDepth 8 +_baseHeight 2 + ) + + _grid 2 6 4 5 south _hide ( + _grid 0 0 1 2 west _hide ( + _label 0 0 east _right _medium "In" + _label 0 1 east _right _medium "Out" + ) +_marginWidth 4 +_marginDepth 4 +_baseHeight 4 + + _grid 1 0 2 2 _show ( +_baseColor rgbi:0.30/0.30/0.30 + + + _stack 0 0 ( + _metrics ( + network.interface.in.errors[ec0] 7 + network.interface.in.drops[ec0] 7 + network.interface.in.packets[ec0] 750 + ) + _colorList network_colors + _baseLabel "Input and Output on Network Interfaces\nPackets are normalized to 750 packets per second" + ) + _stack 0 1 ( + _metrics ( + network.interface.out.errors[ec0] 7 + network.interface.out.drops[ec0] 7 + network.interface.out.packets[ec0] 750 + ) + _colorList network_colors + _baseLabel "Input and Output on Network Interfaces\nPackets are normalized to 750 packets per second" + ) + + _stack 1 0 ( + _metrics ( + network.interface.in.errors[lo0] 7 + network.interface.in.drops[lo0] 7 + network.interface.in.packets[lo0] 750 + ) + _colorList network_colors + _baseLabel "Input and Output on Network Interfaces\nPackets are normalized to 750 packets per second" + ) + _stack 1 1 ( + _metrics ( + network.interface.out.errors[lo0] 7 + network.interface.out.drops[lo0] 7 + network.interface.out.packets[lo0] 750 + ) + _colorList network_colors + _baseLabel "Input and Output on Network Interfaces\nPackets are normalized to 750 packets per second" + ) + _baseLabel "Input and Output on Network Interfaces\nPackets are normalized to 750 packets per second" +_baseColor rgbi:0.15/0.15/0.15 + ) +_marginWidth 8 +_marginDepth 8 +_baseHeight 2 + _grid 1 2 2 2 _hide ( + _label 0 0 north _down _medium "ec0" + _label 1 0 north _down _medium "lo0" + ) + ) + _label 3 11 northwest _right _medium "Network" +) diff --git a/man/html/qwtlicense.html b/man/html/qwtlicense.html new file mode 100644 index 0000000..088b162 --- /dev/null +++ b/man/html/qwtlicense.html @@ -0,0 +1,572 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> +<HTML> +<HEAD> + <meta http-equiv="content-type" content="text/html; charset=utf-8"> + <meta http-equiv="content-style-type" content="text/css"> + <link href="pcpdoc.css" rel="stylesheet" type="text/css"> + <link href="images/pcp.ico" rel="icon" type="image/ico"> + <TITLE>PCP Manual</TITLE> +</HEAD> +<BODY LANG="en-AU" TEXT="#000060" DIR="LTR"> +<TABLE WIDTH=100% BORDER=0 CELLPADDING=0 CELLSPACING=0 STYLE="page-break-before: always"> + <TR> <TD WIDTH=64 HEIGHT=64><A HREF="http://pcp.io/"><IMG SRC="images/pmcharticon.png" NAME="pmcharticon" ALIGN=TOP WIDTH=64 HEIGHT=64 BORDER=0></A></TD> + <TD WIDTH=1><P> </P></TD> + <TD WIDTH=500><P VALIGN=MIDDLE ALIGN=LEFT><A HREF="index.html"><FONT COLOR="#cc0000">Home</FONT></A> · <A HREF="lab.pmchart.html"><FONT COLOR="#cc0000">Charts</FONT></A> · <A HREF="timecontrol.html"><FONT COLOR="#cc0000">Time Control</FONT></A></P></TD> + </TR> +</TABLE> +<H1 ALIGN=CENTER STYLE="margin-top: 0.48cm; margin-bottom: 0.32cm"><FONT SIZE=7>QWT License (and LGPL)</FONT></H1> +<P>The <i>pmchart</i> and <i>pmtime</i> utilities makes extensive use of the <I>Qt Widgets for Technical applications</I> (QWT) library. QWT is Copyright (C) 1997 Josef Wilgen and Copyright (C) 2002 Uwe Rathman.</p> +<P>You may use, distribute and copy QWT under the terms of the QWT License version 1, which is displayed below.</P> + +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> Qwt License </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> Version 1.0, January 1, 2003 </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> The Qwt library and included programs are provided under the terms </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> of the GNU LESSER GENERAL PUBLIC LICENSE (LGPL) with the following </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> exceptions: </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> 1. Widgets that are subclassed from Qwt widgets do not </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> constitute a derivative work. </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> 2. Static linking of applications and widgets to the </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> Qwt library does not constitute a derivative work </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> and does not require the author to provide source </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> code for the application or widget, use the shared </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> Qwt libraries, or link their applications or </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> widgets against a user-supplied version of Qwt. </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> If you link the application or widget to a modified </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> version of Qwt, then the changes to Qwt must be </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> provided under the terms of the LGPL in sections </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> 1, 2, and 4. </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> 3. You do not have to provide a copy of the Qwt license </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> with programs that are linked to the Qwt library, nor </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> do you have to identify the Qwt license in your </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> program or documentation as required by section 6 </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> of the LGPL. </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> However, programs must still identify their use of Qwt. </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> The following example statement can be included in user </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> documentation to satisfy this requirement: </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> [program/widget] is based in part on the work of </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> the Qwt project (http://qwt.sf.net). </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> ---------------------------------------------------------------------- </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> GNU LESSER GENERAL PUBLIC LICENSE </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> Version 2.1, February 1999 </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> Copyright (C) 1991, 1999 Free Software Foundation, Inc. </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> Everyone is permitted to copy and distribute verbatim copies </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> of this license document, but changing it is not allowed. </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> [This is the first released version of the Lesser GPL. It also counts </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> as the successor of the GNU Library Public License, version 2, hence </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> the version number 2.1.] </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> Preamble </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> The licenses for most software are designed to take away your </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> freedom to share and change it. By contrast, the GNU General Public </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> Licenses are intended to guarantee your freedom to share and change </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> free software--to make sure the software is free for all its users. </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> This license, the Lesser General Public License, applies to some </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> specially designated software packages--typically libraries--of the </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> Free Software Foundation and other authors who decide to use it. You </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> can use it too, but we suggest you first think carefully about whether </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> this license or the ordinary General Public License is the better </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> strategy to use in any particular case, based on the explanations below. </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> When we speak of free software, we are referring to freedom of use, </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> not price. Our General Public Licenses are designed to make sure that </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> you have the freedom to distribute copies of free software (and charge </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> for this service if you wish); that you receive source code or can get </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> it if you want it; that you can change the software and use pieces of </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> it in new free programs; and that you are informed that you can do </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> these things. </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> To protect your rights, we need to make restrictions that forbid </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> distributors to deny you these rights or to ask you to surrender these </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> rights. These restrictions translate to certain responsibilities for </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> you if you distribute copies of the library or if you modify it. </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> For example, if you distribute copies of the library, whether gratis </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> or for a fee, you must give the recipients all the rights that we gave </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> you. You must make sure that they, too, receive or can get the source </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> code. If you link other code with the library, you must provide </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> complete object files to the recipients, so that they can relink them </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> with the library after making changes to the library and recompiling </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> it. And you must show them these terms so they know their rights. </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> We protect your rights with a two-step method: (1) we copyright the </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> library, and (2) we offer you this license, which gives you legal </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> permission to copy, distribute and/or modify the library. </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> To protect each distributor, we want to make it very clear that </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> there is no warranty for the free library. Also, if the library is </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> modified by someone else and passed on, the recipients should know </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> that what they have is not the original version, so that the original </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> author's reputation will not be affected by problems that might be </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> introduced by others. </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> Finally, software patents pose a constant threat to the existence of </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> any free program. We wish to make sure that a company cannot </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> effectively restrict the users of a free program by obtaining a </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> restrictive license from a patent holder. Therefore, we insist that </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> any patent license obtained for a version of the library must be </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> consistent with the full freedom of use specified in this license. </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> Most GNU software, including some libraries, is covered by the </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> ordinary GNU General Public License. This license, the GNU Lesser </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> General Public License, applies to certain designated libraries, and </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> is quite different from the ordinary General Public License. We use </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> this license for certain libraries in order to permit linking those </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> libraries into non-free programs. </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> When a program is linked with a library, whether statically or using </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> a shared library, the combination of the two is legally speaking a </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> combined work, a derivative of the original library. The ordinary </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> General Public License therefore permits such linking only if the </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> entire combination fits its criteria of freedom. The Lesser General </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> Public License permits more lax criteria for linking other code with </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> the library. </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> We call this license the "Lesser" General Public License because it </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> does Less to protect the user's freedom than the ordinary General </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> Public License. It also provides other free software developers Less </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> of an advantage over competing non-free programs. These disadvantages </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> are the reason we use the ordinary General Public License for many </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> libraries. However, the Lesser license provides advantages in certain </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> special circumstances. </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> For example, on rare occasions, there may be a special need to </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> encourage the widest possible use of a certain library, so that it becomes </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> a de-facto standard. To achieve this, non-free programs must be </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> allowed to use the library. A more frequent case is that a free </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> library does the same job as widely used non-free libraries. In this </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> case, there is little to gain by limiting the free library to free </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> software only, so we use the Lesser General Public License. </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> In other cases, permission to use a particular library in non-free </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> programs enables a greater number of people to use a large body of </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> free software. For example, permission to use the GNU C Library in </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> non-free programs enables many more people to use the whole GNU </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> operating system, as well as its variant, the GNU/Linux operating </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> system. </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> Although the Lesser General Public License is Less protective of the </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> users' freedom, it does ensure that the user of a program that is </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> linked with the Library has the freedom and the wherewithal to run </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> that program using a modified version of the Library. </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> The precise terms and conditions for copying, distribution and </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> modification follow. Pay close attention to the difference between a </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> "work based on the library" and a "work that uses the library". The </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> former contains code derived from the library, whereas the latter must </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> be combined with the library in order to run. </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> GNU LESSER GENERAL PUBLIC LICENSE </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> 0. This License Agreement applies to any software library or other </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> program which contains a notice placed by the copyright holder or </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> other authorized party saying it may be distributed under the terms of </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> this Lesser General Public License (also called "this License"). </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> Each licensee is addressed as "you". </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> A "library" means a collection of software functions and/or data </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> prepared so as to be conveniently linked with application programs </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> (which use some of those functions and data) to form executables. </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> The "Library", below, refers to any such software library or work </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> which has been distributed under these terms. A "work based on the </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> Library" means either the Library or any derivative work under </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> copyright law: that is to say, a work containing the Library or a </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> portion of it, either verbatim or with modifications and/or translated </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> straightforwardly into another language. (Hereinafter, translation is </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> included without limitation in the term "modification".) </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> "Source code" for a work means the preferred form of the work for </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> making modifications to it. For a library, complete source code means </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> all the source code for all modules it contains, plus any associated </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> interface definition files, plus the scripts used to control compilation </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> and installation of the library. </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> Activities other than copying, distribution and modification are not </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> covered by this License; they are outside its scope. The act of </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> running a program using the Library is not restricted, and output from </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> such a program is covered only if its contents constitute a work based </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> on the Library (independent of the use of the Library in a tool for </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> writing it). Whether that is true depends on what the Library does </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> and what the program that uses the Library does. </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> 1. You may copy and distribute verbatim copies of the Library's </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> complete source code as you receive it, in any medium, provided that </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> you conspicuously and appropriately publish on each copy an </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> appropriate copyright notice and disclaimer of warranty; keep intact </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> all the notices that refer to this License and to the absence of any </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> warranty; and distribute a copy of this License along with the </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> Library. </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> You may charge a fee for the physical act of transferring a copy, </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> and you may at your option offer warranty protection in exchange for a </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> fee. </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> 2. You may modify your copy or copies of the Library or any portion </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> of it, thus forming a work based on the Library, and copy and </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> distribute such modifications or work under the terms of Section 1 </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> above, provided that you also meet all of these conditions: </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> a) The modified work must itself be a software library. </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> b) You must cause the files modified to carry prominent notices </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> stating that you changed the files and the date of any change. </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> c) You must cause the whole of the work to be licensed at no </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> charge to all third parties under the terms of this License. </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> d) If a facility in the modified Library refers to a function or a </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> table of data to be supplied by an application program that uses </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> the facility, other than as an argument passed when the facility </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> is invoked, then you must make a good faith effort to ensure that, </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> in the event an application does not supply such function or </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> table, the facility still operates, and performs whatever part of </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> its purpose remains meaningful. </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> (For example, a function in a library to compute square roots has </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> a purpose that is entirely well-defined independent of the </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> application. Therefore, Subsection 2d requires that any </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> application-supplied function or table used by this function must </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> be optional: if the application does not supply it, the square </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> root function must still compute square roots.) </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> These requirements apply to the modified work as a whole. If </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> identifiable sections of that work are not derived from the Library, </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> and can be reasonably considered independent and separate works in </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> themselves, then this License, and its terms, do not apply to those </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> sections when you distribute them as separate works. But when you </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> distribute the same sections as part of a whole which is a work based </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> on the Library, the distribution of the whole must be on the terms of </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> this License, whose permissions for other licensees extend to the </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> entire whole, and thus to each and every part regardless of who wrote </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> it. </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> Thus, it is not the intent of this section to claim rights or contest </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> your rights to work written entirely by you; rather, the intent is to </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> exercise the right to control the distribution of derivative or </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> collective works based on the Library. </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> In addition, mere aggregation of another work not based on the Library </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> with the Library (or with a work based on the Library) on a volume of </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> a storage or distribution medium does not bring the other work under </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> the scope of this License. </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> 3. You may opt to apply the terms of the ordinary GNU General Public </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> License instead of this License to a given copy of the Library. To do </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> this, you must alter all the notices that refer to this License, so </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> that they refer to the ordinary GNU General Public License, version 2, </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> instead of to this License. (If a newer version than version 2 of the </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> ordinary GNU General Public License has appeared, then you can specify </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> that version instead if you wish.) Do not make any other change in </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> these notices. </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> Once this change is made in a given copy, it is irreversible for </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> that copy, so the ordinary GNU General Public License applies to all </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> subsequent copies and derivative works made from that copy. </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> This option is useful when you wish to copy part of the code of </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> the Library into a program that is not a library. </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> 4. You may copy and distribute the Library (or a portion or </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> derivative of it, under Section 2) in object code or executable form </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> under the terms of Sections 1 and 2 above provided that you accompany </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> it with the complete corresponding machine-readable source code, which </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> must be distributed under the terms of Sections 1 and 2 above on a </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> medium customarily used for software interchange. </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> If distribution of object code is made by offering access to copy </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> from a designated place, then offering equivalent access to copy the </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> source code from the same place satisfies the requirement to </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> distribute the source code, even though third parties are not </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> compelled to copy the source along with the object code. </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> 5. A program that contains no derivative of any portion of the </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> Library, but is designed to work with the Library by being compiled or </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> linked with it, is called a "work that uses the Library". Such a </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> work, in isolation, is not a derivative work of the Library, and </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> therefore falls outside the scope of this License. </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> However, linking a "work that uses the Library" with the Library </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> creates an executable that is a derivative of the Library (because it </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> contains portions of the Library), rather than a "work that uses the </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> library". The executable is therefore covered by this License. </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> Section 6 states terms for distribution of such executables. </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> When a "work that uses the Library" uses material from a header file </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> that is part of the Library, the object code for the work may be a </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> derivative work of the Library even though the source code is not. </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> Whether this is true is especially significant if the work can be </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> linked without the Library, or if the work is itself a library. The </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> threshold for this to be true is not precisely defined by law. </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> If such an object file uses only numerical parameters, data </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> structure layouts and accessors, and small macros and small inline </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> functions (ten lines or less in length), then the use of the object </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> file is unrestricted, regardless of whether it is legally a derivative </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> work. (Executables containing this object code plus portions of the </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> Library will still fall under Section 6.) </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> Otherwise, if the work is a derivative of the Library, you may </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> distribute the object code for the work under the terms of Section 6. </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> Any executables containing that work also fall under Section 6, </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> whether or not they are linked directly with the Library itself. </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> 6. As an exception to the Sections above, you may also combine or </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> link a "work that uses the Library" with the Library to produce a </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> work containing portions of the Library, and distribute that work </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> under terms of your choice, provided that the terms permit </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> modification of the work for the customer's own use and reverse </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> engineering for debugging such modifications. </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> You must give prominent notice with each copy of the work that the </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> Library is used in it and that the Library and its use are covered by </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> this License. You must supply a copy of this License. If the work </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> during execution displays copyright notices, you must include the </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> copyright notice for the Library among them, as well as a reference </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> directing the user to the copy of this License. Also, you must do one </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> of these things: </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> a) Accompany the work with the complete corresponding </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> machine-readable source code for the Library including whatever </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> changes were used in the work (which must be distributed under </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> Sections 1 and 2 above); and, if the work is an executable linked </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> with the Library, with the complete machine-readable "work that </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> uses the Library", as object code and/or source code, so that the </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> user can modify the Library and then relink to produce a modified </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> executable containing the modified Library. (It is understood </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> that the user who changes the contents of definitions files in the </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> Library will not necessarily be able to recompile the application </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> to use the modified definitions.) </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> b) Use a suitable shared library mechanism for linking with the </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> Library. A suitable mechanism is one that (1) uses at run time a </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> copy of the library already present on the user's computer system, </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> rather than copying library functions into the executable, and (2) </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> will operate properly with a modified version of the library, if </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> the user installs one, as long as the modified version is </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> interface-compatible with the version that the work was made with. </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> c) Accompany the work with a written offer, valid for at </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> least three years, to give the same user the materials </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> specified in Subsection 6a, above, for a charge no more </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> than the cost of performing this distribution. </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> d) If distribution of the work is made by offering access to copy </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> from a designated place, offer equivalent access to copy the above </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> specified materials from the same place. </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> e) Verify that the user has already received a copy of these </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> materials or that you have already sent this user a copy. </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> For an executable, the required form of the "work that uses the </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> Library" must include any data and utility programs needed for </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> reproducing the executable from it. However, as a special exception, </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> the materials to be distributed need not include anything that is </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> normally distributed (in either source or binary form) with the major </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> components (compiler, kernel, and so on) of the operating system on </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> which the executable runs, unless that component itself accompanies </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> the executable. </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> It may happen that this requirement contradicts the license </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> restrictions of other proprietary libraries that do not normally </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> accompany the operating system. Such a contradiction means you cannot </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> use both them and the Library together in an executable that you </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> distribute. </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> 7. You may place library facilities that are a work based on the </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> Library side-by-side in a single library together with other library </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> facilities not covered by this License, and distribute such a combined </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> library, provided that the separate distribution of the work based on </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> the Library and of the other library facilities is otherwise </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> permitted, and provided that you do these two things: </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> a) Accompany the combined library with a copy of the same work </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> based on the Library, uncombined with any other library </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> facilities. This must be distributed under the terms of the </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> Sections above. </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> b) Give prominent notice with the combined library of the fact </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> that part of it is a work based on the Library, and explaining </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> where to find the accompanying uncombined form of the same work. </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> 8. You may not copy, modify, sublicense, link with, or distribute </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> the Library except as expressly provided under this License. Any </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> attempt otherwise to copy, modify, sublicense, link with, or </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> distribute the Library is void, and will automatically terminate your </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> rights under this License. However, parties who have received copies, </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> or rights, from you under this License will not have their licenses </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> terminated so long as such parties remain in full compliance. </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> 9. You are not required to accept this License, since you have not </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> signed it. However, nothing else grants you permission to modify or </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> distribute the Library or its derivative works. These actions are </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> prohibited by law if you do not accept this License. Therefore, by </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> modifying or distributing the Library (or any work based on the </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> Library), you indicate your acceptance of this License to do so, and </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> all its terms and conditions for copying, distributing or modifying </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> the Library or works based on it. </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> 10. Each time you redistribute the Library (or any work based on the </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> Library), the recipient automatically receives a license from the </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> original licensor to copy, distribute, link with or modify the Library </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> subject to these terms and conditions. You may not impose any further </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> restrictions on the recipients' exercise of the rights granted herein. </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> You are not responsible for enforcing compliance by third parties with </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> this License. </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> 11. If, as a consequence of a court judgment or allegation of patent </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> infringement or for any other reason (not limited to patent issues), </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> conditions are imposed on you (whether by court order, agreement or </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> otherwise) that contradict the conditions of this License, they do not </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> excuse you from the conditions of this License. If you cannot </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> distribute so as to satisfy simultaneously your obligations under this </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> License and any other pertinent obligations, then as a consequence you </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> may not distribute the Library at all. For example, if a patent </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> license would not permit royalty-free redistribution of the Library by </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> all those who receive copies directly or indirectly through you, then </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> the only way you could satisfy both it and this License would be to </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> refrain entirely from distribution of the Library. </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> If any portion of this section is held invalid or unenforceable under any </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> particular circumstance, the balance of the section is intended to apply, </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> and the section as a whole is intended to apply in other circumstances. </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> It is not the purpose of this section to induce you to infringe any </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> patents or other property right claims or to contest validity of any </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> such claims; this section has the sole purpose of protecting the </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> integrity of the free software distribution system which is </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> implemented by public license practices. Many people have made </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> generous contributions to the wide range of software distributed </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> through that system in reliance on consistent application of that </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> system; it is up to the author/donor to decide if he or she is willing </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> to distribute software through any other system and a licensee cannot </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> impose that choice. </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> This section is intended to make thoroughly clear what is believed to </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> be a consequence of the rest of this License. </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> 12. If the distribution and/or use of the Library is restricted in </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> certain countries either by patents or by copyrighted interfaces, the </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> original copyright holder who places the Library under this License may add </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> an explicit geographical distribution limitation excluding those countries, </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> so that distribution is permitted only in or among countries not thus </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> excluded. In such case, this License incorporates the limitation as if </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> written in the body of this License. </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> 13. The Free Software Foundation may publish revised and/or new </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> versions of the Lesser General Public License from time to time. </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> Such new versions will be similar in spirit to the present version, </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> but may differ in detail to address new problems or concerns. </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> Each version is given a distinguishing version number. If the Library </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> specifies a version number of this License which applies to it and </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> "any later version", you have the option of following the terms and </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> conditions either of that version or of any later version published by </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> the Free Software Foundation. If the Library does not specify a </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> license version number, you may choose any version ever published by </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> the Free Software Foundation. </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> 14. If you wish to incorporate parts of the Library into other free </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> programs whose distribution conditions are incompatible with these, </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> write to the author to ask for permission. For software which is </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> copyrighted by the Free Software Foundation, write to the Free </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> Software Foundation; we sometimes make exceptions for this. Our </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> decision will be guided by the two goals of preserving the free status </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> of all derivatives of our free software and of promoting the sharing </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> and reuse of software generally. </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> NO WARRANTY </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> DAMAGES. </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> END OF TERMS AND CONDITIONS </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> How to Apply These Terms to Your New Libraries </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> If you develop a new library, and you want it to be of the greatest </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> possible use to the public, we recommend making it free software that </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> everyone can redistribute and change. You can do so by permitting </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> redistribution under these terms (or, alternatively, under the terms of the </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> ordinary General Public License). </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> To apply these terms, attach the following notices to the library. It is </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> safest to attach them to the start of each source file to most effectively </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> convey the exclusion of warranty; and each file should have at least the </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> "copyright" line and a pointer to where the full notice is found. </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> <one line to give the library's name and a brief idea of what it does.> </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> Copyright (C) <year> <name of author> </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> This library is free software; you can redistribute it and/or </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> modify it under the terms of the GNU Lesser General Public </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> License as published by the Free Software Foundation; either </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> version 2.1 of the License, or (at your option) any later version. </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> This library is distributed in the hope that it will be useful, </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> but WITHOUT ANY WARRANTY; without even the implied warranty of </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> Lesser General Public License for more details. </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> You should have received a copy of the GNU Lesser General Public </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> License along with this library; if not, write to the Free Software </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> Also add information on how to contact you by electronic and paper mail. </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> You should also get your employer (if you work as a programmer) or your </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> school, if any, to sign a "copyright disclaimer" for the library, if </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> necessary. Here is a sample; alter the names: </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> Yoyodyne, Inc., hereby disclaims all copyright interest in the </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> library `Frob' (a library for tweaking knobs) written by James Random Hacker. </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> <signature of Ty Coon>, 1 April 1990 </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> Ty Coon, President of Vice </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> </pre> +<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; color:#000000; background-color:#f1f1f1;" bgcolor="#f1f1f1"> That's all there is to it! </pre> + +<P><BR></P> +<HR> +<CENTER> +<TABLE WIDTH=100% BORDER=0 CELLPADDING=0 CELLSPACING=0> + <TR> <TD WIDTH=50%><P>Copyright © 2007-2010 <A HREF="http://www.aconex.com/"><FONT COLOR="#000060">Aconex</FONT></A><BR>Copyright © 2000-2004 <A HREF="http://www.sgi.com/"><FONT COLOR="#000060">Silicon Graphics Inc</FONT></P></TD> + <TD WIDTH=50%><P ALIGN=RIGHT><A HREF="http://pcp.io/"><FONT COLOR="#000060">PCP Site</FONT></A><BR>Copyright © 2012-2014 <A HREF="http://www.redhat.com/"><FONT COLOR="#000060">Red Hat</FONT></P></TD> </TR> +</TABLE> +</CENTER> +</BODY> +</HTML> diff --git a/man/html/timecontrol.html b/man/html/timecontrol.html new file mode 100644 index 0000000..fc500c7 --- /dev/null +++ b/man/html/timecontrol.html @@ -0,0 +1,69 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> +<HTML> +<HEAD> + <meta http-equiv="content-type" content="text/html; charset=utf-8"> + <meta http-equiv="content-style-type" content="text/css"> + <link href="pcpdoc.css" rel="stylesheet" type="text/css"> + <link href="images/pcp.ico" rel="icon" type="image/ico"> + <TITLE>Time Control</TITLE> +</HEAD> +<BODY LANG="en-AU" TEXT="#000060" DIR="LTR"> +<TABLE WIDTH=100% BORDER=0 CELLPADDING=0 CELLSPACING=0 STYLE="page-break-before: always"> + <TR> <TD WIDTH=64 HEIGHT=64><A HREF="http://pcp.io/"><IMG SRC="images/pmtimeicon.png" NAME="pmtimeicon" ALIGN=TOP WIDTH=64 HEIGHT=64 BORDER=0></A></TD> + <TD WIDTH=1><P> </P></TD> + <TD WIDTH=500><P VALIGN=MIDDLE ALIGN=LEFT><A HREF="index.html"><FONT COLOR="#cc0000">Home</FONT></A> · <A HREF="lab.pmchart.html"><FONT COLOR="#cc0000">Charts</FONT></A> · <A HREF="timecontrol.html"><FONT COLOR="#cc0000">Time Control</FONT></A></P></TD> + </TR> +</TABLE> +<H1 ALIGN=CENTER STYLE="margin-top: 0.48cm; margin-bottom: 0.32cm"><FONT SIZE=7>Time Control</FONT></H1> +<P>The graphical time control utility, <I>pmtime</I>, is used to coordinate all aspects of time synchonisation in <I>pmchart</I>. Most importantly, this means the current sample time is set by <I>pmtime</I>, but also includes things like the update delta, update speed, and the timezone. It presents a VCR model which can be used to stop time, play forwards, rewind, and fast forward through time. +</P> +<P><BR></P> + +<TABLE WIDTH=100% BORDER=0 CELLPADDING=0 CELLSPACING=0 BGCOLOR="#e2e2e2"> + <TR><TD WIDTH=100% BGCOLOR="#081c59"><P ALIGN=LEFT><FONT SIZE=5 COLOR="#ffffff"><B>Main Window</B></FONT></P></TD></TR> +</TABLE> +<TABLE WIDTH=100% BORDER=0 CELLPADDING=0 CELLSPACING=0 STYLE="page-break-before: always"> + <TR><TD><P><BR><I>pmtime</I> operates in either live or archive mode, depending on the data source. In archive mode, there is additional functionality available, as both forward and backward movement is possible, and it is can speed up or slow down the time updates relative to real time. Some functionality is common between the two modes, however. The sample interval (and units) can always be set using the <I>Interval</I>. The current time position is always displayed in the <I>Position</I> text box (this equates to the rightmost time point in the <I>pmchart</I> window). And when hosts or archives from different timezones to the monitoring host are used, a drop-down list of available timezones is available from the options menu, which allows you to change the reporting timezone in the monitoring tools (this always defaults to localtime on the monitoring host - <B>not</B> the monitored host).</P> + <TD WIDTH=456><P VALIGN=MIDDLE ALIGN=RIGHT><CENTER><BR><IMG ALIGN=RIGHT SRC="images/pmtime_clients.png" BORDER=0></CENTER></P></TD> +</TABLE> +<P><I>pmtime</I> can actually coordinate the flow of time to multiple client programs. For example, if a second <I>pmchart</I> is started via the <I>Options</I> menu, it will share the time control process with the original <I>pmchart</I> and both will be updated in lock-step. This is true for both Live and Archive monitoring, and there is even support for controlling time for other PCP clients (like <I>pmval</I>) as well.</P> +<BR> +<TABLE WIDTH=100% BORDER=0 CELLPADDING=0 CELLSPACING=0 BGCOLOR="#e2e2e2"> + <TR><TD WIDTH=100% BGCOLOR="#081c59"><P ALIGN=LEFT><FONT SIZE=5 COLOR="#ffffff"><B>Live Mode</B></FONT></P></TD></TR> +</TABLE> +<TABLE WIDTH=100% BORDER=0 CELLPADDING=0 CELLSPACING=0 STYLE="page-break-before: always"> + <TR><TD WIDTH=350><P VALIGN=MIDDLE ALIGN=LEFT><CENTER><BR><IMG ALIGN=LEFT SRC="images/pmtime_live.png" BORDER=0></CENTER></P></TD> + <TD><BR><P>There are just two states available in live mode:<UL><LI>Playing, where time updates are sent to the client at a continuous rate in real time. + <LI>Stopped, where time is frozen at a particular point in time. +</UL></P> + </TR> +</TABLE> +</P> +<TABLE WIDTH=100% BORDER=0 CELLPADDING=0 CELLSPACING=0 BGCOLOR="#e2e2e2"> + <TR><TD WIDTH=100% BGCOLOR="#081c59"><P ALIGN=LEFT><FONT SIZE=5 COLOR="#ffffff"><B>Archive Mode</B></FONT></P></TD></TR> +</TABLE> +<TABLE WIDTH=100% BORDER=0 CELLPADDING=0 CELLSPACING=0 STYLE="page-break-before: always"> + <TR><TD WIDTH=350><P VALIGN=MIDDLE ALIGN=LEFT><CENTER><BR><IMG ALIGN=LEFT SRC="images/pmtime_archive.png" BORDER=0></CENTER></P></TD> + <TD><BR><P>There are several modes of playback available in archive mode:<UL><LI>Normal mode, where time updates are sent to the client at a continuous rate (usually not too different to the original live recording), as determined by the "Speed" wheel setting. + <LI>Step mode, where time is only advanced/retreated (by clicking on the Step button) one sample at a time. + <LI>Fast mode, where time is moved quickly in either a fast forward or fast rewind direction, and the visible charts are updated as quickly as possible. +</UL></P><P>The Speed setting can be changed by directly editing the text entry box, or more simply by selecting and rotating the wheel either left or right. Speed is only relevent in Normal mode.</TD> + </TR> +</TABLE> +<P>In archive mode, the <I>Position</I> text box is editable, and any valid PCP timestamp can be entered here. Alternatively, and more simply, the archive mode provides a slider beneath the <I>Position</I> text box allowing the time position to be set directly using the pointing device (click, drag, and release at the desired time position). +</P> +<TABLE WIDTH=100% BORDER=0 CELLPADDING=0 CELLSPACING=0 STYLE="page-break-before: always"> + <TR><TD><BR><P>One last feature specific to archive mode, is the <I>Time Bounds</I> dialog. This window, available from the <I>Options</I> menu, displays the start and end position for all archives presented to <I>pmchart</I> (and hence <I>pmtime</I>). The editable <I>Start</I> and <I>End</I> position text boxes (and associated sliders) allow the time updates to be restricted to a specific time range. Once archive play/rewind hits these caliper points, replay will stop (independent of whether that is the start or end of the archive). This allows for a fine-grained level of focus around particular performance events.</TD> + <TD WIDTH=350><P VALIGN=MIDDLE ALIGN=RIGHT><CENTER><BR><IMG ALIGN=RIGHT SRC="images/pmtime_bounds.png" BORDER=0></CENTER></P></TD> + </TR> +</TABLE> +<P><BR></P> +<HR> +<CENTER> +<TABLE WIDTH=100% BORDER=0 CELLPADDING=0 CELLSPACING=0> + <TR> <TD WIDTH=50%><P>Copyright © 2007-2010 <A HREF="http://www.aconex.com/"><FONT COLOR="#000060">Aconex</FONT></A><BR>Copyright © 2000-2004 <A HREF="http://www.sgi.com/"><FONT COLOR="#000060">Silicon Graphics Inc</FONT></P></TD> + <TD WIDTH=50%><P ALIGN=RIGHT><A HREF="http://pcp.io/"><FONT COLOR="#000060">PCP Site</FONT></A><BR>Copyright © 2012-2014 <A HREF="http://www.redhat.com/"><FONT COLOR="#000060">Red Hat</FONT></P></TD> </TR> +</TABLE> +</CENTER> +</BODY> +</HTML> diff --git a/man/html/views.html b/man/html/views.html new file mode 100644 index 0000000..5ce9ca2 --- /dev/null +++ b/man/html/views.html @@ -0,0 +1,89 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> +<HTML> +<HEAD> + <meta http-equiv="content-type" content="text/html; charset=utf-8"> + <meta http-equiv="content-style-type" content="text/css"> + <link href="pcpdoc.css" rel="stylesheet" type="text/css"> + <link href="images/pcp.ico" rel="icon" type="image/ico"> + <TITLE>Chart Views</TITLE> +</HEAD> +<BODY LANG="en-AU" TEXT="#000060" DIR="LTR"> +<TABLE WIDTH=100% BORDER=0 CELLPADDING=0 CELLSPACING=0 STYLE="page-break-before: always"> + <TR> <TD WIDTH=64 HEIGHT=64><A HREF="http://pcp.io/"><IMG SRC="images/pmcharticon.png" NAME="pmcharticon" ALIGN=TOP WIDTH=64 HEIGHT=64 BORDER=0></A></TD> + <TD WIDTH=1><P> </P></TD> + <TD WIDTH=500><P VALIGN=MIDDLE ALIGN=LEFT><A HREF="index.html"><FONT COLOR="#cc0000">Home</FONT></A> · <A HREF="lab.pmchart.html"><FONT COLOR="#cc0000">Charts</FONT></A> · <A HREF="timecontrol.html"><FONT COLOR="#cc0000">Time Control</FONT></A></P></TD> + </TR> +</TABLE> +<H1 ALIGN=CENTER STYLE="margin-top: 0.48cm; margin-bottom: 0.32cm"><FONT SIZE=7>Views</FONT></H1> +<P>The primary pmchart configuration file is the "view", which allows the metadata associated with one or more charts to be saved in the filesystem. This metadata describes all aspects of the charts, including which PCP metrics and instances are to be used, which hosts, which colors, the chart titles, use of chart legends, and much more. +<P>From a conceptual point of view, there are two classes of view. These views share the same configuration file format, described below. The differences lie in where they are installed and how they are manipulated. +<P>The first class, the "system" view, is simply any view that is installed as part of the pmchart package. These are stored in <I>$PCP_VAR_DIR/config/pmchart</I>. When the <I>File→Open View</I> dialog is displayed, it is these views that are initially listed. The system views cannot be modified by a normal user, and should not be modified even by a user with suitable priviledges, as they will be overwritten during an upgrade. +<P>The second class of view is the "user" view. These views are created on-the-fly using the <I>File→Save View</I> dialog. This is a mechanism for individual users to save their commonly used views. Access to these views is achieved through the <I>File→Open View</I> dialog, as with the system views. Once the dialog is opened, the list of views can be toggled between user and system views by clicking on the two toggle buttons in the top right corner. User views are stored in <I>$HOME/.pcp/pmchart</I>. +<P> </P> +<P>The current pmchart configuration file syntax has <A HREF="pmchart.html">evolved</A> from the original SGI pmchart syntax. +<P> </P> +<TABLE WIDTH=100% BORDER=0 CELLPADDING=0 CELLSPACING=0 BGCOLOR="#e2e2e2"> + <TR><TD WIDTH=100% BGCOLOR="#081c59"><P ALIGN=LEFT><FONT SIZE=5 COLOR="#ffffff"><B>Configuration File Syntax</B></FONT></P></TD></TR> +</TABLE> +<P>pmchart loads predefined chart configurations (or "views") from external files that conform to the following rules. In the descriptions below keywords (shown in bold) may appear in upper, lower or mixed case, elements shown as [stuff] are optional, and user-supplied elements are shown as <other stuff>. A vertical bar (|) is used where syntactic elements are alternatives. Quotes (") may be used to enclose lexical elements that may contain white space, such as titles, labels and instance names. +<P><OL> + <LI>The first line defines the configuration file type and should be +<PRE> #kmchart</PRE> +although pmchart provides backwards compatibility for original SGI pmchart formats with an initial line of +<PRE> #pmchart</PRE> + <LI>After the first line, lines beginning with "#" as the first non-whitespace character are treated as comments and skipped. Similarly blank lines are skipped.<PRE></PRE> + <LI>The next line should be +<PRE> version <n> <host-clause></PRE> +where <n> depends on the configuration file type, and is 1 for kmchart else 1.1, 1.2 or 2.0 for pmchart. +<BR>The <host-clause> part is optional (and ignored) for pmchart configuration files, but required for the older pmchart configuration files, and is of the form +<PRE> host literal</PRE> +or +<PRE> host dynamic</PRE> + <LI>A configuration contains one or more charts defined as follows: +<PRE> chart [title <title>] style <style> <options></PRE> +If specified, the title will appear centred and above the graph area of the chart. The <title> is usually enclosed in quotes (") and if it contains the sequence "%h" this will be replaced by the short form of the hostname for the default source of metrics at the time this chart was loaded. After the view is loaded, the title visibility and setting can be manipulated using the Chart Title text box in the <I>Edit→Chart</I> dialog. +<BR>The <options> are zero or more of the optional elements: +<PRE> [scale [from] <ymin> [to] <ymax>] [legend <onoff>]</PRE> +If <B>scale</B> is specified, the vertical scaling is set for all plots in the chart to a y-range defined by <ymin> and <ymax>. Otherwise the vertical axis will be autoscaled based on the values currently being plotted. +<BR><onoff> is one of the keywords <B>on</B> or <B>off</B> and the <B>legend</B> clause controls the presence or absence of the plot legend below the graph area. The default is for the legend to be shown. After the view is loaded, the legend visibility can be toggled using the Show Legend button in the <I>Edit→Chart</I> dialog.<PRE></PRE> + <LI>pmchart supports a <B>global</B> clause to specify the dimensions of the top-level window (using the <B>width</B> and <B>height</B> keywords), the number of visible points (<B>points</B> keyword) and the starting X and Y axis positions on the screen (<B>xpos</B> and <B>ypos</B> keywords). Each of these global attributes takes an integer value as the sole qualifier.<PRE></PRE> + <LI>Each chart has one or more plots associated with it, as defined by one of the following specifications: +<PRE> plot + [legend <title>] [color <colorspec>] [host <hostspec>] + metric <metricname> + [ instance <inst> | matching <pat> | not-matching <pat> ]</PRE> +The keyword <B>plot</B> may be replaced with the keyword <B>optional-plot</B>, in which case if the source of performance data does not include the specified performance metric and/or instance, then this plot is silently dropped from the chart. +<BR>If specified, the title will appear in the chart legend. The <title> is usually enclosed in quotes (") and if it contains the sequence "%i" this will be replaced by the metric instance name (if any). +<P>For pmchart configuration files, the keyword <B>title</B> must be used instead of <B>legend</B>. pmchart supports either keyword. +<BR>The <B>color</B> clause is optional for new pmchart configuration files, but it is mandatory for older pmchart configuration files. <colorspec> may be one of the following: +<PRE> #-cycle<BR> + rgbi:rr:gg:bb<BR> + #rgb<BR> + #rrggbb<BR> + #rrrgggbbb<BR> + #rrrrggggbbbb<BR> + <Xcolor></PRE> +where each of r, g and b are hexidecimal digits (0-9 and A-F) representing respectively the red, green and blue color components. <Xcolor> is one of the color names from the X color database, e.g. red or steelblue, see also the output from <B>showrgb</B>(1) on X11 platforms. +<BR>The "color" #-cycle specifies that pmchart should use the next in a pallet of colors that it uses cyclically for each chart. This is the default if the <B>color</B> clause is omitted. +<BR>The <hostspec> in the <B>host</B> clause may be a hostname, an IP address or an asterisk (*); the latter is used to mean the default source of performance metrics. For pmchart configuration files, the <B>host</B> clause must be present, for new pmchart configuration files it is optional, and if missing the default source of performance metrics will be used. +<BR>The optional <B>instance</B> specification, + <OL><LI>is omitted in which case one plot will be created for every instance of the <metricname> metric + <LI>starts with <B>instance</B>, in which case only the instance named <inst> will be plotted + <LI>starts with <B>matching</B>, in which case all instances whose names match the pattern <pat> will be plotted; the pattern uses extended regular expression notation in the style of <B>egrep</B>(1) (refer to the <I>PMCD</I> view for an example) + <LI>starts with <B>not-matching</B>, in which case all instances whose names do not match the pattern <pat> will be plotted; the pattern uses extended regular expression notation in the style of <B>egrep</B>(1) (refer to the <I>Netbytes</I> view for an example) +<BR>The original pmchart syntax uses a bizarre notation where <inst> and <pat> extend from the first non-white space character to the end of the input line. For modern pmchart configuration files these elements are either delimited by white space, or enclosed in quotes ("). +</OL><PRE></PRE> + <LI>The optional <B>tab</B> directive can be used to create views with multiple charts which span multiple Tabs. The synax is as follows: +<PRE> tab <label> [host <host>] [points <points> [samples <samples>]]</PRE> +<BR>All chart specifications following this keyword will be created on the new Tab, until the end of the configuration file or until another <B>tab</B> keyword is encountered. +</OL> +<P> </P> +<HR> +<CENTER> +<TABLE WIDTH=100% BORDER=0 CELLPADDING=0 CELLSPACING=0> + <TR> <TD WIDTH=50%><P>Copyright © 2007-2010 <A HREF="http://www.aconex.com/"><FONT COLOR="#000060">Aconex</FONT></A><BR>Copyright © 2000-2004 <A HREF="http://www.sgi.com/"><FONT COLOR="#000060">Silicon Graphics Inc</FONT></P></TD> + <TD WIDTH=50%><P ALIGN=RIGHT><A HREF="http://pcp.io/"><FONT COLOR="#000060">PCP Site</FONT></A><BR>Copyright © 2012-2014 <A HREF="http://www.redhat.com/"><FONT COLOR="#000060">Red Hat</FONT></P></TD> </TR> +</TABLE> +</CENTER> +</BODY> +</HTML> |