P4C
The P4 Compiler
Loading...
Searching...
No Matches
BFN::ResourcesLogging Class Reference

Class for generating resources.json logfile. More...

#include <resources.h>

Inheritance diagram for BFN::ResourcesLogging:
[legend]

Public Types

using ActionDataResourceUsage = Resources_Schema_Logger::ActionDataResourceUsage
 
using ClotResourceUsage = Resources_Schema_Logger::ClotResourceUsage
 
using ElementUsage = Resources_Schema_Logger::ElementUsage
 
using ExactMatchResultBusResourceUsage
 
using ExactMatchSearchBusResourceUsage
 
using GatewayResourceUsage = Resources_Schema_Logger::GatewayResourceUsage
 
using HashBitsResourceUsage = Resources_Schema_Logger::HashBitsResourceUsage
 
using HashDistResourceUsage = Resources_Schema_Logger::HashDistributionResourceUsage
 
using LogicalTableResourceUsage = Resources_Schema_Logger::LogicalTableResourceUsage
 
using MapRamResourceUsage = Resources_Schema_Logger::MapRamResourceUsage
 
using MauStageResourceUsage = Resources_Schema_Logger::MauStageResourceUsage
 
using MeterAluResourceUsage = Resources_Schema_Logger::MeterAluResourceUsage
 
using ParserResources = Resources_Schema_Logger::ParserResources
 
using PhvResourceUsage = Resources_Schema_Logger::PhvResourceUsage
 
using RamResourceUsage = Resources_Schema_Logger::RamResourceUsage
 
using ResourceUsage = Resources_Schema_Logger::ResourceUsage
 
using StashResourceUsage = Resources_Schema_Logger::StashResourceUsage
 
using StatisticAluResourceUsage = Resources_Schema_Logger::StatisticAluResourceUsage
 
using TcamResourceUsage = Resources_Schema_Logger::TcamResourceUsage
 
using TindResultBusResourceUsage = Resources_Schema_Logger::TindResultBusResourceUsage
 
using VliwResourceUsage = Resources_Schema_Logger::VliwResourceUsage
 
using XbarResourceUsage = Resources_Schema_Logger::XbarResourceUsage
 
- Public Types inherited from P4::Visitor
typedef Visitor_Context Context
 

Public Member Functions

 ResourcesLogging (const ClotInfo &clotInfo, const std::string &filename, const std::string &outdir)
 
- Public Member Functions inherited from P4::Inspector
const IR::Nodeapply_visitor (const IR::Node *, const char *name=0) override
 
profile_t init_apply (const IR::Node *root) override
 
virtual void loop_revisit (const IR::Node *)
 
virtual void postorder (const IR::Node *)
 
virtual bool preorder (const IR::Node *)
 
virtual void revisit (const IR::Node *)
 
void revisit_visited ()
 
bool visit_in_progress (const IR::Node *n) const
 
void visitAgain () const override
 
void visitOnce () const override
 
- Public Member Functions inherited from P4::Visitor
virtual bool check_global (cstring)
 
virtual void clear_globals ()
 
virtual Visitorclone () const
 
virtual ControlFlowVisitorcontrolFlowVisitor ()
 
virtual void end_apply ()
 
virtual void erase_global (cstring)
 
template<class T >
const T * findContext () const
 
template<class T >
const T * findContext (const Context *&c) const
 
template<class T >
const T * findOrigCtxt () const
 
template<class T >
const T * findOrigCtxt (const Context *&c) const
 
virtual Visitorflow_clone ()
 
virtual void flow_merge (Visitor &)
 
virtual bool flow_merge_closure (Visitor &)
 
virtual void flow_merge_global_from (cstring)
 
virtual void flow_merge_global_to (cstring)
 
const ContextgetChildContext () const
 
int getChildrenVisited () const
 
const ContextgetContext () const
 
int getContextDepth () const
 
const IR::NodegetCurrentNode () const
 
template<class T >
const T * getCurrentNode () const
 
const IR::NodegetOriginal () const
 
template<class T >
const T * getOriginal () const
 
template<class T >
const T * getParent () const
 
virtual bool has_flow_joins () const
 
profile_t init_apply (const IR::Node *root, const Context *parent_context)
 
bool isInContext (const IR::Node *n) const
 
virtual const char * name () const
 
template<class T >
void parallel_visit (const IR::Vector< T > &v, const char *name, int cidx)
 
template<class T >
void parallel_visit (const IR::Vector< T > &v, const char *name=0)
 
template<class T >
void parallel_visit (IR::Vector< T > &v, const char *name, int cidx)
 
template<class T >
void parallel_visit (IR::Vector< T > &v, const char *name=0)
 
void print_context () const
 
const VisitorsetCalledBy (const Visitor *visitor)
 
void setName (const char *name)
 
void visit (const IR::Node &n, const char *name, int cidx)
 
void visit (const IR::Node &n, const char *name=0)
 
void visit (const IR::Node *&n, const char *name, int cidx)
 
void visit (const IR::Node *&n, const char *name=0)
 
void visit (const IR::Node *const &n, const char *name, int cidx)
 
void visit (const IR::Node *const &n, const char *name=0)
 
void visit (IR::Node &n, const char *name, int cidx)
 
void visit (IR::Node &n, const char *name=0)
 
