diff options
author | nicolargo <nicolas@nicolargo.com> | 2021-08-07 17:29:48 +0200 |
---|---|---|
committer | nicolargo <nicolas@nicolargo.com> | 2021-08-07 17:29:48 +0200 |
commit | 530bc76f383caad668a2f65a5efaf02a25df5a2d (patch) | |
tree | 04032923f9f52626d38e258f4f1db60568bf5adc /docs/_static | |
parent | bdeb414a4c790c10e9ba61089c427372aea9d2b7 (diff) |
Update Flame profiling
Diffstat (limited to 'docs/_static')
-rw-r--r-- | docs/_static/glances-flame.svg | 81 |
1 files changed, 37 insertions, 44 deletions
diff --git a/docs/_static/glances-flame.svg b/docs/_static/glances-flame.svg index 128ee745..6c0c91da 100644 --- a/docs/_static/glances-flame.svg +++ b/docs/_static/glances-flame.svg @@ -1,4 +1,4 @@ -<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg version="1.1" width="1200" height="506" onload="init(evt)" viewBox="0 0 1200 506" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><!--Flame graph stack visualization. See https://github.com/brendangregg/FlameGraph for latest version, and http://www.brendangregg.com/flamegraphs.html for examples.--><!--NOTES: --><defs><linearGradient id="background" y1="0" y2="1" x1="0" x2="0"><stop stop-color="#eeeeee" offset="5%"/><stop stop-color="#eeeeb0" offset="95%"/></linearGradient></defs><style type="text/css"> +<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg version="1.1" width="1200" height="602" onload="init(evt)" viewBox="0 0 1200 602" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:fg="http://github.com/jonhoo/inferno"><!--Flame graph stack visualization. See https://github.com/brendangregg/FlameGraph for latest version, and http://www.brendangregg.com/flamegraphs.html for examples.--><!--NOTES: --><defs><linearGradient id="background" y1="0" y2="1" x1="0" x2="0"><stop stop-color="#eeeeee" offset="5%"/><stop stop-color="#eeeeb0" offset="95%"/></linearGradient></defs><style type="text/css"> text { font-family:"Verdana"; font-size:12px; fill:rgb(0,0,0); } #title { text-anchor:middle; font-size:17px; } #search { opacity:0.1; cursor:pointer; } @@ -24,13 +24,14 @@ function init(evt) { matchedtxt = document.getElementById("matched"); svg = document.getElementsByTagName("svg")[0]; frames = document.getElementById("frames"); + total_samples = parseInt(frames.attributes.total_samples.value); searching = 0; // Use GET parameters to restore a flamegraph's state. var restore_state = function() { var params = get_params(); if (params.x && params.y) - zoom(find_group(document.querySelector('[x="' + params.x + '"][y="' + params.y + '"]'))); + zoom(find_group(document.querySelector('[*|x="' + params.x + '"][y="' + params.y + '"]'))); if (params.s) search(params.s); }; @@ -88,9 +89,9 @@ window.addEventListener("click", function(e) { // set parameters for zoom state var el = target.querySelector("rect"); - if (el && el.attributes && el.attributes.y && el.attributes._orig_x) { + if (el && el.attributes && el.attributes.y && el.attributes["fg:x"]) { var params = get_params() - params.x = el.attributes._orig_x.value; + params.x = el.attributes["fg:x"].value; params.y = el.attributes.y.value; history.replaceState(null, null, parse_params(params)); } @@ -158,15 +159,15 @@ function find_group(node) { return find_group(parent); } function orig_save(e, attr, val) { - if (e.attributes["_orig_" + attr] != undefined) return; + if (e.attributes["fg:orig_" + attr] != undefined) return; if (e.attributes[attr] == undefined) return; if (val == undefined) val = e.attributes[attr].value; - e.setAttribute("_orig_" + attr, val); + e.setAttribute("fg:orig_" + attr, val); } function orig_load(e, attr) { - if (e.attributes["_orig_"+attr] == undefined) return; - e.attributes[attr].value = e.attributes["_orig_" + attr].value; - e.removeAttribute("_orig_" + attr); + if (e.attributes["fg:orig_"+attr] == undefined) return; + e.attributes[attr].value = e.attributes["fg:orig_" + attr].value; + e.removeAttribute("fg:orig_" + attr); } function g_to_text(e) { var text = find_child(e, "title").firstChild.nodeValue; @@ -214,42 +215,34 @@ function update_text(e) { } // zoom function zoom_reset(e) { - if (e.attributes != undefined) { - orig_load(e, "x"); - orig_load(e, "width"); + if (e.tagName == "rect") { + e.attributes.x.value = format_percent(100 * parseInt(e.attributes["fg:x"].value) / total_samples); + e.attributes.width.value = format_percent(100 * parseInt(e.attributes["fg:w"].value) / total_samples); } if (e.childNodes == undefined) return; for(var i = 0, c = e.childNodes; i < c.length; i++) { zoom_reset(c[i]); } } -function zoom_child(e, x, ratio) { - if (e.attributes != undefined) { - if (e.attributes.x != undefined) { - orig_save(e, "x"); - e.attributes.x.value = format_percent((parseFloat(e.attributes.x.value) - x) * ratio); - if (e.tagName == "text") { - e.attributes.x.value = format_percent(parseFloat(find_child(e.parentNode, "rect[x]").attributes.x.value) + (100 * 3 / frames.attributes.width.value)); - } - } - if (e.attributes.width != undefined) { - orig_save(e, "width"); - e.attributes.width.value = format_percent(parseFloat(e.attributes.width.value) * ratio); - } +function zoom_child(e, x, zoomed_width_samples) { + if (e.tagName == "text") { + var parent_x = parseFloat(find_child(e.parentNode, "rect[x]").attributes.x.value); + e.attributes.x.value = format_percent(parent_x + (100 * 3 / frames.attributes.width.value)); + } else if (e.tagName == "rect") { + e.attributes.x.value = format_percent(100 * (parseInt(e.attributes["fg:x"].value) - x) / zoomed_width_samples); + e.attributes.width.value = format_percent(100 * parseInt(e.attributes["fg:w"].value) / zoomed_width_samples); } if (e.childNodes == undefined) return; for(var i = 0, c = e.childNodes; i < c.length; i++) { - zoom_child(c[i], x, ratio); + zoom_child(c[i], x, zoomed_width_samples); } } function zoom_parent(e) { if (e.attributes) { if (e.attributes.x != undefined) { - orig_save(e, "x"); e.attributes.x.value = "0.0%"; } if (e.attributes.width != undefined) { - orig_save(e, "width"); e.attributes.width.value = "100.0%"; } } @@ -260,20 +253,17 @@ function zoom_parent(e) { } function zoom(node) { var attr = find_child(node, "rect").attributes; - var width = parseFloat(attr.width.value); - var xmin = parseFloat(attr.x.value); + var width = parseInt(attr["fg:w"].value); + var xmin = parseInt(attr["fg:x"].value); var xmax = xmin + width; var ymin = parseFloat(attr.y.value); - var ratio = 100 / width; - // XXX: Workaround for JavaScript float issues (fix me) - var fudge = 0.001; unzoombtn.classList.remove("hide"); var el = frames.children; for (var i = 0; i < el.length; i++) { var e = el[i]; var a = find_child(e, "rect").attributes; - var ex = parseFloat(a.x.value); - var ew = parseFloat(a.width.value); + var ex = parseInt(a["fg:x"].value); + var ew = parseInt(a["fg:w"].value); // Is it an ancestor if (!inverted) { var upstack = parseFloat(a.y.value) > ymin; @@ -282,7 +272,7 @@ function zoom(node) { } if (upstack) { // Direct ancestor - if (ex <= xmin && (ex+ew+fudge) >= xmax) { + if (ex <= xmin && (ex+ew) >= xmax) { e.classList.add("parent"); zoom_parent(e); update_text(e); @@ -294,11 +284,11 @@ function zoom(node) { // Children maybe else { // no common path - if (ex < xmin || ex + fudge >= xmax) { + if (ex < xmin || ex >= xmax) { e.classList.add("hide"); } else { - zoom_child(e, xmin, ratio); + zoom_child(e, xmin, width); update_text(e); } } @@ -347,17 +337,21 @@ function search(term) { var maxwidth = 0; for (var i = 0; i < el.length; i++) { var e = el[i]; + // Skip over frames which are either not visible, or below the zoomed-to frame + if (e.classList.contains("hide") || e.classList.contains("parent")) { + continue; + } var func = g_to_func(e); var rect = find_child(e, "rect"); if (func == null || rect == null) continue; // Save max width. Only works as we have a root frame - var w = parseFloat(rect.attributes.width.value); + var w = parseInt(rect.attributes["fg:w"].value); if (w > maxwidth) maxwidth = w; if (func.match(re)) { // highlight - var x = parseFloat(rect.attributes.x.value); + var x = parseInt(rect.attributes["fg:x"].value); orig_save(rect, "fill"); rect.attributes.fill.value = searchcolor; // remember matches @@ -397,11 +391,10 @@ function search(term) { // Step through frames saving only the biggest bottom-up frames // thanks to the sort order. This relies on the tree property // where children are always smaller than their parents. - var fudge = 0.0001; // JavaScript floating point for (var k in keys) { - var x = parseFloat(keys[k]); + var x = parseInt(keys[k]); var w = matches[keys[k]]; - if (x >= lastx + lastw - fudge) { + if (x >= lastx + lastw) { count += w; lastx = x; lastw = w; @@ -416,4 +409,4 @@ function search(term) { function format_percent(n) { return n.toFixed(4) + "%"; } -]]></script><rect x="0" y="0" width="100%" height="506" fill="url(#background)"/><text id="title" x="50.0000%" y="24.00">./venv/bin/py-spy record -o ./docs/_static/glances-flame.svg -d 60 -s --pid 2656063</text><text id="details" x="10" y="40.00"> </text><text id="unzoom" class="hide" x="10" y="24.00">Reset Zoom</text><text id="search" x="1090" y="24.00">Search</text><text id="matched" x="1090" y="495.00"> </text><svg id="frames" x="10" width="1180"><g><title>_bootstrap (threading.py:890) (2 samples, 0.36%)</title><rect x="0.0000%" y="84" width="0.3636%" height="15" fill="rgb(227,0,7)"/><text x="0.2500%" y="94.50"></text></g><g><title>_bootstrap_inner (threading.py:932) (2 samples, 0.36%)</title><rect x="0.0000%" y="100" width="0.3636%" height="15" fill="rgb(217,0,24)"/><text x="0.2500%" y="110.50"></text></g><g><title>run (glances/plugins/glances_ports.py:246) (2 samples, 0.36%)</title><rect x="0.0000%" y="116" width="0.3636%" height="15" fill="rgb(221,193,54)"/><text x="0.2500%" y="126.50"></text></g><g><title>update (glances/plugins/glances_diskio.py:106) (1 samples, 0.18%)</title><rect x="0.5455%" y="244" width="0.1818%" height="15" fill="rgb(248,212,6)"/><text x="0.7955%" y="254.50"></text></g><g><title>is_hide (glances/plugins/glances_plugin.py:869) (1 samples, 0.18%)</title><rect x="0.5455%" y="260" width="0.1818%" height="15" fill="rgb(208,68,35)"/><text x="0.7955%" y="270.50"></text></g><g><title><listcomp> (glances/plugins/glances_plugin.py:869) (1 samples, 0.18%)</title><rect x="0.5455%" y="276" width="0.1818%" height="15" fill="rgb(232,128,0)"/><text x="0.7955%" y="286.50"></text></g><g><title>match (re.py:191) (1 samples, 0.18%)</title><rect x="0.5455%" y="292" width="0.1818%" height="15" fill="rgb(207,160,47)"/><text x="0.7955%" y="302.50"></text></g><g><title>disk_io_counters (psutil/__init__.py:2059) (2 samples, 0.36%)</title><rect x="0.7273%" y="260" width="0.3636%" height="15" fill="rgb(228,23,34)"/><text x="0.9773%" y="270.50"></text></g><g><title>disk_io_counters (psutil/_pslinux.py:1166) (2 samples, 0.36%)</title><rect x="0.7273%" y="276" width="0.3636%" height="15" fill="rgb(218,30,26)"/><text x="0.9773%" y="286.50"></text></g><g><title>read_procfs (psutil/_pslinux.py:1118) (2 samples, 0.36%)</title><rect x="0.7273%" y="292" width="0.3636%" height="15" fill="rgb(220,122,19)"/><text x="0.9773%" y="302.50"></text></g><g><title>run (psutil/_common.py:648) (1 samples, 0.18%)</title><rect x="1.0909%" y="292" width="0.1818%" height="15" fill="rgb(250,228,42)"/><text x="1.3409%" y="302.50"></text></g><g><title>_remove_dead_reminders (psutil/_common.py:632) (1 samples, 0.18%)</title><rect x="1.0909%" y="308" width="0.1818%" height="15" fill="rgb(240,193,28)"/><text x="1.3409%" y="318.50"></text></g><g><title>run (psutil/_common.py:667) (1 samples, 0.18%)</title><rect x="1.2727%" y="292" width="0.1818%" height="15" fill="rgb(216,20,37)"/><text x="1.5227%" y="302.50"></text></g><g><title>disk_io_counters (psutil/__init__.py:2063) (5 samples, 0.91%)</title><rect x="1.0909%" y="260" width="0.9091%" height="15" fill="rgb(206,188,39)"/><text x="1.3409%" y="270.50"></text></g><g><title>wrap_numbers (psutil/_common.py:702) (5 samples, 0.91%)</title><rect x="1.0909%" y="276" width="0.9091%" height="15" fill="rgb(217,207,13)"/><text x="1.3409%" y="286.50"></text></g><g><title>run (psutil/_common.py:671) (3 samples, 0.55%)</title><rect x="1.4545%" y="292" width="0.5455%" height="15" fill="rgb(231,73,38)"/><text x="1.7045%" y="302.50"></text></g><g><title>update (glances/plugins/glances_diskio.py:89) (8 samples, 1.45%)</title><rect x="0.7273%" y="244" width="1.4545%" height="15" fill="rgb(225,20,46)"/><text x="0.9773%" y="254.50"></text></g><g><title>disk_io_counters (psutil/__init__.py:2067) (1 samples, 0.18%)</title><rect x="2.0000%" y="260" width="0.1818%" height="15" fill="rgb(210,31,41)"/><text x="2.2500%" y="270.50"></text></g><g><title>get_environ_proxies (requests/utils.py:776) (1 samples, 0.18%)</title><rect x="2.1818%" y="372" width="0.1818%" height="15" fill="rgb(221,200,47)"/><text x="2.4318%" y="382.50"></text></g><g><title>should_bypass_proxies (requests/utils.py:760) (1 samples, 0.18%)</title><rect x="2.1818%" y="388" width="0.1818%" height="15" fill="rgb(226,26,5)"/><text x="2.4318%" y="398.50"></text></g><g><title>proxy_bypass_environment (urllib/request.py:2529) (1 samples, 0.18%)</title><rect x="2.1818%" y="404" width="0.1818%" height="15" fill="rgb(249,33,26)"/><text x="2.4318%" y="414.50"></text></g><g><title>getproxies_environment (urllib/request.py:2512) (1 samples, 0.18%)</title><rect x="2.1818%" y="420" width="0.1818%" height="15" fill="rgb(235,183,28)"/><text x="2.4318%" y="430.50"></text></g><g><title>__iter__ (_collections_abc.py:743) (1 samples, 0.18%)</title><rect x="2.1818%" y="436" width="0.1818%" height="15" fill="rgb(221,5,38)"/><text x="2.4318%" y="446.50"></text></g><g><title>__iter__ (os.py:697) (1 samples, 0.18%)</title><rect x="2.1818%" y="452" width="0.1818%" height="15" fill="rgb(247,18,42)"/><text x="2.4318%" y="462.50"></text></g><g><title>decode (os.py:753) (1 samples, 0.18%)</title><rect x="2.1818%" y="468" width="0.1818%" height="15" fill="rgb(241,131,45)"/><text x="2.4318%" y="478.50"></text></g><g><title>request (requests/sessions.py:532) (2 samples, 0.36%)</title><rect x="2.1818%" y="340" width="0.3636%" height="15" fill="rgb(249,31,29)"/><text x="2.4318%" y="350.50"></text></g><g><title>merge_environment_settings (requests/sessions.py:711) (2 samples, 0.36%)</title><rect x="2.1818%" y="356" width="0.3636%" height="15" fill="rgb(225,111,53)"/><text x="2.4318%" y="366.50"></text></g><g><title>get_environ_proxies (requests/utils.py:779) (1 samples, 0.18%)</title><rect x="2.3636%" y="372" width="0.1818%" height="15" fill="rgb(238,160,17)"/><text x="2.6136%" y="382.50"></text></g><g><title>getproxies_environment (urllib/request.py:2502) (1 samples, 0.18%)</title><rect x="2.3636%" y="388" width="0.1818%" height="15" fill="rgb(214,148,48)"/><text x="2.6136%" y="398.50"></text></g><g><title>__iter__ (_collections_abc.py:743) (1 samples, 0.18%)</title><rect x="2.3636%" y="404" width="0.1818%" height="15" fill="rgb(232,36,49)"/><text x="2.6136%" y="414.50"></text></g><g><title>update (glances/plugins/glances_docker.py:186) (3 samples, 0.55%)</title><rect x="2.1818%" y="244" width="0.5455%" height="15" fill="rgb(209,103,24)"/><text x="2.4318%" y="254.50"></text></g><g><title>version (docker/client.py:207) (3 samples, 0.55%)</title><rect x="2.1818%" y="260" width="0.5455%" height="15" fill="rgb(229,88,8)"/><text x="2.4318%" y="270.50"></text></g><g><title>version (docker/api/daemon.py:181) (3 samples, 0.55%)</title><rect x="2.1818%" y="276" width="0.5455%" height="15" fill="rgb(213,181,19)"/><text x="2.4318%" y="286.50"></text></g><g><title>inner (docker/utils/decorators.py:46) (3 samples, 0.55%)</title><rect x="2.1818%" y="292" width="0.5455%" height="15" fill="rgb(254,191,54)"/><text x="2.4318%" y="302.50"></text></g><g><title>_get (docker/api/client.py:237) (3 samples, 0.55%)</title><rect x="2.1818%" y="308" width="0.5455%" height="15" fill="rgb(241,83,37)"/><text x="2.4318%" y="318.50"></text></g><g><title>get (requests/sessions.py:555) (3 samples, 0.55%)</title><rect x="2.1818%" y="324" width="0.5455%" height="15" fill="rgb(233,36,39)"/><text x="2.4318%" y="334.50"></text></g><g><title>request (requests/sessions.py:542) (1 samples, 0.18%)</title><rect x="2.5455%" y="340" width="0.1818%" height="15" fill="rgb(226,3,54)"/><text x="2.7955%" y="350.50"></text></g><g><title>send (requests/sessions.py:655) (1 samples, 0.18%)</title><rect x="2.5455%" y="356" width="0.1818%" height="15" fill="rgb(245,192,40)"/><text x="2.7955%" y="366.50"></text></g><g><title>send (requests/adapters.py:439) (1 samples, 0.18%)</title><rect x="2.5455%" y="372" width="0.1818%" height="15" fill="rgb(238,167,29)"/><text x="2.7955%" y="382.50"></text></g><g><title>urlopen (urllib3/connectionpool.py:699) (1 samples, 0.18%)</title><rect x="2.5455%" y="388" width="0.1818%" height="15" fill="rgb(232,182,51)"/><text x="2.7955%" y="398.50"></text></g><g><title>_make_request (urllib3/connectionpool.py:440) (1 samples, 0.18%)</title><rect x="2.5455%" y="404" width="0.1818%" height="15" fill="rgb(231,60,39)"/><text x="2.7955%" y="414.50"></text></g><g><title>getresponse (http/client.py:1347) (1 samples, 0.18%)</title><rect x="2.5455%" y="420" width="0.1818%" height="15" fill="rgb(208,69,12)"/><text x="2.7955%" y="430.50"></text></g><g><title>begin (http/client.py:338) (1 samples, 0.18%)</title><rect x="2.5455%" y="436" width="0.1818%" height="15" fill="rgb(235,93,37)"/><text x="2.7955%" y="446.50"></text></g><g><title>get (email/message.py:470) (1 samples, 0.18%)</title><rect x="2.5455%" y="452" width="0.1818%" height="15" fill="rgb(213,116,39)"/><text x="2.7955%" y="462.50"></text></g><g><title>update (glances/plugins/glances_ip.py:85) (1 samples, 0.18%)</title><rect x="2.7273%" y="244" width="0.1818%" height="15" fill="rgb(222,207,29)"/><text x="2.9773%" y="254.50"></text></g><g><title>update (glances/plugins/glances_ip.py:86) (4 samples, 0.73%)</title><rect x="2.9091%" y="244" width="0.7273%" height="15" fill="rgb(206,96,30)"/><text x="3.1591%" y="254.50"></text></g><g><title>update (glances/plugins/glances_ip.py:88) (2 samples, 0.36%)</title><rect x="3.6364%" y="244" width="0.3636%" height="15" fill="rgb(218,138,4)"/><text x="3.8864%" y="254.50"></text></g><g><title>update (glances/plugins/glances_mem.py:82) (1 samples, 0.18%)</title><rect x="4.0000%" y="244" width="0.1818%" height="15" fill="rgb(250,191,14)"/><text x="4.2500%" y="254.50"></text></g><g><title>virtual_memory (psutil/__init__.py:1963) (1 samples, 0.18%)</title><rect x="4.0000%" y="260" width="0.1818%" height="15" fill="rgb(239,60,40)"/><text x="4.2500%" y="270.50"></text></g><g><title>virtual_memory (psutil/_pslinux.py:435) (1 samples, 0.18%)</title><rect x="4.0000%" y="276" width="0.1818%" height="15" fill="rgb(206,27,48)"/><text x="4.2500%" y="286.50"></text></g><g><title>update (glances/plugins/glances_percpu.py:65) (1 samples, 0.18%)</title><rect x="4.1818%" y="244" width="0.1818%" height="15" fill="rgb(225,35,8)"/><text x="4.4318%" y="254.50"></text></g><g><title>process_iter (psutil/__init__.py:1425) (1 samples, 0.18%)</title><rect x="4.3636%" y="292" width="0.1818%" height="15" fill="rgb(250,213,24)"/><text x="4.6136%" y="302.50"></text></g><g><title>pids (psutil/__init__.py:1365) (1 samples, 0.18%)</title><rect x="4.3636%" y="308" width="0.1818%" height="15" fill="rgb(247,123,22)"/><text x="4.6136%" y="318.50"></text></g><g><title>pids (psutil/_pslinux.py:1512) (1 samples, 0.18%)</title><rect x="4.3636%" y="324" width="0.1818%" height="15" fill="rgb(231,138,38)"/><text x="4.6136%" y="334.50"></text></g><g><title><listcomp> (psutil/_pslinux.py:1512) (1 samples, 0.18%)</title><rect x="4.3636%" y="340" width="0.1818%" height="15" fill="rgb(231,145,46)"/><text x="4.6136%" y="350.50"></text></g><g><title>is_running (psutil/__init__.py:568) (1 samples, 0.18%)</title><rect x="4.5455%" y="308" width="0.1818%" height="15" fill="rgb(251,118,11)"/><text x="4.7955%" y="318.50"></text></g><g><title>_init (psutil/__init__.py:337) (1 samples, 0.18%)</title><rect x="5.2727%" y="340" width="0.1818%" height="15" fill="rgb(217,147,25)"/><text x="5.5227%" y="350.50"></text></g><g><title>_init (psutil/__init__.py:341) (1 samples, 0.18%)</title><rect x="5.4545%" y="340" width="0.1818%" height="15" fill="rgb(247,81,37)"/><text x="5.7045%" y="350.50"></text></g><g><title>_init (psutil/__init__.py:342) (1 samples, 0.18%)</title><rect x="5.6364%" y="340" width="0.1818%" height="15" fill="rgb(209,12,38)"/><text x="5.8864%" y="350.50"></text></g><g><title>_init (psutil/__init__.py:345) (1 samples, 0.18%)</title><rect x="5.8182%" y="340" width="0.1818%" height="15" fill="rgb(227,1,9)"/><text x="6.0682%" y="350.50"></text></g><g><title>_init (psutil/__init__.py:348) (1 samples, 0.18%)</title><rect x="6.0000%" y="340" width="0.1818%" height="15" fill="rgb(248,47,43)"/><text x="6.2500%" y="350.50"></text></g><g><title>__init__ (psutil/_pslinux.py:1599) (1 samples, 0.18%)</title><rect x="6.0000%" y="356" width="0.1818%" height="15" fill="rgb(221,10,30)"/><text x="6.2500%" y="366.50"></text></g><g><title>get_procfs_path (psutil/_common.py:750) (1 samples, 0.18%)</title><rect x="6.0000%" y="372" width="0.1818%" height="15" fill="rgb(210,229,1)"/><text x="6.2500%" y="382.50"></text></g><g><title>_parse_stat_file (psutil/_pslinux.py:1618) (10 samples, 1.82%)</title><rect x="6.5455%" y="436" width="1.8182%" height="15" fill="rgb(222,148,37)"/><text x="6.7955%" y="446.50">_..</text></g><g><title>open_binary (psutil/_common.py:711) (10 samples, 1.82%)</title><rect x="6.5455%" y="452" width="1.8182%" height="15" fill="rgb(234,67,33)"/><text x="6.7955%" y="462.50">o..</text></g><g><title>create_time (psutil/_pslinux.py:1788) (29 samples, 5.27%)</title><rect x="6.1818%" y="388" width="5.2727%" height="15" fill="rgb(247,98,35)"/><text x="6.4318%" y="398.50">create..</text></g><g><title>wrapper (psutil/_pslinux.py:1576) (29 samples, 5.27%)</title><rect x="6.1818%" y="404" width="5.2727%" height="15" fill="rgb(247,138,52)"/><text x="6.4318%" y="414.50">wrappe..</text></g><g><title>wrapper (psutil/_common.py:450) (28 samples, 5.09%)</title><rect x="6.3636%" y="420" width="5.0909%" height="15" fill="rgb(213,79,30)"/><text x="6.6136%" y="430.50">wrappe..</text></g><g><title>_parse_stat_file (psutil/_pslinux.py:1619) (17 samples, 3.09%)</title><rect x="8.3636%" y="436" width="3.0909%" height="15" fill="rgb(246,177,23)"/><text x="8.6136%" y="446.50">_pa..</text></g><g><title>_init (psutil/__init__.py:354) (30 samples, 5.45%)</title><rect x="6.1818%" y="340" width="5.4545%" height="15" fill="rgb(230,62,27)"/><text x="6.4318%" y="350.50">_init (..</text></g><g><title>create_time (psutil/__init__.py:710) (30 samples, 5.45%)</title><rect x="6.1818%" y="356" width="5.4545%" height="15" fill="rgb(216,154,8)"/><text x="6.4318%" y="366.50">create_..</text></g><g><title>wrapper (psutil/_pslinux.py:1576) (30 samples, 5.45%)</title><rect x="6.1818%" y="372" width="5.4545%" height="15" fill="rgb(244,35,45)"/><text x="6.4318%" y="382.50">wrapper..</text></g><g><title>create_time (psutil/_pslinux.py:1794) (1 samples, 0.18%)</title><rect x="11.4545%" y="388" width="0.1818%" height="15" fill="rgb(251,115,12)"/><text x="11.7045%" y="398.50"></text></g><g><title>process_iter (psutil/__init__.py:1443) (40 samples, 7.27%)</title><rect x="4.5455%" y="292" width="7.2727%" height="15" fill="rgb(240,54,50)"/><text x="4.7955%" y="302.50">process_it..</text></g><g><title>is_running (psutil/__init__.py:581) (39 samples, 7.09%)</title><rect x="4.7273%" y="308" width="7.0909%" height="15" fill="rgb(233,84,52)"/><text x="4.9773%" y="318.50">is_running..</text></g><g><title>__init__ (psutil/__init__.py:326) (37 samples, 6.73%)</title><rect x="5.0909%" y="324" width="6.7273%" height="15" fill="rgb(207,117,47)"/><text x="5.3409%" y="334.50">__init__ ..</text></g><g><title>_init (psutil/__init__.py:374) (1 samples, 0.18%)</title><rect x="11.6364%" y="340" width="0.1818%" height="15" fill="rgb(249,43,39)"/><text x="11.8864%" y="350.50"></text></g><g><title>process_iter (psutil/__init__.py:1444) (2 samples, 0.36%)</title><rect x="11.8182%" y="292" width="0.3636%" height="15" fill="rgb(209,38,44)"/><text x="12.0682%" y="302.50"></text></g><g><title>as_dict (psutil/__init__.py:505) (1 samples, 0.18%)</title><rect x="12.3636%" y="308" width="0.1818%" height="15" fill="rgb(236,212,23)"/><text x="12.6136%" y="318.50"></text></g><g><title>as_dict (psutil/__init__.py:509) (1 samples, 0.18%)</title><rect x="12.5455%" y="308" width="0.1818%" height="15" fill="rgb(242,79,21)"/><text x="12.7955%" y="318.50"></text></g><g><title>as_dict (psutil/__init__.py:511) (1 samples, 0.18%)</title><rect x="12.7273%" y="308" width="0.1818%" height="15" fill="rgb(211,96,35)"/><text x="12.9773%" y="318.50"></text></g><g><title>__enter__ (contextlib.py:111) (1 samples, 0.18%)</title><rect x="13.0909%" y="324" width="0.1818%" height="15" fill="rgb(253,215,40)"/><text x="13.3409%" y="334.50"></text></g><g><title>oneshot (psutil/__init__.py:475) (2 samples, 0.36%)</title><rect x="13.2727%" y="340" width="0.3636%" height="15" fill="rgb(211,81,21)"/><text x="13.5227%" y="350.50"></text></g><g><title>__enter__ (contextlib.py:113) (5 samples, 0.91%)</title><rect x="13.2727%" y="324" width="0.9091%" height="15" fill="rgb(208,190,38)"/><text x="13.5227%" y="334.50"></text></g><g><title>oneshot (psutil/__init__.py:484) (3 samples, 0.55%)</title><rect x="13.6364%" y="340" width="0.5455%" height="15" fill="rgb(235,213,38)"/><text x="13.8864%" y="350.50"></text></g><g><title>oneshot_enter (psutil/_pslinux.py:1662) (3 samples, 0.55%)</title><rect x="13.6364%" y="356" width="0.5455%" height="15" fill="rgb(237,122,38)"/><text x="13.8864%" y="366.50"></text></g><g><title>cache_activate (psutil/_common.py:457) (1 samples, 0.18%)</title><rect x="14.0000%" y="372" width="0.1818%" height="15" fill="rgb(244,218,35)"/><text x="14.2500%" y="382.50"></text></g><g><title>as_dict (psutil/__init__.py:518) (8 samples, 1.45%)</title><rect x="12.9091%" y="308" width="1.4545%" height="15" fill="rgb(240,68,47)"/><text x="13.1591%" y="318.50"></text></g><g><title>helper (contextlib.py:240) (1 samples, 0.18%)</title><rect x="14.1818%" y="324" width="0.1818%" height="15" fill="rgb(210,16,53)"/><text x="14.4318%" y="334.50"></text></g><g><title>as_dict (psutil/__init__.py:519) (1 samples, 0.18%)</title><rect x="14.3636%" y="308" width="0.1818%" height="15" fill="rgb(235,124,12)"/><text x="14.6136%" y="318.50"></text></g><g><title>as_dict (psutil/__init__.py:522) (1 samples, 0.18%)</title><rect x="14.5455%" y="308" width="0.1818%" height="15" fill="rgb(224,169,11)"/><text x="14.7955%" y="318.50"></text></g><g><title>pid (psutil/__init__.py:423) (1 samples, 0.18%)</title><rect x="14.5455%" y="324" width="0.1818%" height="15" fill="rgb(250,166,2)"/><text x="14.7955%" y="334.50"></text></g><g><title>as_dict (psutil/__init__.py:524) (2 samples, 0.36%)</title><rect x="14.7273%" y="308" width="0.3636%" height="15" fill="rgb(242,216,29)"/><text x="14.9773%" y="318.50"></text></g><g><title>cmdline (psutil/_pslinux.py:1696) (1 samples, 0.18%)</title><rect x="15.6364%" y="356" width="0.1818%" height="15" fill="rgb(230,116,27)"/><text x="15.8864%" y="366.50"></text></g><g><title>open_text (psutil/_common.py:725) (1 samples, 0.18%)</title><rect x="15.6364%" y="372" width="0.1818%" height="15" fill="rgb(228,99,48)"/><text x="15.8864%" y="382.50"></text></g><g><title>cmdline (psutil/__init__.py:677) (3 samples, 0.55%)</title><rect x="15.4545%" y="324" width="0.5455%" height="15" fill="rgb(253,11,6)"/><text x="15.7045%" y="334.50"></text></g><g><title>wrapper (psutil/_pslinux.py:1576) (3 samples, 0.55%)</title><rect x="15.4545%" y="340" width="0.5455%" height="15" fill="rgb(247,143,39)"/><text x="15.7045%" y="350.50"></text></g><g><title>cmdline (psutil/_pslinux.py:1715) (1 samples, 0.18%)</title><rect x="15.8182%" y="356" width="0.1818%" height="15" fill="rgb(236,97,10)"/><text x="16.0682%" y="366.50"></text></g><g><title>cpu_percent (psutil/__init__.py:1007) (1 samples, 0.18%)</title><rect x="16.0000%" y="324" width="0.1818%" height="15" fill="rgb(233,208,19)"/><text x="16.2500%" y="334.50"></text></g><g><title>cpu_percent (psutil/__init__.py:1032) (2 samples, 0.36%)</title><rect x="16.1818%" y="324" width="0.3636%" height="15" fill="rgb(216,164,2)"/><text x="16.4318%" y="334.50"></text></g><g><title>cpu_percent (psutil/__init__.py:980) (1 samples, 0.18%)</title><rect x="16.5455%" y="324" width="0.1818%" height="15" fill="rgb(220,129,5)"/><text x="16.7955%" y="334.50"></text></g><g><title>cpu_count (psutil/__init__.py:1576) (1 samples, 0.18%)</title><rect x="16.5455%" y="340" width="0.1818%" height="15" fill="rgb(242,17,10)"/><text x="16.7955%" y="350.50"></text></g><g><title>cpu_count_logical (psutil/_pslinux.py:633) (1 samples, 0.18%)</title><rect x="16.5455%" y="356" width="0.1818%" height="15" fill="rgb(242,107,0)"/><text x="16.7955%" y="366.50"></text></g><g><title>cpu_percent (psutil/__init__.py:995) (1 samples, 0.18%)</title><rect x="16.7273%" y="324" width="0.1818%" height="15" fill="rgb(251,28,31)"/><text x="16.9773%" y="334.50"></text></g><g><title>wrapper (psutil/_pslinux.py:1576) (1 samples, 0.18%)</title><rect x="16.7273%" y="340" width="0.1818%" height="15" fill="rgb(233,223,10)"/><text x="16.9773%" y="350.50"></text></g><g><title>cpu_times (psutil/_pslinux.py:1775) (1 samples, 0.18%)</title><rect x="16.7273%" y="356" width="0.1818%" height="15" fill="rgb(215,21,27)"/><text x="16.9773%" y="366.50"></text></g><g><title>cpu_percent (psutil/__init__.py:996) (1 samples, 0.18%)</title><rect x="16.9091%" y="324" width="0.1818%" height="15" fill="rgb(232,23,21)"/><text x="17.1591%" y="334.50"></text></g><g><title>gids (psutil/_pslinux.py:2152) (1 samples, 0.18%)</title><rect x="17.2727%" y="356" width="0.1818%" height="15" fill="rgb(244,5,23)"/><text x="17.5227%" y="366.50"></text></g><g><title>gids (psutil/_pslinux.py:2153) (3 samples, 0.55%)</title><rect x="17.4545%" y="356" width="0.5455%" height="15" fill="rgb(226,81,46)"/><text x="17.7045%" y="366.50"></text></g><g><title>gids (psutil/__init__.py:739) (6 samples, 1.09%)</title><rect x="17.0909%" y="324" width="1.0909%" height="15" fill="rgb(247,70,30)"/><text x="17.3409%" y="334.50"></text></g><g><title>wrapper (psutil/_pslinux.py:1576) (5 samples, 0.91%)</title><rect x="17.2727%" y="340" width="0.9091%" height="15" fill="rgb(212,68,19)"/><text x="17.5227%" y="350.50"></text></g><g><title>gids (psutil/_pslinux.py:2154) (1 samples, 0.18%)</title><rect x="18.0000%" y="356" width="0.1818%" height="15" fill="rgb(240,187,13)"/><text x="18.2500%" y="366.50"></text></g><g><title>io_counters (psutil/_pslinux.py:1740) (5 samples, 0.91%)</title><rect x="18.3636%" y="356" width="0.9091%" height="15" fill="rgb(223,113,26)"/><text x="18.6136%" y="366.50"></text></g><g><title>open_binary (psutil/_common.py:711) (5 samples, 0.91%)</title><rect x="18.3636%" y="372" width="0.9091%" height="15" fill="rgb(206,192,2)"/><text x="18.6136%" y="382.50"></text></g><g><title>io_counters (psutil/_pslinux.py:1741) (3 samples, 0.55%)</title><rect x="19.2727%" y="356" width="0.5455%" height="15" fill="rgb(241,108,4)"/><text x="19.5227%" y="366.50"></text></g><g><title>io_counters (psutil/_pslinux.py:1744) (1 samples, 0.18%)</title><rect x="19.8182%" y="356" width="0.1818%" height="15" fill="rgb(247,173,49)"/><text x="20.0682%" y="366.50"></text></g><g><title>wrapper (psutil/_pslinux.py:1576) (12 samples, 2.18%)</title><rect x="18.1818%" y="340" width="2.1818%" height="15" fill="rgb(224,114,35)"/><text x="18.4318%" y="350.50">w..</text></g><g><title>io_counters (psutil/_pslinux.py:1751) (2 samples, 0.36%)</title><rect x="20.0000%" y="356" width="0.3636%" height="15" fill="rgb(245,159,27)"/><text x="20.2500%" y="366.50"></text></g><g><title>__init__ (psutil/_common.py:279) (1 samples, 0.18%)</title><rect x="21.0909%" y="372" width="0.1818%" height="15" fill="rgb(245,172,44)"/><text x="21.3409%" y="382.50"></text></g><g><title>__init__ (psutil/_common.py:338) (3 samples, 0.55%)</title><rect x="20.9091%" y="356" width="0.5455%" height="15" fill="rgb(236,23,11)"/><text x="21.1591%" y="366.50"></text></g><g><title>__init__ (psutil/_common.py:280) (1 samples, 0.18%)</title><rect x="21.2727%" y="372" width="0.1818%" height="15" fill="rgb(205,117,38)"/><text x="21.5227%" y="382.50"></text></g><g><title>io_counters (psutil/__init__.py:763) (19 samples, 3.45%)</title><rect x="18.1818%" y="324" width="3.4545%" height="15" fill="rgb(237,72,25)"/><text x="18.4318%" y="334.50">io_..</text></g><g><title>wrapper (psutil/_pslinux.py:1578) (7 samples, 1.27%)</title><rect x="20.3636%" y="340" width="1.2727%" height="15" fill="rgb(244,70,9)"/><text x="20.6136%" y="350.50"></text></g><g><title>__init__ (psutil/_common.py:344) (1 samples, 0.18%)</title><rect x="21.4545%" y="356" width="0.1818%" height="15" fill="rgb(217,125,39)"/><text x="21.7045%" y="366.50"></text></g><g><title>memory_percent (psutil/__init__.py:1103) (1 samples, 0.18%)</title><rect x="21.6364%" y="324" width="0.1818%" height="15" fill="rgb(235,36,10)"/><text x="21.8864%" y="334.50"></text></g><g><title>name (psutil/__init__.py:617) (3 samples, 0.55%)</title><rect x="21.8182%" y="324" width="0.5455%" height="15" fill="rgb(251,123,47)"/><text x="22.0682%" y="334.50"></text></g><g><title>wrapper (psutil/_pslinux.py:1576) (3 samples, 0.55%)</title><rect x="21.8182%" y="340" width="0.5455%" height="15" fill="rgb(221,13,13)"/><text x="22.0682%" y="350.50"></text></g><g><title>name (psutil/__init__.py:618) (1 samples, 0.18%)</title><rect x="22.3636%" y="324" width="0.1818%" height="15" fill="rgb(238,131,9)"/><text x="22.6136%" y="334.50"></text></g><g><title>cmdline (psutil/_pslinux.py:1696) (3 samples, 0.55%)</title><rect x="22.7273%" y="372" width="0.5455%" height="15" fill="rgb(211,50,8)"/><text x="22.9773%" y="382.50"></text></g><g><title>open_text (psutil/_common.py:725) (3 samples, 0.55%)</title><rect x="22.7273%" y="388" width="0.5455%" height="15" fill="rgb(245,182,24)"/><text x="22.9773%" y="398.50"></text></g><g><title>name (psutil/__init__.py:624) (6 samples, 1.09%)</title><rect x="22.5455%" y="324" width="1.0909%" height="15" fill="rgb(242,14,37)"/><text x="22.7955%" y="334.50"></text></g><g><title>cmdline (psutil/__init__.py:677) (6 samples, 1.09%)</title><rect x="22.5455%" y="340" width="1.0909%" height="15" fill="rgb(246,228,12)"/><text x="22.7955%" y="350.50"></text></g><g><title>wrapper (psutil/_pslinux.py:1576) (6 samples, 1.09%)</title><rect x="22.5455%" y="356" width="1.0909%" height="15" fill="rgb(213,55,15)"/><text x="22.7955%" y="366.50"></text></g><g><title>cmdline (psutil/_pslinux.py:1697) (2 samples, 0.36%)</title><rect x="23.2727%" y="372" width="0.3636%" height="15" fill="rgb(209,9,3)"/><text x="23.5227%" y="382.50"></text></g><g><title>name (psutil/__init__.py:629) (1 samples, 0.18%)</title><rect x="23.6364%" y="324" width="0.1818%" height="15" fill="rgb(230,59,30)"/><text x="23.8864%" y="334.50"></text></g><g><title>basename (posixpath.py:144) (1 samples, 0.18%)</title><rect x="23.6364%" y="340" width="0.1818%" height="15" fill="rgb(209,121,21)"/><text x="23.8864%" y="350.50"></text></g><g><title>nice (psutil/__init__.py:720) (3 samples, 0.55%)</title><rect x="23.8182%" y="324" width="0.5455%" height="15" fill="rgb(220,109,13)"/><text x="24.0682%" y="334.50"></text></g><g><title>wrapper (psutil/_pslinux.py:1576) (3 samples, 0.55%)</title><rect x="23.8182%" y="340" width="0.5455%" height="15" fill="rgb(232,18,1)"/><text x="24.0682%" y="350.50"></text></g><g><title>nice_get (psutil/_pslinux.py:1988) (2 samples, 0.36%)</title><rect x="24.0000%" y="356" width="0.3636%" height="15" fill="rgb(215,41,42)"/><text x="24.2500%" y="366.50"></text></g><g><title>wrapper (psutil/_common.py:451) (1 samples, 0.18%)</title><rect x="25.2727%" y="388" width="0.1818%" height="15" fill="rgb(224,123,36)"/><text x="25.5227%" y="398.50"></text></g><g><title>_read_status_file (psutil/_pslinux.py:1649) (9 samples, 1.64%)</title><rect x="25.4545%" y="404" width="1.6364%" height="15" fill="rgb(240,125,3)"/><text x="25.7045%" y="414.50"></text></g><g><title>open_binary (psutil/_common.py:711) (8 samples, 1.45%)</title><rect x="25.6364%" y="420" width="1.4545%" height="15" fill="rgb(205,98,50)"/><text x="25.8864%" y="430.50"></text></g><g><title>num_threads (psutil/_pslinux.py:1950) (25 samples, 4.55%)</title><rect x="24.7273%" y="356" width="4.5455%" height="15" fill="rgb(205,185,37)"/><text x="24.9773%" y="366.50">num_t..</text></g><g><title>wrapper (psutil/_pslinux.py:1576) (25 samples, 4.55%)</title><rect x="24.7273%" y="372" width="4.5455%" height="15" fill="rgb(238,207,15)"/><text x="24.9773%" y="382.50">wrapp..</text></g><g><title>wrapper (psutil/_common.py:454) (21 samples, 3.82%)</title><rect x="25.4545%" y="388" width="3.8182%" height="15" fill="rgb(213,199,42)"/><text x="25.7045%" y="398.50">wrap..</text></g><g><title>_read_status_file (psutil/_pslinux.py:1650) (12 samples, 2.18%)</title><rect x="27.0909%" y="404" width="2.1818%" height="15" fill="rgb(235,201,11)"/><text x="27.3409%" y="414.50">_..</text></g><g><title>num_threads (psutil/__init__.py:860) (33 samples, 6.00%)</title><rect x="24.3636%" y="324" width="6.0000%" height="15" fill="rgb(207,46,11)"/><text x="24.6136%" y="334.50">num_thre..</text></g><g><title>wrapper (psutil/_pslinux.py:1576) (33 samples, 6.00%)</title><rect x="24.3636%" y="340" width="6.0000%" height="15" fill="rgb(241,35,35)"/><text x="24.6136%" y="350.50">wrapper ..</text></g><g><title>num_threads (psutil/_pslinux.py:1951) (6 samples, 1.09%)</title><rect x="29.2727%" y="356" width="1.0909%" height="15" fill="rgb(243,32,47)"/><text x="29.5227%" y="366.50"></text></g><g><title>_parse_stat_file (psutil/_pslinux.py:1618) (11 samples, 2.00%)</title><rect x="31.0909%" y="404" width="2.0000%" height="15" fill="rgb(247,202,23)"/><text x="31.3409%" y="414.50">_..</text></g><g><title>open_binary (psutil/_common.py:711) (9 samples, 1.64%)</title><rect x="31.4545%" y="420" width="1.6364%" height="15" fill="rgb(219,102,11)"/><text x="31.7045%" y="430.50"></text></g><g><title>_parse_stat_file (psutil/_pslinux.py:1619) (11 samples, 2.00%)</title><rect x="33.0909%" y="404" width="2.0000%" height="15" fill="rgb(243,110,44)"/><text x="33.3409%" y="414.50">_..</text></g><g><title>_parse_stat_file (psutil/_pslinux.py:1623) (1 samples, 0.18%)</title><rect x="35.0909%" y="404" width="0.1818%" height="15" fill="rgb(222,74,54)"/><text x="35.3409%" y="414.50"></text></g><g><title>status (psutil/__init__.py:682) (28 samples, 5.09%)</title><rect x="30.3636%" y="324" width="5.0909%" height="15" fill="rgb(216,99,12)"/><text x="30.6136%" y="334.50">status..</text></g><g><title>wrapper (psutil/_pslinux.py:1576) (27 samples, 4.91%)</title><rect x="30.5455%" y="340" width="4.9091%" height="15" fill="rgb(226,22,26)"/><text x="30.7955%" y="350.50">wrappe..</text></g><g><title>status (psutil/_pslinux.py:2080) (27 samples, 4.91%)</title><rect x="30.5455%" y="356" width="4.9091%" height="15" fill="rgb(217,163,10)"/><text x="30.7955%" y="366.50">status..</text></g><g><title>wrapper (psutil/_pslinux.py:1576) (26 samples, 4.73%)</title><rect x="30.7273%" y="372" width="4.7273%" height="15" fill="rgb(213,25,53)"/><text x="30.9773%" y="382.50">wrappe..</text></g><g><title>wrapper (psutil/_common.py:454) (26 samples, 4.73%)</title><rect x="30.7273%" y="388" width="4.7273%" height="15" fill="rgb(252,105,26)"/><text x="30.9773%" y="398.50">wrappe..</text></g><g><title>_parse_stat_file (psutil/_pslinux.py:1628) (1 samples, 0.18%)</title><rect x="35.2727%" y="404" width="0.1818%" height="15" fill="rgb(220,39,43)"/><text x="35.5227%" y="414.50"></text></g><g><tit |