• F
    tracetool: Include thread id information in log backend · 8fbc12f3
    Fabiano Rosas 提交于
    Currently the log backend prints the process id of QEMU at the start
    of each output line, but since threads share the same PID there is no
    clear distinction between their outputs.
    
    Having the thread id present in the log makes it easier to see when
    output comes from different threads. E.g.:
    
    12423@1538597569.672527:qemu_mutex_lock waiting on mutex 0x1103ee60 (/root/qemu/util/main-loop.c:236)
    ...
    12430@1538597569.503928:qemu_mutex_unlock released mutex 0x1103ee60 (/root/qemu/cpus.c:1238)
    12431@1538597569.503937:qemu_mutex_locked taken mutex 0x1103ee60 (/root/qemu/cpus.c:1257)
    ^here
    
    In the above, 12423 is the main process id and 12430 & 12431 are the
    two vcpu threads.
    
     (qemu) info cpus
     * CPU #0: thread_id=12430
       CPU #1: thread_id=12431
    Suggested-by: NMurilo Opsfelder Araujo <muriloo@linux.ibm.com>
    Signed-off-by: NFabiano Rosas <farosas@linux.ibm.com>
    Signed-off-by: NStefan Hajnoczi <stefanha@redhat.com>
    8fbc12f3
log.py 1.5 KB
#!/usr/bin/env python
# -*- coding: utf-8 -*-

"""
Stderr built-in backend.
"""

__author__     = "Lluís Vilanova <vilanova@ac.upc.edu>"
__copyright__  = "Copyright 2012-2017, Lluís Vilanova <vilanova@ac.upc.edu>"
__license__    = "GPL version 2 or (at your option) any later version"

__maintainer__ = "Stefan Hajnoczi"
__email__      = "stefanha@linux.vnet.ibm.com"


from tracetool import out


PUBLIC = True


def generate_h_begin(events, group):
    out('#include "qemu/log-for-trace.h"',
        '')


def generate_h(event, group):
    argnames = ", ".join(event.args.names())
    if len(event.args) > 0:
        argnames = ", " + argnames

    if "vcpu" in event.properties:
        # already checked on the generic format code
        cond = "true"
    else:
        cond = "trace_event_get_state(%s)" % ("TRACE_" + event.name.upper())

    out('    if (%(cond)s && qemu_loglevel_mask(LOG_TRACE)) {',
        '        struct timeval _now;',
        '        gettimeofday(&_now, NULL);',
        '        qemu_log("%%d@%%zu.%%06zu:%(name)s " %(fmt)s "\\n",',
        '                 qemu_get_thread_id(),',
        '                 (size_t)_now.tv_sec, (size_t)_now.tv_usec',
        '                 %(argnames)s);',
        '    }',
        cond=cond,
        name=event.name,
        fmt=event.fmt.rstrip("\n"),
        argnames=argnames)


def generate_h_backend_dstate(event, group):
    out('    trace_event_get_state_dynamic_by_id(%(event_id)s) || \\',
        event_id="TRACE_" + event.name.upper())