Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/thlorenz/cpuprofilify

Converts output of various profiling/sampling tools to the .cpuprofile format so it can be loaded into Chrome DevTools.
https://github.com/thlorenz/cpuprofilify

Last synced: 28 days ago
JSON representation

Converts output of various profiling/sampling tools to the .cpuprofile format so it can be loaded into Chrome DevTools.

Awesome Lists containing this project

README

        

# cpuprofilify [![build status](https://secure.travis-ci.org/thlorenz/cpuprofilify.png?branch=master)](http://travis-ci.org/thlorenz/cpuprofilify)

[![testling badge](https://ci.testling.com/thlorenz/cpuprofilify.png)](https://ci.testling.com/thlorenz/cpuprofilify)

Converts output of various profiling/sampling tools to the .cpuprofile format so it can be loaded into Chrome DevTools.

![screenshot](assets/cpuprofilify.gif)

**Table of Contents** *generated with [DocToc](https://github.com/thlorenz/doctoc)*

- [Installation](#installation)
- [Instructions](#instructions)
- [Example](#example)
- [Usage](#usage)
- [cpuprofilify and `perf`](#cpuprofilify-and-perf)
- [API](#api)
- [CpuProfilifier()](#cpuprofilifier)
- [CpuProfilifier::convert(trace, opts) → {Object}](#cpuprofilifierconverttrace-opts-→-object)
- [License](#license)

## Installation

npm install -g cpuprofilify

## Instructions

cpuprofilify installs two binary scripts:

- **`profile_1ms.d`**: DTrace script that samples your process, use either of the following to generate a trace
- `sudo profile_1ms.d -c 'node --perf-basic-prof ' | cpuprofilify > out.cpuprofile`
- `sudo profile_1ms.d -p | cpuprofilify > out.cpuprofile`
- **`cpuprofilify`**: which will convert a *perf* or *DTrace* trace into a `.cpuprofile` importable into Chrome DevTools
- `perf record -e cycles:u -g -- node --perf-basic-prof && perf script | cpuprofilify > out.cpuprofile`

Use the `perf record` and `perf script` commands on Linux to generate input to cpuprofilify and the provided
`profile_1ms.d` script to do so on OSX via dtrace.

## Example

*using DTrace script*

```sh
# In Terminal A
➝ sudo profile_1ms.d -c 'node --perf-basic-prof example/fibonacci' | \
cpuprofilify > /tmp/example.cpuprofile
pid
HTTP server listening on port 8000

# In Terminal B
➝ ab -n 6 -c 2 http://:::8000/1000/
This is ApacheBench, Version 2.3 <$Revision: 1554214 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking :: (be patient).....done
[ .. ]

➝ sudo kill
```

Now open `/tmp/example.cpuprofile` in Chrome DevTools *Profiles - Load*

**NOTE:** in order to try the above example please clone this repository.

## Usage

```
cat trace.txt | cpuprofilify > my.cpuprofile

Converts the given trace taking according to the given opttions

OPTIONS:

--unresolveds , --nounresolveds unresolved addresses like `0x1a23c` are filtered from the trace unless this flag is set (default: false)
--sysinternals , --nosysinternals sysinternals like `__lib_c_start...` are filtered from the trace unless this flag is set (default: false)
--v8internals , --nov8internals v8internals like `v8::internal::...` are filtered from the trace unless this flag is set (default: false)
--v8gc , --nov8gc when v8internals are filtered, garbage collection info is as well unless this flag set (default: true)

--shortStack , --noshortStack stacks that have only one line are ignored unless this flag is set (default: false)
--optimizationinfo, --nooptimizationinfo JS optimization info is removed unless this flag is set (default: false)

--type type of input `perf|dtrace`. If not supplied it will be detected.
--help print this help

EXAMPLE:

Generate cpuprofile from DTrace data with default options
using higher switchrate in order to deal with large amount of data being emitted

sudo profile_1ms.d -x switchrate=1000hz -c | cpuprofilify > out.cpuprofile

Generate cpuprofile from DTrace data with default options keeping v8 internals

sudo profile_1ms.d -c | cpuprofilify --v8internals > out.cpuprofile

Generate cpuprofile from DTrace data with default options filtering v8 gc events

sudo profile_1ms.d -c | cpuprofilify --nov8gc > out.cpuprofile
```

## cpuprofilify and `perf`

*use this on any system that doesn't have DTrace, but perf instead like Linux*

```sh
perf record -e cycles:u -g -- node --perf-basic-prof myapp.js
perf script | cpuprofilify > out.cpuprofile
```

## API









CpuProfilifier()





Creates new CpuProfilifier




Source:






CpuProfilifier::convert(trace, opts) → {Object}





Converts the given trace taking according to the given opts.


var cpuprofilifier = require('cpuprofilifier');

var cpuprofile = cpuprofilifier().convert(trace);
fs.writeFileSync('/tmp/my.cpuprofile', JSON.stringify(cpuprofile));


Parameters:

Name
Type
Argument
Description

trace

Array.<String>

a trace generated via perf script or the profile_1ms.d DTrace script

opts

Object

<optional>

Properties

Name
Type
Description

map

string

a map containing symbols information, if not given it will be read from /tmp/perf-.map.

type

string

type of input perf|dtrace. If not supplied it will be detected.

shortStack

Boolean

stacks that have only one line are ignored unless this flag is set

optimizationinfo

Boolean

JS optimization info is removed unless this flag is set (default: false)

unresolveds

Boolean

unresolved addresses like 0x1a23c are filtered from the trace unless this flag is set (default: false)

sysinternals

Boolean

sysinternals like __lib_c_start... are filtered from the trace unless this flag is set (default: false)

v8internals

Boolean

v8internals like v8::internal::... are filtered from the trace unless this flag is set (default: false)

v8gc

Boolean

when v8internals are filtered, garbage collection info is as well unless this flag set (default: true)


Source:



Returns:


an cpuprofile presentation of the given trace





Type


Object



*generated with [docme](https://github.com/thlorenz/docme)*

## License

MIT