mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-07-27 04:13:53 -06:00
trace: Add ftrace tracing backend
This patch adds a ftrace tracing backend which sends trace event to ftrace marker file. You can effectively compare qemu trace data and kernel(especially, kvm.ko when using KVM) trace data. The ftrace backend is restricted to Linux only. To try out the ftrace backend: $ ./configure --trace-backend=ftrace $ make if you use KVM, enable kvm events in ftrace: # sudo echo 1 > /sys/kernel/debug/tracing/events/kvm/enable After running qemu by root user, you can get the trace: # cat /sys/kernel/debug/tracing/trace Signed-off-by: Eiichi Tsukata <eiichi.tsukata.xh@hitachi.com> Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
This commit is contained in:
parent
b76ac80a5c
commit
781e9545db
5 changed files with 175 additions and 0 deletions
54
scripts/tracetool/backend/ftrace.py
Normal file
54
scripts/tracetool/backend/ftrace.py
Normal file
|
@ -0,0 +1,54 @@
|
|||
#!/usr/bin/env python
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
"""
|
||||
Ftrace built-in backend.
|
||||
"""
|
||||
|
||||
__author__ = "Eiichi Tsukata <eiichi.tsukata.xh@hitachi.com>"
|
||||
__copyright__ = "Copyright (C) 2013 Hitachi, Ltd."
|
||||
__license__ = "GPL version 2 or (at your option) any later version"
|
||||
|
||||
__maintainer__ = "Stefan Hajnoczi"
|
||||
__email__ = "stefanha@redhat.com"
|
||||
|
||||
|
||||
from tracetool import out
|
||||
|
||||
|
||||
PUBLIC = True
|
||||
|
||||
|
||||
def c(events):
|
||||
pass
|
||||
|
||||
def h(events):
|
||||
out('#include "trace/ftrace.h"',
|
||||
'#include "trace/control.h"',
|
||||
'',
|
||||
)
|
||||
|
||||
for e in events:
|
||||
argnames = ", ".join(e.args.names())
|
||||
if len(e.args) > 0:
|
||||
argnames = ", " + argnames
|
||||
|
||||
out('static inline void trace_%(name)s(%(args)s)',
|
||||
'{',
|
||||
' char ftrace_buf[MAX_TRACE_STRLEN];',
|
||||
' int unused __attribute__ ((unused));',
|
||||
' int trlen;',
|
||||
' bool _state = trace_event_get_state(%(event_id)s);',
|
||||
' if (_state) {',
|
||||
' trlen = snprintf(ftrace_buf, MAX_TRACE_STRLEN,',
|
||||
' "%(name)s " %(fmt)s "\\n" %(argnames)s);',
|
||||
' trlen = MIN(trlen, MAX_TRACE_STRLEN - 1);',
|
||||
' unused = write(trace_marker_fd, ftrace_buf, trlen);',
|
||||
' }',
|
||||
'}',
|
||||
name = e.name,
|
||||
args = e.args,
|
||||
event_id = "TRACE_" + e.name.upper(),
|
||||
fmt = e.fmt.rstrip("\n"),
|
||||
argnames = argnames,
|
||||
)
|
Loading…
Add table
Add a link
Reference in a new issue