void visit (IR::Node *&, const char *=0, int=0)
 
template<class T , typename = std::enable_if_t<Util::has_SourceInfo_v<T> && !std::is_pointer_v<T>>, class... Args>
void warn (const int kind, const char *format, const T &node, Args &&...args)
 The const ref variant of the above.
 
template<class T , typename = std::enable_if_t<Util::has_SourceInfo_v<T>>, class... Args>
void warn (const int kind, const char *format, const T *node, Args &&...args)
 
bool warning_enabled (int warning_kind) const
 

Protected Member Functions

void collectActionBusBytesUsage (unsigned int stage, const TableResourceAlloc *res, cstring tableName)
 
void collectHashDistUsage (unsigned int stage, const Tofino::IXBar::HashDistUse &hd_use)
 
void collectTableUsage (cstring name, const IR::MAU::Table *table)
 
void collectVliwUsage (unsigned int stage, const InstructionMemory::Use &alloc, gress_t gress, cstring tableName)
 
void collectXbarBytesUsage (unsigned int stage, const IXBar::Use *alloc)
 
void end_apply (const IR::Node *root) override
 
ActionDataResourceUsage * logActionBusBytes (unsigned int stageNo) const
 
void logActionSlots (MauStageResourceUsage *msru) const
 
ExactMatchResultBusResourceUsage * logExactMemResultBuses (unsigned int stageNo) const
 
ExactMatchSearchBusResourceUsage * logExactMemSearchBuses (unsigned int stageNo) const
 
HashBitsResourceUsage * logHashBits (unsigned stageNo) const
 
HashDistResourceUsage * logHashDist (unsigned stageNo) const
 
LogicalTableResourceUsage * logLogicalTables (int stageNo) const
 
void logMemories (unsigned int stage, RamResourceUsage *ramsRes, MapRamResourceUsage *mapRamsRes, GatewayResourceUsage *gatewaysRes, StashResourceUsage *stashesRes, MeterAluResourceUsage *meterRes, StatisticAluResourceUsage *statisticsRes, TcamResourceUsage *tcamsRes) const
 
MauStageResourceUsage * logStage (int stageNo)
 
TindResultBusResourceUsage * logTindResultBuses (unsigned int stageNo) const
 
VliwResourceUsage * logVliw (unsigned int stageNo) const
 
XbarResourceUsage * logXbarBytes (unsigned stageNo) const
 
bool preorder (const IR::BFN::Pipe *p) override
 
bool preorder (const IR::MAU::Table *tbl) override
 
- Protected Member Functions inherited from P4::Visitor
virtual void init_join_flows (const IR::Node *)
 
virtual bool join_flows (const IR::Node *)
 
virtual void post_join_flows (const IR::Node *, const IR::Node *)
 
void visit_children (const IR::Node *, std::function< void()> fn)
 

Protected Attributes

const ClotInfoclotInfo
 
std::vector< ClotResourceUsage * > clotResources
 
std::string filePath
 
std::string manifestPath
 
const ParserResources * parserResources = nullptr
 
std::vector< Resources::StageResourcesstageResources
 
- Protected Attributes inherited from P4::Visitor
bool dontForwardChildrenBeforePreorder = false
 
bool joinFlows = false
 
bool visitDagOnce = true
 

Additional Inherited Members

- Static Public Member Functions inherited from P4::Visitor
static cstring demangle (const char *)
 
static bool warning_enabled (const Visitor *visitor, int warning_kind)
 
- Public Attributes inherited from P4::Visitor
const Visitorcalled_by = nullptr
 
cstring internalName
 
SplitFlowVisit_base *& split_link
 
SplitFlowVisit_basesplit_link_mem = nullptr
 

Detailed Description

Class for generating resources.json logfile.

It uses API autogenerated from resources_schema.py, you can find it by running make and then searching for resources_schema.h in the build dir. The classes have the same names as in schema and they have the same nested structure. Dictionaries also become classes.

All properties that are not an array must be initialized in the constructor and parameters are always sorted alphabetically.

Enums will become strings/ints and optional ints/optional int enums will be int pointers (int pointer with nullptr value will not be emitted).

Member Typedef Documentation

◆ ExactMatchResultBusResourceUsage

using BFN::ResourcesLogging::ExactMatchResultBusResourceUsage
Initial value:
Resources_Schema_Logger::ExactMatchResultBusResourceUsage

◆ ExactMatchSearchBusResourceUsage

using BFN::ResourcesLogging::ExactMatchSearchBusResourceUsage
Initial value:
Resources_Schema_Logger::ExactMatchSearchBusResourceUsage

Member Function Documentation

◆ end_apply()

void BFN::ResourcesLogging::end_apply ( const IR::Node * root)
overrideprotectedvirtual

Performs actual logging - aggregates all collected data and stores them in the json file. Also updates manifest so it knows where to find that file.

Reimplemented from P4::Visitor.

◆ preorder() [1/2]

bool BFN::ResourcesLogging::preorder ( const IR::BFN::Pipe * p)
overrideprotected

Prepares the object and collects data for parser and clot usage.

◆ preorder() [2/2]

bool BFN::ResourcesLogging::preorder ( const IR::MAU::Table * tbl)
overrideprotected

Collects data for this particular table resource usage and stores it into stageResources.