On Sat, Apr 22, 2023 at 12:00:44AM +0000, Klemens Nanni wrote:
> On Fri, Apr 21, 2023 at 11:29:11PM +0000, Koakuma wrote:
> > I noticed that when using `ldomctl status` the utilization value of
> > stopped ldoms is always a copy of the previous entry's value,
> > which is probably incorrect?
Right, it sticks to the value of the last running guest, that's wrong.
> >
> > Zeroing utilization value in `ldomctl status` at the start of the loop
> > makes it so that stopped ldoms' utilization appear as a zero, which
> > I believe is a more appropriate value in this context.
> >
> > Before:
> > primary - running OpenBSD running
> > 11%
> > gentoo ttyV0 running Linux running
> > 0%
> > openbsd ttyV1 running OpenBSD running
> > 5%
> > solaris ttyV2 stopped -
> > 5%
> >
> > After:
> > primary - running OpenBSD running
> > 1%
> > gentoo ttyV0 running Linux running
> > 0%
> > openbsd ttyV1 running OpenBSD running
> > 8%
> > solaris ttyV2 stopped -
> > 0%
> >
> > Any comments?
>
> That explains why I saw >0% after i stopped a guest that caused problems...
> thought it was a bug nastier than this, but didn't look and forgot.
>
> Makes sense, I'll test in a few days and come back.
Works as expected, thanks!
>
> >
> > diff --git usr.sbin/ldomctl/ldomctl.c usr.sbin/ldomctl/ldomctl.c
> > index e48a560f7db..3a1b47cc1dc 100644
> > --- usr.sbin/ldomctl/ldomctl.c
> > +++ usr.sbin/ldomctl/ldomctl.c
> > @@ -574,6 +574,8 @@ guest_status(int argc, char **argv)
> > if (gid != -1 && guest->gid != gid)
> > continue;
> >
> > + utilisation = 0.0;
> > +
> > /*
> > * Request status.
> > */
I'd reset after the comment and struct msg setup,
closer to the switch block which may set the value.
Feedback? OK?
> > @@ -644,8 +646,6 @@ guest_status(int argc, char **argv)
> > if (yielded_cycles <= total_cycles)
> > utilisation = (100.0 * (total_cycles
> > - yielded_cycles)) / total_cycles;
> > - else
> > - utilisation = 0.0;
> >
> > break;
> > case GUEST_STATE_SUSPENDED:
> >
>
Index: ldomctl.c
===================================================================
RCS file: /cvs/src/usr.sbin/ldomctl/ldomctl.c,v
retrieving revision 1.40
diff -u -p -r1.40 ldomctl.c
--- ldomctl.c 24 Oct 2021 21:24:18 -0000 1.40
+++ ldomctl.c 7 Aug 2023 14:15:08 -0000
@@ -592,6 +592,8 @@ guest_status(int argc, char **argv)
if (nbytes != sizeof(msg))
err(1, "read");
+ utilisation = 0.0;
+
memcpy(&state, msg.msg.resstat.data, sizeof(state));
switch (state.state) {
case GUEST_STATE_STOPPED:
@@ -644,8 +646,6 @@ guest_status(int argc, char **argv)
if (yielded_cycles <= total_cycles)
utilisation = (100.0 * (total_cycles
- yielded_cycles)) / total_cycles;
- else
- utilisation = 0.0;
break;
case GUEST_STATE_SUSPENDED: