Skip to content

Commit

Permalink
AIE trace improvements and new features (Xilinx#7591)
Browse files Browse the repository at this point in the history
  • Loading branch information
pgschuey authored Jul 5, 2023
1 parent 52fc14e commit 562a286
Show file tree
Hide file tree
Showing 34 changed files with 2,251 additions and 1,251 deletions.
34 changes: 34 additions & 0 deletions src/runtime_src/core/common/config_reader.h
Original file line number Diff line number Diff line change
Expand Up @@ -769,6 +769,13 @@ get_aie_profile_settings_graph_based_memory_tile_metrics()
return value;
}

inline std::string
get_aie_profile_settings_graph_based_interface_tile_metrics()
{
static std::string value = detail::get_string_value("AIE_profile_settings.graph_based_interface_tile_metrics", "");
return value;
}

inline std::string
get_aie_profile_settings_tile_based_aie_metrics()
{
Expand Down Expand Up @@ -855,6 +862,20 @@ get_aie_trace_settings_tile_based_memory_tile_metrics()
return value;
}

inline std::string
get_aie_trace_settings_graph_based_interface_tile_metrics()
{
static std::string value = detail::get_string_value("AIE_trace_settings.graph_based_interface_tile_metrics", "");
return value;
}

inline std::string
get_aie_trace_settings_tile_based_interface_tile_metrics()
{
static std::string value = detail::get_string_value("AIE_trace_settings.tile_based_interface_tile_metrics", "");
return value;
}

inline std::string
get_aie_trace_settings_buffer_size()
{
Expand Down Expand Up @@ -897,6 +918,19 @@ get_aie_trace_settings_file_dump_interval_s()
return value;
}

inline unsigned int
get_aie_trace_settings_poll_timers_interval_us()
{
static unsigned int value = detail::get_uint_value("AIE_trace_settings.poll_timers_interval_us", 100);
return value;
}

inline bool
get_aie_trace_settings_enable_system_timeline()
{
static bool value = detail::get_bool_value("AIE_trace_settings.enable_system_timeline", false);
return value;
}

}} // config,xrt_core

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -549,21 +549,21 @@ namespace {
configEventSelections(aieDevInst, loc, XAIE_MEM_MOD, type, memTileMetricSet, channel0, channel1);

// Record for runtime config file
cfgTile.mem_tile_trace_config.port_trace_ids[0] = channel0;
cfgTile.mem_tile_trace_config.port_trace_ids[1] = channel1;
cfgTile.memory_tile_trace_config.port_trace_ids[0] = channel0;
cfgTile.memory_tile_trace_config.port_trace_ids[1] = channel1;
if ((memTileMetricSet == xdp::built_in::MemTileMetricSet::INPUT_CHANNELS) ||
(memTileMetricSet == xdp::built_in::MemTileMetricSet::INPUT_CHANNELS_STALLS)) {
cfgTile.mem_tile_trace_config.port_trace_is_master[0] = 1;
cfgTile.mem_tile_trace_config.port_trace_is_master[1] = 1;
cfgTile.mem_tile_trace_config.s2mm_channels[0] = channel0;
cfgTile.memory_tile_trace_config.port_trace_is_master[0] = 1;
cfgTile.memory_tile_trace_config.port_trace_is_master[1] = 1;
cfgTile.memory_tile_trace_config.s2mm_channels[0] = channel0;
if (channel0 != channel1)
cfgTile.mem_tile_trace_config.s2mm_channels[1] = channel1;
cfgTile.memory_tile_trace_config.s2mm_channels[1] = channel1;
} else {
cfgTile.mem_tile_trace_config.port_trace_is_master[0] = 0;
cfgTile.mem_tile_trace_config.port_trace_is_master[1] = 0;
cfgTile.mem_tile_trace_config.mm2s_channels[0] = channel0;
cfgTile.memory_tile_trace_config.port_trace_is_master[0] = 0;
cfgTile.memory_tile_trace_config.port_trace_is_master[1] = 0;
cfgTile.memory_tile_trace_config.mm2s_channels[0] = channel0;
if (channel0 != channel1)
cfgTile.mem_tile_trace_config.mm2s_channels[1] = channel1;
cfgTile.memory_tile_trace_config.mm2s_channels[1] = channel1;
}
}

