analysis

package
v4.0.0-...-c5efee1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jan 3, 2024 License: MIT Imports: 10 Imported by: 0

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 period
  • end: the end time of the period
  • where: the name of the element that the data is collected from. This field is named as where_ in SQLite to avoid conflict with the where keyword.
  • what: the name of the metric
  • value: the value of the metric
  • unit: the unit of the metric

Documentation

Overview

Package analysis provides a set of functions to analyze the bottleneck of the system under simulation.

Index

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

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

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.

func (*CSVBackend) Flush

func (p *CSVBackend) Flush()

Flush flushes the CSV writer.

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) 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 {
	Start sim.VTimeInSec
	End   sim.VTimeInSec
	Where 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

WithPerfLogger sets the logger to be used by the PortAnalyzer.

func (PortAnalyzerBuilder) WithPeriod

WithPeriod sets the period to be used by the PortAnalyzer.

func (PortAnalyzerBuilder) WithPort

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

type SQLiteBackend struct {
	*sql.DB
	// contains filtered or unexported fields
}

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()

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL