Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
ycai
simbricks
Commits
640b9a54
Commit
640b9a54
authored
Dec 28, 2020
by
Antoine Kaufmann
Browse files
tracing: add parser for nicbm log
parent
218099b3
Changes
5
Show whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
205 additions
and
2 deletions
+205
-2
trace/Makefile
trace/Makefile
+1
-1
trace/events.h
trace/events.h
+113
-0
trace/nicbm.cpp
trace/nicbm.cpp
+79
-0
trace/process.cpp
trace/process.cpp
+3
-1
trace/process.h
trace/process.h
+9
-0
No files found.
trace/Makefile
View file @
640b9a54
CXXFLAGS
:=
-O3
-Wall
-Wextra
-g
-Wno-unused-parameter
-fpermissive
LDLIBS
:=
-lboost_iostreams
process
:
process.o sym_map.o log_parser.o gem5.o
process
:
process.o sym_map.o log_parser.o gem5.o
nicbm.o
process
:
CC=$(CXX)
clean
:
...
...
trace/events.h
View file @
640b9a54
...
...
@@ -141,3 +141,116 @@ class EHostMmioC : public event {
out
<<
ts
<<
": H.MMIOC id="
<<
id
<<
std
::
endl
;
}
};
class
e_nic_msix
:
public
event
{
public:
uint16_t
vec
;
e_nic_msix
(
uint64_t
ts_
,
uint16_t
vec_
)
:
event
(
ts_
),
vec
(
vec_
)
{
}
virtual
void
dump
(
std
::
ostream
&
out
)
{
out
<<
ts
<<
": N.MSIX "
<<
vec
<<
std
::
endl
;
}
};
class
e_nic_dma_i
:
public
event
{
public:
uint64_t
id
;
uint64_t
addr
;
uint64_t
size
;
e_nic_dma_i
(
uint64_t
ts_
,
uint64_t
id_
,
uint64_t
addr_
,
uint64_t
size_
)
:
event
(
ts_
),
id
(
id_
),
addr
(
addr_
),
size
(
size_
)
{
}
virtual
void
dump
(
std
::
ostream
&
out
)
{
out
<<
ts
<<
": N.DMAI id="
<<
id
<<
" addr="
<<
addr
<<
" size="
<<
size
<<
std
::
endl
;
}
};
class
e_nic_dma_c
:
public
event
{
public:
uint64_t
id
;
e_nic_dma_c
(
uint64_t
ts_
,
uint64_t
id_
)
:
event
(
ts_
),
id
(
id_
)
{
}
virtual
void
dump
(
std
::
ostream
&
out
)
{
out
<<
ts
<<
": N.DMAC id="
<<
id
<<
std
::
endl
;
}
};
class
e_nic_mmio_r
:
public
event
{
public:
uint64_t
addr
;
uint64_t
size
;
uint64_t
val
;
e_nic_mmio_r
(
uint64_t
ts_
,
uint64_t
addr_
,
uint64_t
size_
,
uint64_t
val_
)
:
event
(
ts_
),
addr
(
addr_
),
size
(
size_
),
val
(
val_
)
{
}
virtual
void
dump
(
std
::
ostream
&
out
)
{
out
<<
ts
<<
": N.MMIOR addr="
<<
addr
<<
" size="
<<
size
<<
" val="
<<
val
<<
std
::
endl
;
}
};
class
e_nic_mmio_w
:
public
event
{
public:
uint64_t
addr
;
uint64_t
size
;
uint64_t
val
;
e_nic_mmio_w
(
uint64_t
ts_
,
uint64_t
addr_
,
uint64_t
size_
,
uint64_t
val_
)
:
event
(
ts_
),
addr
(
addr_
),
size
(
size_
),
val
(
val_
)
{
}
virtual
void
dump
(
std
::
ostream
&
out
)
{
out
<<
ts
<<
": N.MMIOW addr="
<<
addr
<<
" size="
<<
size
<<
" val="
<<
val
<<
std
::
endl
;
}
};
class
e_nic_tx
:
public
event
{
public:
uint16_t
len
;
e_nic_tx
(
uint64_t
ts_
,
uint16_t
len_
)
:
event
(
ts_
),
len
(
len_
)
{
}
virtual
void
dump
(
std
::
ostream
&
out
)
{
out
<<
ts
<<
": N.TX "
<<
len
<<
std
::
endl
;
}
};
class
e_nic_rx
:
public
event
{
public:
uint16_t
len
;
e_nic_rx
(
uint64_t
ts_
,
uint16_t
len_
)
:
event
(
ts_
),
len
(
len_
)
{
}
virtual
void
dump
(
std
::
ostream
&
out
)
{
out
<<
ts
<<
": N.RX "
<<
len
<<
std
::
endl
;
}
};
trace/nicbm.cpp
0 → 100644
View file @
640b9a54
#include <iostream>
#include "events.h"
#include "parser.h"
#include "process.h"
namespace
bio
=
boost
::
iostreams
;
nicbm_parser
::~
nicbm_parser
()
{
}
void
nicbm_parser
::
process_line
(
char
*
line
,
size_t
line_len
)
{
parser
p
(
line
,
line_len
,
0
);
uint64_t
ts
;
if
(
!
p
.
consume_dec
(
ts
))
return
;
if
(
!
p
.
consume_str
(
" nicbm: "
))
return
;
uint64_t
id
,
addr
,
len
,
val
;
if
(
p
.
consume_str
(
"read(off=0x"
))
{
if
(
p
.
consume_hex
(
addr
)
&&
p
.
consume_str
(
", len="
)
&&
p
.
consume_dec
(
len
)
&&
p
.
consume_str
(
", val=0x"
)
&&
p
.
consume_hex
(
val
))
{
cur_event
=
new
e_nic_mmio_r
(
ts
,
addr
,
len
,
val
);
}
}
else
if
(
p
.
consume_str
(
"write(off=0x"
))
{
if
(
p
.
consume_hex
(
addr
)
&&
p
.
consume_str
(
", len="
)
&&
p
.
consume_dec
(
len
)
&&
p
.
consume_str
(
", val=0x"
)
&&
p
.
consume_hex
(
val
))
{
cur_event
=
new
e_nic_mmio_w
(
ts
,
addr
,
len
,
val
);
}
}
else
if
(
p
.
consume_str
(
"issuing dma op 0x"
))
{
if
(
p
.
consume_hex
(
id
)
&&
p
.
consume_str
(
" addr "
)
&&
p
.
consume_hex
(
addr
)
&&
p
.
consume_str
(
" len "
)
&&
p
.
consume_hex
(
len
))
{
cur_event
=
new
e_nic_dma_i
(
ts
,
id
,
addr
,
len
);
}
}
else
if
(
p
.
consume_str
(
"completed dma read op 0x"
)
||
p
.
consume_str
(
"completed dma write op 0x"
))
{
if
(
p
.
consume_hex
(
id
)
&&
p
.
consume_str
(
" addr "
)
&&
p
.
consume_hex
(
addr
)
&&
p
.
consume_str
(
" len "
)
&&
p
.
consume_hex
(
len
))
{
cur_event
=
new
e_nic_dma_c
(
ts
,
id
);
}
}
else
if
(
p
.
consume_str
(
"issue MSI-X interrupt vec "
))
{
if
(
p
.
consume_dec
(
id
))
{
cur_event
=
new
e_nic_msix
(
ts
,
id
);
}
}
else
if
(
p
.
consume_str
(
"eth tx: len "
))
{
if
(
p
.
consume_dec
(
len
))
{
cur_event
=
new
e_nic_tx
(
ts
,
len
);
}
}
else
if
(
p
.
consume_str
(
"eth rx: port 0 len "
))
{
if
(
p
.
consume_dec
(
len
))
{
cur_event
=
new
e_nic_rx
(
ts
,
len
);
}
}
/* else {
std::cerr.write(line, line_len);
std::cerr << std::endl;
}*/
}
trace/process.cpp
View file @
640b9a54
...
...
@@ -29,7 +29,9 @@ int main(int argc, char *argv[])
std
::
cerr
<<
"map loaded"
<<
std
::
endl
;
gem5_parser
client
(
syms
);
gem5_parser
server
(
syms
);
//gem5_parser server(syms);
//nicbm_parser client;
nicbm_parser
server
;
client
.
open
(
argv
[
1
]);
server
.
open
(
argv
[
2
]);
...
...
trace/process.h
View file @
640b9a54
...
...
@@ -69,3 +69,12 @@ class gem5_parser : public log_parser {
gem5_parser
(
sym_map
&
syms_
);
virtual
~
gem5_parser
();
};
class
nicbm_parser
:
public
log_parser
{
protected:
virtual
void
process_line
(
char
*
line
,
size_t
len
);
public:
virtual
~
nicbm_parser
();
};
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment