diff options
| author | Paul Buetow <paul@buetow.org> | 2025-04-10 22:30:16 +0300 |
|---|---|---|
| committer | Paul Buetow <paul@buetow.org> | 2025-04-10 22:30:16 +0300 |
| commit | 1eeae89f5b1fcff41694b311fe699a65788cef6b (patch) | |
| tree | 28ef5d6702a58edbba92a41b957df897866f0e27 /internal | |
| parent | 4eca989fa649538e78038999f5e4cc21acca1db9 (diff) | |
can generate flamegraphs
Diffstat (limited to 'internal')
| -rw-r--r-- | internal/flags/flags.go | 6 | ||||
| -rw-r--r-- | internal/flamegraph/counter.go | 21 | ||||
| -rw-r--r-- | internal/flamegraph/iordata.go | 10 | ||||
| -rw-r--r-- | internal/ior.go | 3 |
4 files changed, 30 insertions, 10 deletions
diff --git a/internal/flags/flags.go b/internal/flags/flags.go index ab9a342..120d8fe 100644 --- a/internal/flags/flags.go +++ b/internal/flags/flags.go @@ -21,6 +21,9 @@ var validCollapsedFields = []string{ "tracepoint", "pid", "tid", +} + +var validCollapsedCounts = []string{ "count", "duration", "durationToPrev", @@ -51,6 +54,7 @@ type Flags struct { // To convert ior data into collapsed format IorDataFile string CollapsedFields []string + CountField string } func Parse() { @@ -79,6 +83,8 @@ func parse() { flag.StringVar(&singleton.IorDataFile, "ior", "", "IOR data file to convert into collapsed format") fields := flag.String("fields", "", fmt.Sprintf("Comma separated list of fields to collapse, valid are: %v", validCollapsedFields)) + flag.StringVar(&singleton.CountField, "count", "count", + fmt.Sprintf("Count field to collaps, valid are: %v", validCollapsedCounts)) flag.Parse() singleton.TracepointsToAttach = extractTracepointFlags(*tracepointsToAttach) diff --git a/internal/flamegraph/counter.go b/internal/flamegraph/counter.go index 96cfe06..6105136 100644 --- a/internal/flamegraph/counter.go +++ b/internal/flamegraph/counter.go @@ -1,5 +1,9 @@ package flamegraph +import ( + "fmt" +) + type Counter struct { Count uint64 Duration uint64 @@ -12,5 +16,22 @@ func (c Counter) add(other Counter) Counter { c.Duration += other.Duration c.DurationToPrev += other.DurationToPrev c.Bytes += other.Bytes + return c } + +func (c Counter) ValueByName(name string) uint64 { + // Convert the numbers to strings here + switch name { + case "count": + return c.Count + case "duration": + return c.Duration + case "durationToPrev": + return c.DurationToPrev + case "bytes": + return c.Bytes + default: + panic(fmt.Sprintln("No", name, "in count record")) + } +} diff --git a/internal/flamegraph/iordata.go b/internal/flamegraph/iordata.go index 6974329..cef01ff 100644 --- a/internal/flamegraph/iordata.go +++ b/internal/flamegraph/iordata.go @@ -198,7 +198,7 @@ type iterRecord struct { func (ir iterRecord) StringByName(name string) string { switch name { case "path": - return ir.path + return strings.Join(strings.Split(ir.path, "/"), ";/") case "comm": return ir.comm case "tracepoint": @@ -209,14 +209,6 @@ func (ir iterRecord) StringByName(name string) string { return fmt.Sprint(ir.tid) case "flags": return ir.flags.String() - case "count": - return fmt.Sprint(ir.cnt.Count) - case "duration": - return fmt.Sprint(ir.cnt.Duration) - case "durationToPrev": - return fmt.Sprint(ir.cnt.DurationToPrev) - case "bytes": - return fmt.Sprint(ir.cnt.Bytes) default: panic(fmt.Sprintln("No", name, "in record")) } diff --git a/internal/ior.go b/internal/ior.go index 2aff207..0e158e2 100644 --- a/internal/ior.go +++ b/internal/ior.go @@ -48,7 +48,8 @@ func Run() error { iorFile := flags.Get().IorDataFile if iorFile != "" { - return flamegraph.NewCollapsed(iorFile, flags.Get().CollapsedFields).Generate(iorFile) + collapsed := flamegraph.NewCollapsed(iorFile, flags.Get().CollapsedFields, flags.Get().CountField) + return collapsed.Generate(iorFile) } return runTrace() |
