Welcome to TiddlyWiki created by Jeremy Ruston, Copyright © 2007 UnaMesa Association
Background: #fff
Foreground: #000
PrimaryPale: #8cf
PrimaryLight: #18f
PrimaryMid: #04b
PrimaryDark: #014
SecondaryPale: #ffc
SecondaryLight: #fe8
SecondaryMid: #db4
SecondaryDark: #841
TertiaryPale: #eee
TertiaryLight: #ccc
TertiaryMid: #999
TertiaryDark: #666
Error: #f88
/*{{{*/
body {background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]];}
a {color:[[ColorPalette::PrimaryMid]];}
a:hover {background-color:[[ColorPalette::PrimaryMid]]; color:[[ColorPalette::Background]];}
a img {border:0;}
h1,h2,h3,h4,h5,h6 {color:[[ColorPalette::SecondaryDark]]; background:transparent;}
h1 {border-bottom:2px solid [[ColorPalette::TertiaryLight]];}
h2,h3 {border-bottom:1px solid [[ColorPalette::TertiaryLight]];}
.button {color:[[ColorPalette::PrimaryDark]]; border:1px solid [[ColorPalette::Background]];}
.button:hover {color:[[ColorPalette::PrimaryDark]]; background:[[ColorPalette::SecondaryLight]]; border-color:[[ColorPalette::SecondaryMid]];}
.button:active {color:[[ColorPalette::Background]]; background:[[ColorPalette::SecondaryMid]]; border:1px solid [[ColorPalette::SecondaryDark]];}
.header {background:[[ColorPalette::PrimaryMid]];}
.headerShadow {color:[[ColorPalette::Foreground]];}
.headerShadow a {font-weight:normal; color:[[ColorPalette::Foreground]];}
.headerForeground {color:[[ColorPalette::Background]];}
.headerForeground a {font-weight:normal; color:[[ColorPalette::PrimaryPale]];}
.tabSelected{color:[[ColorPalette::PrimaryDark]];
background:[[ColorPalette::TertiaryPale]];
border-left:1px solid [[ColorPalette::TertiaryLight]];
border-top:1px solid [[ColorPalette::TertiaryLight]];
border-right:1px solid [[ColorPalette::TertiaryLight]];
}
.tabUnselected {color:[[ColorPalette::Background]]; background:[[ColorPalette::TertiaryMid]];}
.tabContents {color:[[ColorPalette::PrimaryDark]]; background:[[ColorPalette::TertiaryPale]]; border:1px solid [[ColorPalette::TertiaryLight]];}
.tabContents .button {border:0;}
#sidebar {}
#sidebarOptions input {border:1px solid [[ColorPalette::PrimaryMid]];}
#sidebarOptions .sliderPanel {background:[[ColorPalette::PrimaryPale]];}
#sidebarOptions .sliderPanel a {border:none;color:[[ColorPalette::PrimaryMid]];}
#sidebarOptions .sliderPanel a:hover {color:[[ColorPalette::Background]]; background:[[ColorPalette::PrimaryMid]];}
#sidebarOptions .sliderPanel a:active {color:[[ColorPalette::PrimaryMid]]; background:[[ColorPalette::Background]];}
.wizard {background:[[ColorPalette::PrimaryPale]]; border:1px solid [[ColorPalette::PrimaryMid]];}
.wizard h1 {color:[[ColorPalette::PrimaryDark]]; border:none;}
.wizard h2 {color:[[ColorPalette::Foreground]]; border:none;}
.wizardStep {background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]];
border:1px solid [[ColorPalette::PrimaryMid]];}
.wizardStep.wizardStepDone {background:[[ColorPalette::TertiaryLight]];}
.wizardFooter {background:[[ColorPalette::PrimaryPale]];}
.wizardFooter .status {background:[[ColorPalette::PrimaryDark]]; color:[[ColorPalette::Background]];}
.wizard .button {color:[[ColorPalette::Foreground]]; background:[[ColorPalette::SecondaryLight]]; border: 1px solid;
border-color:[[ColorPalette::SecondaryPale]] [[ColorPalette::SecondaryDark]] [[ColorPalette::SecondaryDark]] [[ColorPalette::SecondaryPale]];}
.wizard .button:hover {color:[[ColorPalette::Foreground]]; background:[[ColorPalette::Background]];}
.wizard .button:active {color:[[ColorPalette::Background]]; background:[[ColorPalette::Foreground]]; border: 1px solid;
border-color:[[ColorPalette::PrimaryDark]] [[ColorPalette::PrimaryPale]] [[ColorPalette::PrimaryPale]] [[ColorPalette::PrimaryDark]];}
#messageArea {border:1px solid [[ColorPalette::SecondaryMid]]; background:[[ColorPalette::SecondaryLight]]; color:[[ColorPalette::Foreground]];}
#messageArea .button {color:[[ColorPalette::PrimaryMid]]; background:[[ColorPalette::SecondaryPale]]; border:none;}
.popupTiddler {background:[[ColorPalette::TertiaryPale]]; border:2px solid [[ColorPalette::TertiaryMid]];}
.popup {background:[[ColorPalette::TertiaryPale]]; color:[[ColorPalette::TertiaryDark]]; border-left:1px solid [[ColorPalette::TertiaryMid]]; border-top:1px solid [[ColorPalette::TertiaryMid]]; border-right:2px solid [[ColorPalette::TertiaryDark]]; border-bottom:2px solid [[ColorPalette::TertiaryDark]];}
.popup hr {color:[[ColorPalette::PrimaryDark]]; background:[[ColorPalette::PrimaryDark]]; border-bottom:1px;}
.popup li.disabled {color:[[ColorPalette::TertiaryMid]];}
.popup li a, .popup li a:visited {color:[[ColorPalette::Foreground]]; border: none;}
.popup li a:hover {background:[[ColorPalette::SecondaryLight]]; color:[[ColorPalette::Foreground]]; border: none;}
.popup li a:active {background:[[ColorPalette::SecondaryPale]]; color:[[ColorPalette::Foreground]]; border: none;}
.popupHighlight {background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]];}
.listBreak div {border-bottom:1px solid [[ColorPalette::TertiaryDark]];}
.tiddler .defaultCommand {font-weight:bold;}
.shadow .title {color:[[ColorPalette::TertiaryDark]];}
.title {color:[[ColorPalette::SecondaryDark]];}
.subtitle {color:[[ColorPalette::TertiaryDark]];}
.toolbar {color:[[ColorPalette::PrimaryMid]];}
.toolbar a {color:[[ColorPalette::TertiaryLight]];}
.selected .toolbar a {color:[[ColorPalette::TertiaryMid]];}
.selected .toolbar a:hover {color:[[ColorPalette::Foreground]];}
.tagging, .tagged {border:1px solid [[ColorPalette::TertiaryPale]]; background-color:[[ColorPalette::TertiaryPale]];}
.selected .tagging, .selected .tagged {background-color:[[ColorPalette::TertiaryLight]]; border:1px solid [[ColorPalette::TertiaryMid]];}
.tagging .listTitle, .tagged .listTitle {color:[[ColorPalette::PrimaryDark]];}
.tagging .button, .tagged .button {border:none;}
.footer {color:[[ColorPalette::TertiaryLight]];}
.selected .footer {color:[[ColorPalette::TertiaryMid]];}
.sparkline {background:[[ColorPalette::PrimaryPale]]; border:0;}
.sparktick {background:[[ColorPalette::PrimaryDark]];}
.error, .errorButton {color:[[ColorPalette::Foreground]]; background:[[ColorPalette::Error]];}
.warning {color:[[ColorPalette::Foreground]]; background:[[ColorPalette::SecondaryPale]];}
.lowlight {background:[[ColorPalette::TertiaryLight]];}
.zoomer {background:none; color:[[ColorPalette::TertiaryMid]]; border:3px solid [[ColorPalette::TertiaryMid]];}
.imageLink, #displayArea .imageLink {background:transparent;}
.annotation {background:[[ColorPalette::SecondaryLight]]; color:[[ColorPalette::Foreground]]; border:2px solid [[ColorPalette::SecondaryMid]];}
.viewer .listTitle {list-style-type:none; margin-left:-2em;}
.viewer .button {border:1px solid [[ColorPalette::SecondaryMid]];}
.viewer blockquote {border-left:3px solid [[ColorPalette::TertiaryDark]];}
.viewer table, table.twtable {border:2px solid [[ColorPalette::TertiaryDark]];}
.viewer th, .viewer thead td, .twtable th, .twtable thead td {background:[[ColorPalette::SecondaryMid]]; border:1px solid [[ColorPalette::TertiaryDark]]; color:[[ColorPalette::Background]];}
.viewer td, .viewer tr, .twtable td, .twtable tr {border:1px solid [[ColorPalette::TertiaryDark]];}
.viewer pre {border:1px solid [[ColorPalette::SecondaryLight]]; background:[[ColorPalette::SecondaryPale]];}
.viewer code {color:[[ColorPalette::SecondaryDark]];}
.viewer hr {border:0; border-top:dashed 1px [[ColorPalette::TertiaryDark]]; color:[[ColorPalette::TertiaryDark]];}
.highlight, .marked {background:[[ColorPalette::SecondaryLight]];}
.editor input {border:1px solid [[ColorPalette::PrimaryMid]];}
.editor textarea {border:1px solid [[ColorPalette::PrimaryMid]]; width:100%;}
.editorFooter {color:[[ColorPalette::TertiaryMid]];}
#backstageArea {background:[[ColorPalette::Foreground]]; color:[[ColorPalette::TertiaryMid]];}
#backstageArea a {background:[[ColorPalette::Foreground]]; color:[[ColorPalette::Background]]; border:none;}
#backstageArea a:hover {background:[[ColorPalette::SecondaryLight]]; color:[[ColorPalette::Foreground]]; }
#backstageArea a.backstageSelTab {background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]];}
#backstageButton a {background:none; color:[[ColorPalette::Background]]; border:none;}
#backstageButton a:hover {background:[[ColorPalette::Foreground]]; color:[[ColorPalette::Background]]; border:none;}
#backstagePanel {background:[[ColorPalette::Background]]; border-color: [[ColorPalette::Background]] [[ColorPalette::TertiaryDark]] [[ColorPalette::TertiaryDark]] [[ColorPalette::TertiaryDark]];}
.backstagePanelFooter .button {border:none; color:[[ColorPalette::Background]];}
.backstagePanelFooter .button:hover {color:[[ColorPalette::Foreground]];}
#backstageCloak {background:[[ColorPalette::Foreground]]; opacity:0.6; filter:'alpha(opacity:60)';}
/*}}}*/
/*{{{*/
* html .tiddler {height:1%;}
body {font-size:.75em; font-family:arial,helvetica; margin:0; padding:0;}
h1,h2,h3,h4,h5,h6 {font-weight:bold; text-decoration:none;}
h1,h2,h3 {padding-bottom:1px; margin-top:1.2em;margin-bottom:0.3em;}
h4,h5,h6 {margin-top:1em;}
h1 {font-size:1.35em;}
h2 {font-size:1.25em;}
h3 {font-size:1.1em;}
h4 {font-size:1em;}
h5 {font-size:.9em;}
hr {height:1px;}
a {text-decoration:none;}
dt {font-weight:bold;}
ol {list-style-type:decimal;}
ol ol {list-style-type:lower-alpha;}
ol ol ol {list-style-type:lower-roman;}
ol ol ol ol {list-style-type:decimal;}
ol ol ol ol ol {list-style-type:lower-alpha;}
ol ol ol ol ol ol {list-style-type:lower-roman;}
ol ol ol ol ol ol ol {list-style-type:decimal;}
.txtOptionInput {width:11em;}
#contentWrapper .chkOptionInput {border:0;}
.externalLink {text-decoration:underline;}
.indent {margin-left:3em;}
.outdent {margin-left:3em; text-indent:-3em;}
code.escaped {white-space:nowrap;}
.tiddlyLinkExisting {font-weight:bold;}
.tiddlyLinkNonExisting {font-style:italic;}
/* the 'a' is required for IE, otherwise it renders the whole tiddler in bold */
a.tiddlyLinkNonExisting.shadow {font-weight:bold;}
#mainMenu .tiddlyLinkExisting,
#mainMenu .tiddlyLinkNonExisting,
#sidebarTabs .tiddlyLinkNonExisting {font-weight:normal; font-style:normal;}
#sidebarTabs .tiddlyLinkExisting {font-weight:bold; font-style:normal;}
.header {position:relative;}
.header a:hover {background:transparent;}
.headerShadow {position:relative; padding:4.5em 0em 1em 1em; left:-1px; top:-1px;}
.headerForeground {position:absolute; padding:4.5em 0em 1em 1em; left:0px; top:0px;}
.siteTitle {font-size:3em;}
.siteSubtitle {font-size:1.2em;}
#mainMenu {position:absolute; left:0; width:10em; text-align:right; line-height:1.6em; padding:1.5em 0.5em 0.5em 0.5em; font-size:1.1em;}
#sidebar {position:absolute; right:3px; width:16em; font-size:.9em;}
#sidebarOptions {padding-top:0.3em;}
#sidebarOptions a {margin:0em 0.2em; padding:0.2em 0.3em; display:block;}
#sidebarOptions input {margin:0.4em 0.5em;}
#sidebarOptions .sliderPanel {margin-left:1em; padding:0.5em; font-size:.85em;}
#sidebarOptions .sliderPanel a {font-weight:bold; display:inline; padding:0;}
#sidebarOptions .sliderPanel input {margin:0 0 .3em 0;}
#sidebarTabs .tabContents {width:15em; overflow:hidden;}
.wizard {padding:0.1em 1em 0em 2em;}
.wizard h1 {font-size:2em; font-weight:bold; background:none; padding:0em 0em 0em 0em; margin:0.4em 0em 0.2em 0em;}
.wizard h2 {font-size:1.2em; font-weight:bold; background:none; padding:0em 0em 0em 0em; margin:0.4em 0em 0.2em 0em;}
.wizardStep {padding:1em 1em 1em 1em;}
.wizard .button {margin:0.5em 0em 0em 0em; font-size:1.2em;}
.wizardFooter {padding:0.8em 0.4em 0.8em 0em;}
.wizardFooter .status {padding:0em 0.4em 0em 0.4em; margin-left:1em;}
.wizard .button {padding:0.1em 0.2em 0.1em 0.2em;}
#messageArea {position:fixed; top:2em; right:0em; margin:0.5em; padding:0.5em; z-index:2000; _position:absolute;}
.messageToolbar {display:block; text-align:right; padding:0.2em 0.2em 0.2em 0.2em;}
#messageArea a {text-decoration:underline;}
.tiddlerPopupButton {padding:0.2em 0.2em 0.2em 0.2em;}
.popupTiddler {position: absolute; z-index:300; padding:1em 1em 1em 1em; margin:0;}
.popup {position:absolute; z-index:300; font-size:.9em; padding:0; list-style:none; margin:0;}
.popup .popupMessage {padding:0.4em;}
.popup hr {display:block; height:1px; width:auto; padding:0; margin:0.2em 0em;}
.popup li.disabled {padding:0.4em;}
.popup li a {display:block; padding:0.4em; font-weight:normal; cursor:pointer;}
.listBreak {font-size:1px; line-height:1px;}
.listBreak div {margin:2px 0;}
.tabset {padding:1em 0em 0em 0.5em;}
.tab {margin:0em 0em 0em 0.25em; padding:2px;}
.tabContents {padding:0.5em;}
.tabContents ul, .tabContents ol {margin:0; padding:0;}
.txtMainTab .tabContents li {list-style:none;}
.tabContents li.listLink { margin-left:.75em;}
#contentWrapper {display:block;}
#splashScreen {display:none;}
#displayArea {margin:1em 17em 0em 14em;}
.toolbar {text-align:right; font-size:.9em;}
.tiddler {padding:1em 1em 0em 1em;}
.missing .viewer,.missing .title {font-style:italic;}
.title {font-size:1.6em; font-weight:bold;}
.missing .subtitle {display:none;}
.subtitle {font-size:1.1em;}
.tiddler .button {padding:0.2em 0.4em;}
.tagging {margin:0.5em 0.5em 0.5em 0; float:left; display:none;}
.isTag .tagging {display:block;}
.tagged {margin:0.5em; float:right;}
.tagging, .tagged {font-size:0.9em; padding:0.25em;}
.tagging ul, .tagged ul {list-style:none; margin:0.25em; padding:0;}
.tagClear {clear:both;}
.footer {font-size:.9em;}
.footer li {display:inline;}
.annotation {padding:0.5em; margin:0.5em;}
* html .viewer pre {width:99%; padding:0 0 1em 0;}
.viewer {line-height:1.4em; padding-top:0.5em;}
.viewer .button {margin:0em 0.25em; padding:0em 0.25em;}
.viewer blockquote {line-height:1.5em; padding-left:0.8em;margin-left:2.5em;}
.viewer ul, .viewer ol {margin-left:0.5em; padding-left:1.5em;}
.viewer table, table.twtable {border-collapse:collapse; margin:0.8em 1.0em;}
.viewer th, .viewer td, .viewer tr,.viewer caption,.twtable th, .twtable td, .twtable tr,.twtable caption {padding:3px;}
table.listView {font-size:0.85em; margin:0.8em 1.0em;}
table.listView th, table.listView td, table.listView tr {padding:0px 3px 0px 3px;}
.viewer pre {padding:0.5em; margin-left:0.5em; font-size:1.2em; line-height:1.4em; overflow:auto;}
.viewer code {font-size:1.2em; line-height:1.4em;}
.editor {font-size:1.1em;}
.editor input, .editor textarea {display:block; width:100%; font:inherit;}
.editorFooter {padding:0.25em 0em; font-size:.9em;}
.editorFooter .button {padding-top:0px; padding-bottom:0px;}
.fieldsetFix {border:0; padding:0; margin:1px 0px 1px 0px;}
.sparkline {line-height:1em;}
.sparktick {outline:0;}
.zoomer {font-size:1.1em; position:absolute; overflow:hidden;}
.zoomer div {padding:1em;}
* html #backstage {width:99%;}
* html #backstageArea {width:99%;}
#backstageArea {display:none; position:relative; overflow: hidden; z-index:150; padding:0.3em 0.5em 0.3em 0.5em;}
#backstageToolbar {position:relative;}
#backstageArea a {font-weight:bold; margin-left:0.5em; padding:0.3em 0.5em 0.3em 0.5em;}
#backstageButton {display:none; position:absolute; z-index:175; top:0em; right:0em;}
#backstageButton a {padding:0.1em 0.4em 0.1em 0.4em; margin:0.1em 0.1em 0.1em 0.1em;}
#backstage {position:relative; width:100%; z-index:50;}
#backstagePanel {display:none; z-index:100; position:absolute; margin:0em 3em 0em 3em; padding:1em 1em 1em 1em;}
.backstagePanelFooter {padding-top:0.2em; float:right;}
.backstagePanelFooter a {padding:0.2em 0.4em 0.2em 0.4em;}
#backstageCloak {display:none; z-index:20; position:absolute; width:100%; height:100px;}
.whenBackstage {display:none;}
.backstageVisible .whenBackstage {display:block;}
/*}}}*/
/***
StyleSheet for use when a translation requires any css style changes.
This StyleSheet can be used directly by languages such as Chinese, Japanese and Korean which use a logographic writing system and need larger font sizes.
***/
/*{{{*/
body {font-size:0.8em;}
#sidebarOptions {font-size:1.05em;}
#sidebarOptions a {font-style:normal;}
#sidebarOptions .sliderPanel {font-size:0.95em;}
.subtitle {font-size:0.8em;}
.viewer table.listView {font-size:0.95em;}
.htmlarea .toolbarHA table {border:1px solid ButtonFace; margin:0em 0em;}
/*}}}*/
/*{{{*/
@media print {
#mainMenu, #sidebar, #messageArea, .toolbar, #backstageButton, #backstageArea {display: none ! important;}
#displayArea {margin: 1em 1em 0em 1em;}
/* Fixes a feature in Firefox 1.5.0.2 where print preview displays the noscript content */
noscript {display:none;}
}
/*}}}*/
<!--{{{-->
<div class='header' macro='gradient vert [[ColorPalette::PrimaryLight]] [[ColorPalette::PrimaryMid]]'>
<div class='headerShadow'>
<span class='siteTitle' refresh='content' tiddler='SiteTitle'></span>
<span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>
</div>
<div class='headerForeground'>
<span class='siteTitle' refresh='content' tiddler='SiteTitle'></span>
<span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>
</div>
</div>
<div id='mainMenu' refresh='content' tiddler='MainMenu'></div>
<div id='sidebar'>
<div id='sidebarOptions' refresh='content' tiddler='SideBarOptions'></div>
<div id='sidebarTabs' refresh='content' force='true' tiddler='SideBarTabs'></div>
</div>
<div id='displayArea'>
<div id='messageArea'></div>
<div id='tiddlerDisplay'></div>
</div>
<!--}}}-->
<!--{{{-->
<div class='toolbar' macro='toolbar closeTiddler closeOthers +editTiddler > fields syncing permalink references jump'></div>
<div class='title' macro='view title'></div>
<div class='subtitle'><span macro='view modifier link'></span>, <span macro='view modified date'></span> (<span macro='message views.wikified.createdPrompt'></span> <span macro='view created date'></span>)</div>
<div class='tagging' macro='tagging'></div>
<div class='tagged' macro='tags'></div>
<div class='viewer' macro='view text wikified'></div>
<div class='tagClear'></div>
<!--}}}-->
<!--{{{-->
<div class='toolbar' macro='toolbar +saveTiddler -cancelTiddler deleteTiddler'></div>
<div class='title' macro='view title'></div>
<div class='editor' macro='edit title'></div>
<div macro='annotations'></div>
<div class='editor' macro='edit text'></div>
<div class='editor' macro='edit tags'></div><div class='editorFooter'><span macro='message views.editor.tagPrompt'></span><span macro='tagChooser'></span></div>
<!--}}}-->
To get started with this blank TiddlyWiki, you'll need to modify the following tiddlers:
* SiteTitle & SiteSubtitle: The title and subtitle of the site, as shown above (after saving, they will also appear in the browser title bar)
* MainMenu: The menu (usually on the left)
* DefaultTiddlers: Contains the names of the tiddlers that you want to appear when the TiddlyWiki is opened
You'll also need to enter your username for signing your edits: <<option txtUserName>>
These InterfaceOptions for customising TiddlyWiki are saved in your browser
Your username for signing your edits. Write it as a WikiWord (eg JoeBloggs)
<<option txtUserName>>
<<option chkSaveBackups>> SaveBackups
<<option chkAutoSave>> AutoSave
<<option chkRegExpSearch>> RegExpSearch
<<option chkCaseSensitiveSearch>> CaseSensitiveSearch
<<option chkAnimate>> EnableAnimations
----
Also see AdvancedOptions
Domain runstates are based on the [[VCPU runstates]] of the ~VCPUs in the domain.
!!! In {{{--dump-all}}} mode, what does the {{{-x}}} mean?
The {{{x}}} indicates which physical cpu the record occured on. {{{--x---}}} means that xenalyze has seen 6 pcpus (0-5), and the current record is on pcpu 2.
!!! I'm seeing something about domain 32768 at the beginning of the trace. What's that about?
32768 is the number for xenalyze's "default domain". It's used to store processing information when xenalyze doesn't know what domain is currently running on a pcpu. This used to be at the beginning of a trace (before the first {{{runstate_change}}} to {{{running}}}) and after any lost records. Now Xen records the current domain/vcpu when creating a lost record, so it's only at the very beginning of the trace.
Topics:
* xenalyze modes
** summary
** dump
** interval
** scatterplot
** histogram
* Key traces
** cpu change
** vcpu runstates
** vmenter/vmexit
*** cr3
*** shadow
* Algorithm details
** ordering across pcpus
** lost records
** vmexit "closing"
** percentile sampling, weight
[[Quick-start|Quick-start guide]]
[[Introduction|Introduction to Xenalyze]]
[[Command Reference|Xenalyze Command Reference]]
[[Analyzing Performance|Using Xenalyze to Analyze Performance Problems]]
GettingStarted
This guide will give you a quick introduction to using {{{xenalyze}}}. Below are some basic recipes to get familiar with taking traces and using the various output modes of {{{xenalyze}}}.
@@color(red):Note@@: Each version of {{{xenalyze}}} is designed to analyze traces generated by a specific version of the hypervisor. Please check {{{xenalyze --version}}} to make sure you're using a version of xenalyze compatible with your hypervisor.
* [[Quickstart - Take a trace]]
* [[Quickstart - Generate a summary]]
* [[Quickstart - Dump individual trace records]]
More quick information can be found in [[Recipes]].
{{{
$ xenalyze --cpu-hz=1.8G --dump-all /tmp/test.trace > test.dump
}}}
The dumped output can be very large, much larger than the trace file itself; for a quick view, pipe it to less, thus:
{{{
$ xenalyze --cpu-hz=1.8G --dump-all /tmp/test.trace | less -B -b 4096
}}}
The {{{-B -b 4096}}} instructs less to only keep a 4K line buffer; otherwise it tries to keep everything in memory, which can trash your performance pretty quickly.
Here are some example output lines from dump-all:
{{{
] 1.000744383 -x vmexit exit_reason EXCEPTION_NMI eip fffff80001029795
] 1.000744383 -x mmio_assist w gpa fee000b0 data 0
] 1.000745561 x- vmexit exit_reason EXCEPTION_NMI eip fffff8000102ff73
] 1.000745561 x- mmio_assist w gpa fee000b0 data 0
vlapic eoi
] 1.000745561 x- fast mmio va fffffffffffe00b0
] 1.000748415 -x vmentry
] 1.000748692 x- vmentry
] 1.000749948 -x vmexit exit_reason HLT eip fffffadffab2fb41
] 1.000749948 -x hlt [ 0 0 a0028006 10dced2d ]
] 1.000750155 x- vmexit exit_reason HLT eip fffffadffab2fb41
] 1.000750155 x- hlt [ 0 0 a0028006 10dcef1c ]
}}}
Each line starting with a number represents a record in the trace. The general format is:
[timestamp] [pcpu] [record info]
The time on the left is calculated from the difference in tsc between this record and the first tsc seen in the file, divided by the CPU hz.
To the right is an indicator of which physical cpu this trace record was generated on. The {{{x}}} indicates which cpu the trace was indicated on, the {{{-}}} indicates other pcpus. So {{{-x--}}} would indicate that xenalyze has seen physical cores 0-3 in the trace, and that the current trace record was generated on physical cpu 1.
After that is a representation of the trace record itself.
In this section, we can see that on core 1, we take a {{{vmexit}}} due to an exception at eip {{{fffff80001029795}}}. The exception turns out to have been a an MMIO write. The guest physical address was {{{fee000b0}}}, and the value written was 0. Then, before that process finishes, core 0 takes a vmexit due to an exception at eip {{{fffff8000102ff73}}}; it turns out also to be an MMIO write. The guest physical address was {{{0xfee000b0}}}, and the value written was 0. Both cores then do a {{{vmenter}}}, only to execute a {{{hlt}}} instruction shortly thereafter.
@@color(red):Note@@: Each version of Xenalyze is designed to analyze traces generated by a specific version of the hypervisor. Please check {{{xenalyze --version}}} to make sure you're using a version of xenalyze compatible with your hypervisor.
To get accurate time scales, you need to tell xenalyze the cpu HZ of the machine on which the trace was taken.
{{{
$ xenalyze --cpu-hz=1.8G --summary /tmp/test.trace > test.summary
}}}
The summary will include information about various events, from {{{vmexit}}}s to time spent on the cpu runqueue. With each of these, there's a general format. Here's an example line:
{{{
emulate 608587 3.93s 13.10% 15493 cyc { 5589| 9567|42111}
}}}
All lines like this follow the same general format:
* A ''label''; saying what event this is summarizing. In this case, it's emulations for a particular vcpu.
* ''Count'': number of times this event happened.
* ''Total time'' (in seconds): the total amount of time spent in this event. In this example, the hypervisor spent 3.93 seconds handling emulations for this particular vcpu
* ''Percentage'': the percentage of time spent in this event. Usually this is the "time" divided by the total time covered by the trace.
* ''Average'' number of cycles per event: The arithmetic mean of individual event times, measured in cycles. Average time per emulation in this example is 15K cycles.
* ''Percentiles'': {{{ { 5th | 50th | 95th } }}}. These percentiles are generally self-weighted percentiles of a pseudo-random sample, but should generally be representative of the whole. In this case, the median is only 9.5K; this indicates that there are a few high-cycle events that are pulling the average up.
In a typical summary, you can expect to find the following:
* The total amount of time covered by the trace (calculated using TSC values and the cpu hz given)
* A breakdown of how much data of different kinds of records were used
* Per domain:
** Information about [[Domain runstates]]
* For HVM domains, per vcpu:
** Information about [[VCPU runstates]]
** Percentage of time spent in the hypervisor for different ~VMEXITs
** Summary information about guest interrupts
** Summary information for programmed IO
* For HVM domains, per domain:
** Summary of the instruction pointers at which emulations happened, sorted by highest time to lowest
For more complete description of the output, see the [[Summary Reference]] section.
Take a trace on the target system using the following command:
{{{
# xentrace -D -S 32 -e all /tmp/test.trace
}}}
Press Ctrl-C when finished, or use {{{kill -INT}}}.
@@color(red):''Note''@@: Traces can take a significant amount of disk space; the higher the virtualization overhead, the more space they take. ~XenServer deployments will frequently fail in unusual ways if domain 0 runs out of space on the main disk. Move large traces to other storage and delete them quickly after taking them, if possible.
!! Taking traces
!!! Taking a general trace
{{{
# xentrace -D -S 32 -e all /tmp/name.trace
}}}
!!! Taking a 30-second "sample" trace
{{{
# xentrace -D -S 32 -e all -T 30 /tmp/name.trace
}}}
!!! Tracing scheduling
To do a long-running low-overhead trace just to determine what's running when:
{{{
# xentrace -D -S 32 -e 0x21000 /tmp/name.trace
}}}
!! Analysis
!!! Basic 'summary' analysis
Suppose that your cpu is 1.8 GHz, and you're using an Intel box. To get a basic summary output, use the following format:
{{{
$ xenalyze --cpu-hz=1.8G -s file.trace > file.summary
}}}
!!! Seeing how things change over time
To see a breakdown of basic high-level overheads over time for a specific domain at a 1-second, use the interval mode to generate a spreadsheet:
{{{
$ xenalyze --cpu-hz=1.8G --interval-domiain-short-summary=[domain_id] --interval=1 file.trace > file.dN.short-summary.csv
}}}
Then open file.dN.short-summary.csv in a spreadsheet (like gnumeric, openoffice, or excel) and make a graph.
There are three general sources of overhead related to virtualization:
* Processor virtualization
* Memory virtualization (shadow memory overhead)
* Device virtualization
* Overcommittment
!!! Common problems
* High shadow overhead
** No out-of-sync
** Early-unshadow false positives
** Insufficient shadow pagetable memory
* Virtualized devices
** XP SP2 / w2k3eesp1: Lazy TPR
** CD overhead
* Overcommittment
!!! Definitions
At any point in time, virtual cpus (~VCPUs) can be in one of four states:
* ''running'' - Actively scheduled on one physical CPU.
* ''runnable'' - Waiting to run on a CPU.
* ''blocked'' - The guest has voluntarily chosen not to run.
* ''offline'' - Not runnable for any other reason; for example, while handling certain PIO or MMIO instructions; or perhaps during the final phase of live migration.
In addition to the four states above (which are defined by Xen), Xenalyze may define the following states:
* ''waking'' - sub-state of {{{runnable}}}. The VCPU has entered the {{{runnable}}} state and there are free CPUs for it to run on.
* ''contention'' - sub-state of {{{runnable}}}. The VCPU has entered the {{{runnable}}} state and there are no free CPUs for it to run on.
* ''lost'' - possibly running on a CPU which lost records at some point during the trace. See [[Handling lost records]] for more information.
!!! Interpretation
High proportion of time in ''runnable'' compared to ''running'' may mean:
* Contention -- the VCPU is not running because some other VCPU is running.
* After waking, the VCPU typically only runs for a very short time before sleeping again.
!!!Related
[[Domain runstates]] are based on the VCPU runstates of the domain.
Welcome to the {{{xenalyze}}} documentation!
Xenalyze is a tool for analyzing the output of Xen traces generated by the {{{xentrace}}} tool. It is useful for tracking down performance overhead, understanding characteristics of virtualization workloads, and even for debugging problems.
To start begin, click on one of the options below.
* [[Quick-start guide]]: Jump in and figure things out as you go.
* [[Introduction to Xenalyze]]: Learn about xen tracing and the {{{xenalyze}}} analysis tool
* [[Xenalyze Reference]]: Details about commands and trace formats.
* [[Using Xenalyze to Analyze Performance Problems]]
* [[FAQ]]: Answers to common questions
{{{xenalyze}}} was written by [[George Dunlap|mailto:George Dunlap <george.dunlap@eu.citrix.com>]]
Text of this document ''(c)'' Citrix Systems R&D 2008.
~TiddlyWiki ~JavaScript/HTML container ''(c)'' ~UnaMesa Association 2004-2007