32 #include "debug/RubyCacheTrace.hh"
39 out <<
"[TraceRecord: Node, " <<
m_cntrl_id <<
", "
45 : m_uncompressed_trace(NULL),
46 m_uncompressed_trace_size(0),
47 m_block_size_bytes(
RubySystem::getBlockSizeBytes())
52 uint64_t uncompressed_trace_size,
54 uint64_t block_size_bytes)
55 : m_uncompressed_trace(uncompressed_trace),
56 m_uncompressed_trace_size(uncompressed_trace_size),
57 m_seq_map(seq_map), m_bytes_read(0), m_records_read(0),
58 m_records_flushed(0), m_block_size_bytes(block_size_bytes)
65 panic(
"Recorded cache block size (%d) < current block size (%d) !!",
93 assert(m_sequencer_ptr != NULL);
96 DPRINTF(RubyCacheTrace,
"Flushing %s\n", *rec);
109 DPRINTF(RubyCacheTrace,
"Issuing %s\n", *traceRecord);
116 if (traceRecord->
m_type == RubyRequestType_LD) {
118 req = std::make_shared<Request>(
122 }
else if (traceRecord->
m_type == RubyRequestType_IFETCH) {
124 req = std::make_shared<Request>(
130 req = std::make_shared<Request>(
140 assert(m_sequencer_ptr != NULL);
174 uint64_t current_size = 0;
177 for (
int i = 0;
i < size; ++
i) {
179 if (current_size + record_size > total_size) {
180 uint8_t* new_buf =
new (std::nothrow) uint8_t[total_size * 2];
181 if (new_buf == NULL) {
182 fatal(
"Unable to allocate buffer of size %s\n",
185 total_size = total_size * 2;
186 uint8_t* old_buf = *buf;
187 memcpy(new_buf, old_buf, current_size);
193 memcpy(&((*buf)[current_size]),
m_records[
i], record_size);
194 current_size += record_size;