All the mail mirrored from lore.kernel.org
 help / color / mirror / Atom feed
From: Daniil Tatianin <d-tatianin@yandex-team.ru>
To: "Philippe Mathieu-Daudé" <philmd@linaro.org>,
	"Markus Armbruster" <armbru@redhat.com>
Cc: "Michael S. Tsirkin" <mst@redhat.com>,
	Paolo Bonzini <pbonzini@redhat.com>,
	Eric Blake <eblake@redhat.com>,
	qemu-devel@nongnu.org, Peter Maydell <peter.maydell@linaro.org>
Subject: Re: [PATCH] mc146818rtc: add a way to generate RTC interrupts via QMP
Date: Thu, 2 May 2024 10:30:38 +0300	[thread overview]
Message-ID: <4942e46a-3ab0-46bd-8a21-90f9b3c1c592@yandex-team.ru> (raw)
In-Reply-To: <40bee8cc-6cad-4c5b-a319-49dcbb2b82f1@linaro.org>

On 4/29/24 4:39 PM, Philippe Mathieu-Daudé wrote:

> (+Peter who has more experience on such design).
>
> On 29/4/24 13:32, Markus Armbruster wrote:
>> Philippe Mathieu-Daudé <philmd@linaro.org> writes:
>>
>>> Hi Daniil, Markus,
>>>
>>> On 26/4/24 10:39, Markus Armbruster wrote:
>>>> Daniil Tatianin <d-tatianin@yandex-team.ru> writes:
>>>>
>>>>> This can be used to force-synchronize the time in guest after a long
>>>>> stop-cont pause, which can be useful for serverless-type workload.
>
> What is a "serverless-type workload"?

That's when your VM instance only runs on demand for a few seconds 
before going to sleep again
until the next user request comes in.

>>>>> Signed-off-by: Daniil Tatianin <d-tatianin@yandex-team.ru>
>>>>> ---
>>>>>    hw/rtc/mc146818rtc.c         | 15 +++++++++++++++
>>>>>    include/hw/rtc/mc146818rtc.h |  1 +
>>>>>    qapi/misc-target.json        | 16 ++++++++++++++++
>>>>>    3 files changed, 32 insertions(+)
>>>>>
>>>>> diff --git a/hw/rtc/mc146818rtc.c b/hw/rtc/mc146818rtc.c
>>>>> index f4c1869232..6980a78d5f 100644
>>>>> --- a/hw/rtc/mc146818rtc.c
>>>>> +++ b/hw/rtc/mc146818rtc.c
>>>>> @@ -116,6 +116,21 @@ void qmp_rtc_reset_reinjection(Error **errp)
>>>>>        }
>>>>>    }
>>>>>    +void qmp_rtc_notify(Error **errp)
>>>>> +{
>>>>> +    MC146818RtcState *s;
>>>>> +
>>>>> +    /*
>>>>> +     * See:
>>>>> +     * 
>>>>> https://www.kernel.org/doc/Documentation/virtual/kvm/timekeeping.txt
>
> What part of this document explains why this change is required?
> I probably missed it. Explaining it here briefly would be more
> useful.

Sure, will do!

>
>>>>> +     */
>>>>> +    QLIST_FOREACH(s, &rtc_devices, link) {
>>>>> +        s->cmos_data[RTC_REG_B] |= REG_B_UIE;
>                                       // Update-ended interrupt enable
>
>>>>> +        s->cmos_data[RTC_REG_C] |= REG_C_IRQF | REG_C_UF;
>                                       // interrupt request flag
>                                       //           update interrupt flag
>
>>>>> +        qemu_irq_raise(s->irq);
>>>>> +    }
>>>>> +}
>>>>> +
>>>> Note for later: qmp_rtc_notify() works on all realized mc146818rtc
>>>> devices.  Other kinds of RTC devices are silently ignored. Just like
>>>> qmp_rtc_reset_reinjection().
>>>
>>> IMO to avoid any future ambiguity (in heterogeneous machines), this
>>> command must take a QOM device path (or a list of) and only notify
>>> those.
>>
>> Let's compare:
>>
>> • With QOM path:
>>
>>    · You need to know the machine's RTC device(s).
>>
>>      Unfortunately, this is bothersome, as the QOM path is not stable.
>
> But we'll need more of that with dynamic machines...
>
>>      For Q35, it's generally "/machine/unattached/device[N]/rtc", but N
>>      varies with configuration (TCG N=2, KVM N=3 for me), and it might
>>      vary with machine type version.  That's because the machine code
>>      creates ICH9-LPC without a proper name.  We do that a lot. I hate
>>      it.
>>
>>      Likewise for i440FX with PIIX3 instead of ICH9-LPC.
>>
>>      For isapc, it's /machine/unattached/device[3].  I suspect the 3
>>      isn't reliable there, either.
>>
>>      microvm doesn't seem to have an RTC by default.
>>
>>    · If the device so named doesn't support IRQ inject, the command
>>      should fail.
>
> Yes, why the management app would want to run this command if there
> are not RTC on the machine?
>
>>    · Could be generalized to non-RTC devices when that's useful.
>>
>> • Broadcast:
>>
>>    · You don't need to know the machine's RTC device(s).
>>
>>    · If there are multiple RTC devices that support IRQ inject, we 
>> inject
>>      for each of them.  There is no way to select specific RTCs.
>>
>>    · If there is no RTC device that supports IRQ inject, the command 
>> does
>>      nothing silently.
>>
>>      I don't like silent failures.  It could be made to fail instead.
>>
>> If it wasn't for the unstable QOM path problem, I'd advise against
>> the broadcast interface.
>>
>> Thoughts?
>
> Something bugs me in this patch but I couldn't figure out what I am
> missing. The issue is when migrated VM is restored. I don't get why
> the behavior depends on an external decision (via external management
> transport). Don't we have post_load() hooks for such tuning?
> This device implements it in rtc_post_load().

This isn't really related to migration though. Serverless is based on 
constantly stopping and resuming the VM on e.g. every HTTP request to an 
endpoint.

As far as Markus' comment goes, I propose we go the broadcast route, and 
just add the -broadcast suffix to the current command name.

If everyone is okay with that, I will submit a v3.

Thank you!

>
> Regards,
>
> Phil.
>
> PD: BTW tomorrow community call could be a good opportunity to discuss
> this.
>


      parent reply	other threads:[~2024-05-02  7:31 UTC|newest]

Thread overview: 10+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-04-25 13:37 [PATCH] mc146818rtc: add a way to generate RTC interrupts via QMP Daniil Tatianin
2024-04-26  8:39 ` Markus Armbruster
2024-04-26  9:28   ` Daniil Tatianin
2024-04-26  9:47     ` Markus Armbruster
2024-04-26  9:48   ` Philippe Mathieu-Daudé
2024-04-29  9:43     ` Philippe Mathieu-Daudé
2024-04-29 11:32     ` Markus Armbruster
2024-04-29 13:39       ` Philippe Mathieu-Daudé
2024-04-29 14:02         ` Markus Armbruster
2024-05-02  7:30         ` Daniil Tatianin [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=4942e46a-3ab0-46bd-8a21-90f9b3c1c592@yandex-team.ru \
    --to=d-tatianin@yandex-team.ru \
    --cc=armbru@redhat.com \
    --cc=eblake@redhat.com \
    --cc=mst@redhat.com \
    --cc=pbonzini@redhat.com \
    --cc=peter.maydell@linaro.org \
    --cc=philmd@linaro.org \
    --cc=qemu-devel@nongnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.