[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH v2] block-backend: per-device throttling of BLOCK_IO_ERROR re
From: |
Markus Armbruster |
Subject: |
Re: [PATCH v2] block-backend: per-device throttling of BLOCK_IO_ERROR reports |
Date: |
Fri, 19 Jul 2024 06:54:21 +0200 |
User-agent: |
Gnus/5.13 (Gnus v5.13) |
Kevin Wolf <kwolf@redhat.com> writes:
> Am 09.01.2024 um 14:13 hat Vladimir Sementsov-Ogievskiy geschrieben:
>> From: Leonid Kaplan <xeor@yandex-team.ru>
>>
>> BLOCK_IO_ERROR events comes from guest, so we must throttle them.
>> We still want per-device throttling, so let's use device id as a key.
>>
>> Signed-off-by: Leonid Kaplan <xeor@yandex-team.ru>
>> Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@yandex-team.ru>
>> ---
>>
>> v2: add Note: to QAPI doc
>>
>> monitor/monitor.c | 10 ++++++++++
>> qapi/block-core.json | 2 ++
>> 2 files changed, 12 insertions(+)
>>
>> diff --git a/monitor/monitor.c b/monitor/monitor.c
>> index 01ede1babd..ad0243e9d7 100644
>> --- a/monitor/monitor.c
>> +++ b/monitor/monitor.c
>> @@ -309,6 +309,7 @@ int error_printf_unless_qmp(const char *fmt, ...)
>> static MonitorQAPIEventConf monitor_qapi_event_conf[QAPI_EVENT__MAX] = {
>> /* Limit guest-triggerable events to 1 per second */
>> [QAPI_EVENT_RTC_CHANGE] = { 1000 * SCALE_MS },
>> + [QAPI_EVENT_BLOCK_IO_ERROR] = { 1000 * SCALE_MS },
>> [QAPI_EVENT_WATCHDOG] = { 1000 * SCALE_MS },
>> [QAPI_EVENT_BALLOON_CHANGE] = { 1000 * SCALE_MS },
>> [QAPI_EVENT_QUORUM_REPORT_BAD] = { 1000 * SCALE_MS },
>> @@ -498,6 +499,10 @@ static unsigned int qapi_event_throttle_hash(const void
>> *key)
>> hash += g_str_hash(qdict_get_str(evstate->data, "qom-path"));
>> }
>>
>> + if (evstate->event == QAPI_EVENT_BLOCK_IO_ERROR) {
>> + hash += g_str_hash(qdict_get_str(evstate->data, "device"));
>> + }
>
> Using "device" only works with -drive, i.e. when the BlockBackend
> actually has a name. In modern configurations with a -blockdev
> referenced by -device, the BlockBackend doesn't have a name any more.
>
> Maybe we should be using the qdev id (or more generally, QOM path) here,
> but that's something the event doesn't even contain yet.
Uh, does the event reliably identify the I/O error's node or not? If
not, then that's a serious design defect.
There's @node-name. Several commands use "either @device or @node-name"
to identify a node. Is that sufficient here?
[...]