Expand Down Expand Up @@ -593,7 +593,7 @@ namespace {
XAie_EventLogicalToPhysicalConv(aieDevInst, loc, XAIE_CORE_MOD, memoryCrossEvents[i], &phyEvent);

if (type == xdp::module_type::mem_tile) {
cfgTile.mem_tile_trace_config.traced_events[S] = phyEvent;
cfgTile.memory_tile_trace_config.traced_events[S] = phyEvent;
} else {
cfgTile.core_trace_config.internal_events_broadcast[bcId] = phyEvent;
cfgTile.memory_trace_config.traced_events[S] = bcIdToEvent(bcId);
Expand Down Expand Up @@ -623,7 +623,7 @@ namespace {
// cfgTile.memory_trace_config.traced_events[S] = phyEvent;

if (type == xdp::module_type::mem_tile)
cfgTile.mem_tile_trace_config.traced_events[S] = phyEvent;
cfgTile.memory_tile_trace_config.traced_events[S] = phyEvent;
else
cfgTile.memory_trace_config.traced_events[S] = phyEvent;
}
Expand All @@ -638,7 +638,7 @@ namespace {

if (type == xdp::module_type::mem_tile) {
XAie_EventLogicalToPhysicalConv(aieDevInst, loc, XAIE_MEM_MOD, traceStartEvent, &phyEvent);
cfgTile.mem_tile_trace_config.start_event = phyEvent;
cfgTile.memory_tile_trace_config.start_event = phyEvent;

} else {
XAie_EventLogicalToPhysicalConv(aieDevInst, loc, XAIE_CORE_MOD, traceStartEvent, &phyEvent);
Expand All @@ -651,7 +651,7 @@ namespace {
coreToMemBcMask |= (bcBit << bcId);
if (type == xdp::module_type::mem_tile) {
XAie_EventLogicalToPhysicalConv(aieDevInst, loc, XAIE_MEM_MOD, traceEndEvent, &phyEvent);
cfgTile.mem_tile_trace_config.stop_event = bcIdToEvent(bcId);
cfgTile.memory_tile_trace_config.stop_event = bcIdToEvent(bcId);
} else {
XAie_EventLogicalToPhysicalConv(aieDevInst, loc, XAIE_CORE_MOD, traceEndEvent, &phyEvent);
cfgTile.memory_trace_config.stop_event = bcIdToEvent(bcId);
Expand Down Expand Up @@ -684,7 +684,7 @@ namespace {
// Update memory packet type in config file
// NOTE: Use time packets for memory module (type 1)
if (type == xdp::module_type::mem_tile)
cfgTile.mem_tile_trace_config.packet_type = packetType;
cfgTile.memory_tile_trace_config.packet_type = packetType;
else
cfgTile.memory_trace_config.packet_type = packetType;

Expand Down
2 changes: 1 addition & 1 deletion src/runtime_src/core/edge/user/plugin/xdp/aie_trace.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -80,6 +80,6 @@ namespace trace {
if (trace::finish_flush_device_cb != nullptr)
trace::finish_flush_device_cb(handle);
}

} // end namespace aie
} // end namespace xdp
3 changes: 1 addition & 2 deletions src/runtime_src/core/edge/user/shim.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -139,8 +139,7 @@ shim::
xclLog(XRT_INFO, "%s", __func__);

#ifndef __HWEM__
// xdphal::finish_flush_device(handle) ;
xdp::aie::finish_flush_device(this) ;
xdp::aie::finish_flush_device(this);
#endif
xdp::aie::ctr::end_poll(this);
xdp::aie::sts::end_poll(this);
Expand Down
11 changes: 7 additions & 4 deletions src/runtime_src/core/pcie/linux/plugin/xdp/aie_trace.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -40,13 +40,16 @@ namespace trace {
{
typedef void (*ftype)(void*) ;
update_device_cb = (ftype)(xrt_core::dlsym(handle, "updateAIEDevice")) ;
if (xrt_core::dlerror() != NULL) update_device_cb = nullptr ;
if (xrt_core::dlerror() != NULL)
update_device_cb = nullptr ;

flush_device_cb = (ftype)(xrt_core::dlsym(handle, "flushAIEDevice")) ;
if (xrt_core::dlerror() != NULL) flush_device_cb = nullptr ;
if (xrt_core::dlerror() != NULL)
flush_device_cb = nullptr ;

finish_flush_device_cb = (ftype)(xrt_core::dlsym(handle, "finishFlushAIEDevice")) ;
if (xrt_core::dlerror() != NULL) finish_flush_device_cb = nullptr ;
if (xrt_core::dlerror() != NULL)
finish_flush_device_cb = nullptr ;
}

void warning_function()
Expand Down Expand Up @@ -80,6 +83,6 @@ namespace trace {
trace::finish_flush_device_cb(handle) ;
}
}

} // end namespace aie
} // end namespace xdp
14 changes: 14 additions & 0 deletions src/runtime_src/xdp/profile/database/dynamic_event_database.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -284,6 +284,20 @@ namespace xdp {
return std::move(device_db->getAIESamples());
}

void VPDynamicDatabase::addAIETimerSample(uint64_t deviceId, unsigned long timestamp1,
unsigned long timestamp2, const std::vector<uint64_t>& values)
{
auto device_db = getDeviceDB(deviceId);
device_db->addAIETimerSample(timestamp1, timestamp2, values);
}

std::vector<counters::DoubleSample>
VPDynamicDatabase::getAIETimerSamples(uint64_t deviceId)
{
auto device_db = getDeviceDB(deviceId);
return std::move(device_db->getAIETimerSamples());
}

void VPDynamicDatabase::setPLTraceBufferFull(uint64_t deviceId, bool val)
{
auto device_db = getDeviceDB(deviceId);
Expand Down
3 changes: 3 additions & 0 deletions src/runtime_src/xdp/profile/database/dynamic_event_database.h
Original file line number Diff line number Diff line change
Expand Up @@ -175,6 +175,9 @@ namespace xdp {
XDP_EXPORT void addAIESample(uint64_t deviceId, double timestamp,
const std::vector<uint64_t>& values) ;
XDP_EXPORT std::vector<counters::Sample> getAIESamples(uint64_t deviceId) ;
XDP_EXPORT void addAIETimerSample(uint64_t deviceId, unsigned long timestamp1,
unsigned long timestamp2, const std::vector<uint64_t>& values) ;
XDP_EXPORT std::vector<counters::DoubleSample> getAIETimerSamples(uint64_t deviceId) ;

// Device Trace Buffer Fullness Status - PL
XDP_EXPORT void setPLTraceBufferFull(uint64_t deviceId, bool val);
Expand Down
10 changes: 10 additions & 0 deletions src/runtime_src/xdp/profile/database/dynamic_info/aie_db.h
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@ namespace xdp {
aie::TraceDataVector traceData;

SampleContainer samples;
DoubleSampleContainer timerSamples;

std::mutex traceLock; // Protects "traceData" vector

Expand All @@ -51,9 +52,18 @@ namespace xdp {
void addAIESample(double timestamp, const std::vector<uint64_t>& values)
{ samples.addSample({timestamp, values}); }

inline
void addAIETimerSample(unsigned long timestamp1, unsigned long timestamp2,
const std::vector<uint64_t>& values)
{ timerSamples.addSample({timestamp1, timestamp2, values}); }

inline
std::vector<counters::Sample> getAIESamples()
{ return std::move(samples.getSamples()); }

inline
std::vector<counters::DoubleSample> getAIETimerSamples()
{ return std::move(timerSamples.getSamples()); }
};

} // end namespace xdp
Expand Down
7 changes: 7 additions & 0 deletions src/runtime_src/xdp/profile/database/dynamic_info/device_db.h
Original file line number Diff line number Diff line change
Expand Up @@ -107,9 +107,16 @@ namespace xdp {
void addAIESample(double timestamp, const std::vector<uint64_t>& values)
{ aie_db.addAIESample(timestamp, values); }

void addAIETimerSample(unsigned long timestamp1, unsigned long timestamp2,
const std::vector<uint64_t>& values)
{ aie_db.addAIETimerSample(timestamp1, timestamp2, values); }

inline std::vector<counters::Sample> getAIESamples()
{ return std::move(aie_db.getAIESamples()); }

inline std::vector<counters::DoubleSample> getAIETimerSamples()
{ return std::move(aie_db.getAIETimerSamples()); }

inline void setPLDeadlockInfo(const std::string& info)
{ pl_db.setDeadlockInfo(info); }

Expand Down
23 changes: 23 additions & 0 deletions src/runtime_src/xdp/profile/database/dynamic_info/samples.h
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,29 @@ namespace xdp {

};

class DoubleSampleContainer
{
private:
std::vector<counters::DoubleSample> samples;

std::mutex containerLock; // Protects the "samples" vector

public:
DoubleSampleContainer() = default;
~DoubleSampleContainer() = default;

inline void addSample(const counters::DoubleSample& s)
{
std::lock_guard<std::mutex> lock(containerLock);
samples.push_back(s);
}
inline std::vector<counters::DoubleSample> getSamples()
{
std::lock_guard<std::mutex> lock(containerLock);
return samples;
}

};
} // end namespace xdp

#endif
7 changes: 7 additions & 0 deletions src/runtime_src/xdp/profile/database/dynamic_info/types.h
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,13 @@ namespace xdp::counters {
std::vector<uint64_t> values;
};

// Different container to handle two timestamps
struct DoubleSample
{
unsigned long timestamp1;
unsigned long timestamp2;
std::vector<uint64_t> values;
};
} // end namespace xdp::counters

namespace xdp::aie {
Expand Down
52 changes: 25 additions & 27 deletions src/runtime_src/xdp/profile/database/static_info/aie_constructs.h
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,8 @@ enum class module_type {
core = 0,
dma,
shim,
mem_tile
mem_tile,
num_types
};

struct tile_type
Expand All @@ -55,33 +56,28 @@ enum class module_type {
}
};

struct plio_config
struct io_config
{
/// PLIO object id
// Object id
int id;
/// PLIO variable name
// Variable name
std::string name;
/// PLIO loginal name
// Loginal name
std::string logicalName;
/// Shim tile column to where the GMIO is mapped
// Column where I/O is mapped
short shimColumn;
/// slave or master. 0:slave, 1:master
// slave or master - 0:slave, 1:master
short slaveOrMaster;
/// Shim stream switch port id
// Shim stream switch port id
short streamId;
// Channel number
short channelNum;
// Burst length
short burstLength;
// I/O type - 0:PLIO, 1:GMIO
short type;
};

struct gmio_type
{
std::string name;
uint32_t id;
uint16_t type;
uint16_t shimColumn;
uint16_t channelNum;
uint16_t streamId;
uint16_t burstLength;
};

/*
* Represents AIE counter configuration for a single counter
* Used to keep track of runtime configuration in aie profile and trace.
Expand Down Expand Up @@ -238,16 +234,17 @@ enum class module_type {
};

/*
* MEM tiles have 4 Performance counters
* Interface or memory tiles
* Uses up to 2 channel selections and 8 stream switch monitor ports
*/
class aie_cfg_mem_tile : public aie_cfg_base
class aie_cfg_peripheral_tile : public aie_cfg_base
{
public:
bool port_trace_is_master[NUM_MEM_TILE_PORTS] = {};
uint8_t port_trace_ids[NUM_MEM_TILE_PORTS] = {};
int8_t s2mm_channels[NUM_MEM_TILE_CHAN_SEL] = {-1, -1};
int8_t mm2s_channels[NUM_MEM_TILE_CHAN_SEL] = {-1, -1};
aie_cfg_mem_tile() : aie_cfg_base(4) {}
bool port_trace_is_master[NUM_SWITCH_MONITOR_PORTS] = {};
uint8_t port_trace_ids[NUM_SWITCH_MONITOR_PORTS] = {};
int8_t s2mm_channels[NUM_CHANNEL_SELECTS] = {-1, -1};
int8_t mm2s_channels[NUM_CHANNEL_SELECTS] = {-1, -1};
aie_cfg_peripheral_tile() : aie_cfg_base(4) {}
};

/*
Expand All @@ -262,7 +259,8 @@ enum class module_type {
std::string trace_metric_set;
aie_cfg_core core_trace_config;
aie_cfg_memory memory_trace_config;
aie_cfg_mem_tile mem_tile_trace_config;
aie_cfg_peripheral_tile memory_tile_trace_config;
aie_cfg_peripheral_tile interface_tile_trace_config;
aie_cfg_tile(uint32_t c, uint32_t r, module_type t) : column(c), row(r), type(t) {}
};

Expand Down
Loading

0 comments on commit 562a286

Please sign in to comment.