README
¶
Akita Performance Analysis Toolkit
Akita Performance Analysis Toolkit provides a set of tools for analyzing the performance of Akita-based simulators. The library mainly uses the hooking feature` of Akita to collect the performance metrics during simulation. The metrics will be recorded and stored in a file.
PerfAnalyzer
The PerfAnalyzer
is the facade of the performance analysis toolkit. Once a PerfAnalyzer
is created, simulator developers can register components by calling the RegisterComponent
method.
Currently, the PerfAnalyzer
automatically discovers the ports and buffers used by the components. It will attach hooks to the ports and buffers to collect throughput and buffer level information, respectively.
It is optional the report values in periods. The throughput and buffer level information will be reported periodically. Each report is the metrics collected in the last period. The period is specified by the WithPeriod
method of the PerfAnalyzerBuilder
.
Output
The output can either be stored a csv file or a sqlite database file. By default, the data is stored in a CSV file. To store the data in a sqlite database, call the WithSQLiteBackend
method of the PerfAnalyzerBuilder
. No matter the CSV backend of the SQLite backend is selected, the output file name can be specified by the WithDBFilename
method of the PerfAnalyzerBuilder
. Existing files will be overwritten.
The output format is the same for the CSV and SQLite backend. It is designed to be generic so that any type of data can be recorded. The output is organized in a table that includes the following columns:
start
: the start time of the periodend
: the end time of the periodwhere
: the name of the element that the data is collected from. This field is named aswhere_
in SQLite to avoid conflict with thewhere
keyword.what
: the name of the metricvalue
: the value of the metricunit
: the unit of the metric
Documentation
¶
Overview ¶
Package analysis provides a set of functions to analyze the bottleneck of the system under simulation.
Index ¶
- type BufferAnalyzer
- type BufferAnalyzerBuilder
- func (b BufferAnalyzerBuilder) Build() *BufferAnalyzer
- func (b BufferAnalyzerBuilder) WithBuffer(buffer sim.Buffer) BufferAnalyzerBuilder
- func (b BufferAnalyzerBuilder) WithPerfLogger(perfLogger PerfLogger) BufferAnalyzerBuilder
- func (b BufferAnalyzerBuilder) WithPeriod(period sim.VTimeInSec) BufferAnalyzerBuilder
- func (b BufferAnalyzerBuilder) WithTimeTeller(timeTeller sim.TimeTeller) BufferAnalyzerBuilder
- type CSVBackend
- type PerfAnalyzer
- func (b *PerfAnalyzer) AddDataEntry(entry PerfAnalyzerEntry)
- func (b *PerfAnalyzer) GetCurrentTraffic(comp string) string
- func (b *PerfAnalyzer) RegisterBuffer(buf sim.Buffer)
- func (b *PerfAnalyzer) RegisterComponent(c sim.Component)
- func (b *PerfAnalyzer) RegisterEngine(e sim.Engine)
- func (b *PerfAnalyzer) RegisterPort(port sim.Port)
- type PerfAnalyzerBackend
- type PerfAnalyzerBuilder
- func (b PerfAnalyzerBuilder) Build() *PerfAnalyzer
- func (b PerfAnalyzerBuilder) WithDBFilename(filename string) PerfAnalyzerBuilder
- func (b PerfAnalyzerBuilder) WithEngine(engine sim.Engine) PerfAnalyzerBuilder
- func (b PerfAnalyzerBuilder) WithPeriod(period sim.VTimeInSec) PerfAnalyzerBuilder
- func (b PerfAnalyzerBuilder) WithSQLiteBackend() PerfAnalyzerBuilder
- type PerfAnalyzerEntry
- type PerfLogger
- type PortAnalyzer
- type PortAnalyzerBuilder
- func (b PortAnalyzerBuilder) Build() *PortAnalyzer
- func (b PortAnalyzerBuilder) WithPerfLogger(l PerfLogger) PortAnalyzerBuilder
- func (b PortAnalyzerBuilder) WithPeriod(p sim.VTimeInSec) PortAnalyzerBuilder
- func (b PortAnalyzerBuilder) WithPort(p sim.Port) PortAnalyzerBuilder
- func (b PortAnalyzerBuilder) WithTimeTeller(t sim.TimeTeller) PortAnalyzerBuilder
- type SQLiteBackend
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type BufferAnalyzer ¶
type BufferAnalyzer struct { PerfLogger sim.TimeTeller // contains filtered or unexported fields }
BufferAnalyzer can periodically record the buffer level of a buffer.
func (*BufferAnalyzer) Func ¶
func (b *BufferAnalyzer) Func(ctx sim.HookCtx)
Func is a function that records buffer level change.
type BufferAnalyzerBuilder ¶
type BufferAnalyzerBuilder struct {
// contains filtered or unexported fields
}
BufferAnalyzerBuilder can build a BufferAnalyzer.
func MakeBufferAnalyzerBuilder ¶
func MakeBufferAnalyzerBuilder() BufferAnalyzerBuilder
MakeBufferAnalyzerBuilder creates a BufferAnalyzerBuilder.
func (BufferAnalyzerBuilder) Build ¶
func (b BufferAnalyzerBuilder) Build() *BufferAnalyzer
Build creates a BufferAnalyzer.
func (BufferAnalyzerBuilder) WithBuffer ¶
func (b BufferAnalyzerBuilder) WithBuffer( buffer sim.Buffer, ) BufferAnalyzerBuilder
WithBuffer sets the buffer to use.
func (BufferAnalyzerBuilder) WithPerfLogger ¶
func (b BufferAnalyzerBuilder) WithPerfLogger( perfLogger PerfLogger, ) BufferAnalyzerBuilder
WithPerfLogger sets the PerfLogger to use.
func (BufferAnalyzerBuilder) WithPeriod ¶
func (b BufferAnalyzerBuilder) WithPeriod( period sim.VTimeInSec, ) BufferAnalyzerBuilder
WithPeriod sets the period to use.
func (BufferAnalyzerBuilder) WithTimeTeller ¶
func (b BufferAnalyzerBuilder) WithTimeTeller( timeTeller sim.TimeTeller, ) BufferAnalyzerBuilder
WithTimeTeller sets the TimeTeller to use.
type CSVBackend ¶
type CSVBackend struct {
// contains filtered or unexported fields
}
CSVBackend is a PerfAnalyzerBackend that writes data entries to a CSV file.
func NewCSVPerfAnalyzerBackend ¶
func NewCSVPerfAnalyzerBackend(dbFilename string) *CSVBackend
NewCSVPerfAnalyzerBackend creates a new CSVPerfAnalyzerBackend.
func (*CSVBackend) AddDataEntry ¶
func (p *CSVBackend) AddDataEntry(entry PerfAnalyzerEntry)
AddDataEntry adds a data entry to the CSV file.
type PerfAnalyzer ¶
type PerfAnalyzer struct {
// contains filtered or unexported fields
}
PerfAnalyzer can report performance metrics during simulation.
func (*PerfAnalyzer) AddDataEntry ¶
func (b *PerfAnalyzer) AddDataEntry(entry PerfAnalyzerEntry)
AddDataEntry adds a data entry to the database. It directly writes into the CSV file.
func (*PerfAnalyzer) GetCurrentTraffic ¶ added in v3.1.0
func (b *PerfAnalyzer) GetCurrentTraffic(comp string) string
func (*PerfAnalyzer) RegisterBuffer ¶
func (b *PerfAnalyzer) RegisterBuffer(buf sim.Buffer)
func (*PerfAnalyzer) RegisterComponent ¶
func (b *PerfAnalyzer) RegisterComponent(c sim.Component)
RegisterComponent register a component to be monitored.
func (*PerfAnalyzer) RegisterEngine ¶
func (b *PerfAnalyzer) RegisterEngine(e sim.Engine)
RegisterEngine registers the engine that is used in the simulation.
func (*PerfAnalyzer) RegisterPort ¶
func (b *PerfAnalyzer) RegisterPort(port sim.Port)
RegisterPort registers a port to be monitored.
type PerfAnalyzerBackend ¶
type PerfAnalyzerBackend interface { AddDataEntry(entry PerfAnalyzerEntry) Flush() }
PerfAnalyzerBackend is the interface that provides the service that can record performance data entries.
type PerfAnalyzerBuilder ¶
type PerfAnalyzerBuilder struct {
// contains filtered or unexported fields
}
PerfAnalyzerBuilder is a builder that can build a PerfAnalyzer.
func MakePerfAnalyzerBuilder ¶
func MakePerfAnalyzerBuilder() PerfAnalyzerBuilder
MakePerfAnalyzerBuilder creates a new PerfAnalyzerBuilder.
func (PerfAnalyzerBuilder) Build ¶
func (b PerfAnalyzerBuilder) Build() *PerfAnalyzer
Build creates a PerfAnalyzer.
func (PerfAnalyzerBuilder) WithDBFilename ¶
func (b PerfAnalyzerBuilder) WithDBFilename( filename string, ) PerfAnalyzerBuilder
WithDBFilename sets the filename of the database file.
func (PerfAnalyzerBuilder) WithEngine ¶
func (b PerfAnalyzerBuilder) WithEngine( engine sim.Engine, ) PerfAnalyzerBuilder
func (PerfAnalyzerBuilder) WithPeriod ¶
func (b PerfAnalyzerBuilder) WithPeriod( period sim.VTimeInSec, ) PerfAnalyzerBuilder
WithPeriod sets the period of the PerfAnalyzer.
func (PerfAnalyzerBuilder) WithSQLiteBackend ¶
func (b PerfAnalyzerBuilder) WithSQLiteBackend() PerfAnalyzerBuilder
WithSQLiteBackend sets the backend of the PerfAnalyzer to be a SQLite.
type PerfAnalyzerEntry ¶
type PerfAnalyzerEntry struct { EntryType string Start sim.VTimeInSec End sim.VTimeInSec Where string WhereRemote string What string Value float64 Unit string }
PerfAnalyzerEntry is a single entry in the performance database.
type PerfLogger ¶
type PerfLogger interface {
AddDataEntry(entry PerfAnalyzerEntry)
}
PerfLogger is the interface that provide the service that can record performance data entries.
type PortAnalyzer ¶
type PortAnalyzer struct { PerfLogger sim.TimeTeller // contains filtered or unexported fields }
PortAnalyzer is a hook for the amount of traffic that passes through a Port.
func (*PortAnalyzer) Func ¶
func (h *PortAnalyzer) Func(ctx sim.HookCtx)
Func writes the message information into the logger
type PortAnalyzerBuilder ¶
type PortAnalyzerBuilder struct {
// contains filtered or unexported fields
}
PortAnalyzerBuilder can build a PortAnalyzer.
func MakePortAnalyzerBuilder ¶
func MakePortAnalyzerBuilder() PortAnalyzerBuilder
MakePortAnalyzerBuilder creates a PortAnalyzerBuilder.
func (PortAnalyzerBuilder) Build ¶
func (b PortAnalyzerBuilder) Build() *PortAnalyzer
Build creates a PortAnalyzer.
func (PortAnalyzerBuilder) WithPerfLogger ¶
func (b PortAnalyzerBuilder) WithPerfLogger(l PerfLogger) PortAnalyzerBuilder
WithPerfLogger sets the logger to be used by the PortAnalyzer.
func (PortAnalyzerBuilder) WithPeriod ¶
func (b PortAnalyzerBuilder) WithPeriod(p sim.VTimeInSec) PortAnalyzerBuilder
WithPeriod sets the period to be used by the PortAnalyzer.
func (PortAnalyzerBuilder) WithPort ¶
func (b PortAnalyzerBuilder) WithPort(p sim.Port) PortAnalyzerBuilder
WithPort sets the port to be used by the PortAnalyzer.
func (PortAnalyzerBuilder) WithTimeTeller ¶
func (b PortAnalyzerBuilder) WithTimeTeller( t sim.TimeTeller, ) PortAnalyzerBuilder
WithTimeTeller sets the TimeTeller to be used by the PortAnalyzer.
type SQLiteBackend ¶
SQLiteBackend is a PerfAnalyzerBackend that writes data entries to a SQLite database.
func NewSQLitePerfAnalyzerBackend ¶
func NewSQLitePerfAnalyzerBackend( dbFilename string, ) *SQLiteBackend
NewSQLitePerfAnalyzerBackend creates a new SQLitePerfAnalyzerBackend.
func (*SQLiteBackend) AddDataEntry ¶
func (p *SQLiteBackend) AddDataEntry(entry PerfAnalyzerEntry)
func (*SQLiteBackend) Flush ¶
func (p *SQLiteBackend) Flush()