[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH v6 10/13] monitor: add traces for qmp queues
From: |
Peter Xu |
Subject: |
[Qemu-devel] [PATCH v6 10/13] monitor: add traces for qmp queues |
Date: |
Wed, 15 Aug 2018 21:37:44 +0800 |
This can help us to track QMP monitor flow controls.
Signed-off-by: Peter Xu <address@hidden>
---
monitor.c | 8 ++++++++
trace-events | 4 ++++
2 files changed, 12 insertions(+)
diff --git a/monitor.c b/monitor.c
index 10ed853de9..b24a934437 100644
--- a/monitor.c
+++ b/monitor.c
@@ -376,6 +376,7 @@ static void monitor_qmp_cleanup_req_queue_locked(Monitor
*mon)
while (!g_queue_is_empty(mon->qmp.qmp_requests)) {
qmp_request_free(g_queue_pop_head(mon->qmp.qmp_requests));
}
+ trace_monitor_qmp_request_queue(mon, 0);
}
/* Caller must hold the mon->qmp.qmp_lock */
@@ -384,6 +385,7 @@ static void monitor_qmp_cleanup_resp_queue_locked(Monitor
*mon)
while (!g_queue_is_empty(mon->qmp.qmp_responses)) {
qobject_unref((QDict *)g_queue_pop_head(mon->qmp.qmp_responses));
}
+ trace_monitor_qmp_response_queue(mon, 0);
}
static void monitor_qmp_cleanup_queues(Monitor *mon)
@@ -409,6 +411,7 @@ static void monitor_qmp_try_resume_locked(Monitor *mon)
if (mon->qmp.need_resume) {
monitor_resume(mon);
mon->qmp.need_resume = false;
+ trace_monitor_qmp_resume(mon);
}
}
@@ -556,6 +559,7 @@ static void qmp_queue_response(Monitor *mon, QDict *rsp)
*/
qemu_mutex_lock(&mon->qmp.qmp_lock);
g_queue_push_tail(mon->qmp.qmp_responses, qobject_ref(rsp));
+ trace_monitor_qmp_response_queue(mon, mon->qmp.qmp_responses->length);
qemu_mutex_unlock(&mon->qmp.qmp_lock);
qemu_bh_schedule(qmp_respond_bh);
} else {
@@ -579,6 +583,7 @@ static QDict *monitor_qmp_response_pop_one(Monitor *mon)
qemu_mutex_lock(&mon->qmp.qmp_lock);
data = g_queue_pop_head(mon->qmp.qmp_responses);
+ trace_monitor_qmp_response_queue(mon, mon->qmp.qmp_responses->length);
/* In case if we were suspended due to response queue full */
monitor_qmp_try_resume_locked(mon);
qemu_mutex_unlock(&mon->qmp.qmp_lock);
@@ -4223,6 +4228,7 @@ static QMPRequest *monitor_qmp_requests_pop_any(void)
QTAILQ_FOREACH(mon, &mon_list, entry) {
qemu_mutex_lock(&mon->qmp.qmp_lock);
req_obj = g_queue_pop_head(mon->qmp.qmp_requests);
+ trace_monitor_qmp_request_queue(mon, mon->qmp.qmp_requests->length);
qemu_mutex_unlock(&mon->qmp.qmp_lock);
if (req_obj) {
break;
@@ -4280,6 +4286,7 @@ static void monitor_qmp_suspend_locked(Monitor *mon)
assert(mon->qmp.need_resume == false);
monitor_suspend(mon);
mon->qmp.need_resume = true;
+ trace_monitor_qmp_suspend(mon);
}
static void handle_qmp_command(JSONMessageParser *parser, GQueue *tokens)
@@ -4353,6 +4360,7 @@ static void handle_qmp_command(JSONMessageParser *parser,
GQueue *tokens)
* etc. will be delivered to the handler side.
*/
g_queue_push_tail(mon->qmp.qmp_requests, req_obj);
+ trace_monitor_qmp_request_queue(mon, mon->qmp.qmp_requests->length);
qemu_mutex_unlock(&mon->qmp.qmp_lock);
/* Kick the dispatcher routine */
diff --git a/trace-events b/trace-events
index c445f54773..bd9dade938 100644
--- a/trace-events
+++ b/trace-events
@@ -50,6 +50,10 @@ handle_qmp_command(void *mon, const char *req) "mon %p req:
%s"
monitor_suspend(void *ptr, int cnt) "mon %p: %d"
monitor_qmp_cmd_in_band(const char *id) "%s"
monitor_qmp_cmd_out_of_band(const char *id) "%s"
+monitor_qmp_suspend(void *mon) "mon=%p"
+monitor_qmp_resume(void *mon) "mon=%p"
+monitor_qmp_request_queue(void *mon, int len) "mon=%p len=%d"
+monitor_qmp_response_queue(void *mon, int len) "mon=%p len=%d"
# dma-helpers.c
dma_blk_io(void *dbs, void *bs, int64_t offset, bool to_dev) "dbs=%p bs=%p
offset=%" PRId64 " to_dev=%d"
--
2.17.1
- [Qemu-devel] [PATCH v6 03/13] qapi: remove error checks for event emission, (continued)
- [Qemu-devel] [PATCH v6 03/13] qapi: remove error checks for event emission, Peter Xu, 2018/08/15
- [Qemu-devel] [PATCH v6 04/13] monitor: move need_resume flag into monitor struct, Peter Xu, 2018/08/15
- [Qemu-devel] [PATCH v6 06/13] qapi: remove COMMAND_DROPPED event, Peter Xu, 2018/08/15
- [Qemu-devel] [PATCH v6 05/13] monitor: suspend monitor instead of send CMD_DROP, Peter Xu, 2018/08/15
- [Qemu-devel] [PATCH v6 07/13] monitor: restrict response queue length too, Peter Xu, 2018/08/15
- [Qemu-devel] [PATCH v6 08/13] monitor: remove "x-oob", turn oob on by default, Peter Xu, 2018/08/15
- [Qemu-devel] [PATCH v6 10/13] monitor: add traces for qmp queues,
Peter Xu <=
- [Qemu-devel] [PATCH v6 09/13] Revert "tests: Add parameter to qtest_init_without_qmp_handshake", Peter Xu, 2018/08/15
- [Qemu-devel] [PATCH v6 11/13] tests: remove "0.15" prefix for test-qmp-cmds, Peter Xu, 2018/08/15
- [Qemu-devel] [PATCH v6 13/13] monitor: reduce different code path for oob, Peter Xu, 2018/08/15
- [Qemu-devel] [PATCH v6 12/13] tests: add oob functional test for test-qmp-cmds, Peter Xu, 2018/08/15
- Re: [Qemu-devel] [PATCH v6 00/13] monitor: enable OOB by default, Markus Armbruster, 2018/08/28