Re: Arm v7 RPi2 -current unresponsive to debugger escape during buildworld

bob prohaska <[email protected]>
Newsgroups gmane.os.freebsd.devel.arm
Message-ID <[email protected]>
On Tue, Nov 25, 2025 at 02:29:12PM -0800, Mark Millard wrote:
> On Nov 25, 2025, at 07:48, bob prohaska <[email protected]> wrote:
> 
> > On Mon, Nov 24, 2025 at 07:40:21PM -0800, Mark Millard wrote:
> >> On Nov 24, 2025, at 18:07, bob prohaska <[email protected]> wrote:
> >> 
> >>> A few minutes ago a Pi2 running buildworld for -current locked up again, with no
> >>> responsie to the debugger escape.
> >>> 
> >>> The system was swapping fairly hard but not stuck, maybe 600 MB in use, eventually
> >>> swap use declined but in minutes it got stuck with top displaying:
> >>> 
> >>> last pid: 51520;  load averages:    2.82,    2.96,    2.96                     up 1+02:48:27  16:27:58
> >>> 57 processes:  3 running, 54 sleeping
> >>> CPU: 66.4% user,  0.0% nice, 16.0% system,  0.3% interrupt, 17.4% idle
> >>> Mem: 183M Active, 540M Inact, 416K Laundry, 175M Wired, 98M Buf, 19M Free
> >>> Swap: 2048M Total, 23M Used, 2025M Free, 1% Inuse
> >>> 
> >>> PID USERNAME    THR PRI NICE   SIZE    RES STATE    C   TIME    WCPU COMMAND
> >>> 51497 root          5  59    0   352M   208M uwait    3   0:08 161.51% ld.lld
> >>> 51518 root          1 101    0   167M    71M CPU1     1   0:03  87.52% cc
> >>> 51520 root          1  59    0   167M    72M RUN      2   0:03  67.88% cc
> >>> 11811 root          1   0    0  6724K  1456K CPU0     0   5:51   0.46% top
> >>> 2047 root          1   0    0  4676K   704K select   0   1:08   0.09% powerd
> >>> 2206 bob           1   0    0    14M  1212K select   0   0:46   0.06% sshd-session
> >>> 2119 root          1   9    0    14M  2320K select   1   1:27   0.00% sshd
> >>> 
> >>> The over-100% utilization for cpu 3 looks somewhat implausible.
> >> 
> >> It is very plausible based on the above: note that THR
> >> (thread count) indicates 5 for ld.lld : It can have more
> >> than one core in use at the same time part of the time
> >> in order to have 161.51% WCPU. More than core 3 was in
> >> use by ld.lld . Some of the information shown is likely
> >> specific to the main/original thread.
> >> 
> >> (Top has a display mode that shows one thread per line
> >> instead of one process per line. It can also display
> >> Thread IDs instead of Process IDs. But PID can sometimes
> >> make it easier to identify which threads are part of one
> >> process. Non-thread-specific information is replicated.
> >> Top can also display more of the command line text.)
> > 
> > I completely misunderstood the meaning of "raw" vs "weighted"
> > CPU. Apparently the "raw" value reflects how much more work 
> > the CPU _could_ be doing, at least in terms of time. 
> > 
> 
> WCPU is based on the raw CPU figures but appears to involve
> loadaverage relalted information as well.
> 
> # sysctl -d kern.ccpu
> kern.ccpu: Decay factor used for updating %CPU in 4BSD scheduler
> 
> But what I get is:
> 
> # sysctl kern.ccpu
> kern.ccpu: 0
> 
> (Sees odd.)
> 
> >From the source to top and things it uses . . .
> 
> static load_avg  ccpu;
> . . .
>         GETSYSCTL("kern.ccpu", ccpu);
>                          
>         /* this is used in calculating WCPU -- calculate it ahead of time */
>         logcpu = log(loaddouble(ccpu));
> . . .
> 
> log(loaddouble(0)) does not seem likely.
> 
> where:
> 
> typedef long pctcpu;
> #define pctdouble(p) ((double)(p) / FSCALE)
> 
> typedef fixpt_t load_avg;
> #define loaddouble(la) ((double)(la) / FSCALE)
> 
> . . .
> typedef	__uint32_t	__fixpt_t;	/* fixed point number */
> . . .
> typedef	__fixpt_t	fixpt_t;	/* fixed point number */
> . . .
> 
> # sysctl -d kern.fscale
> kern.fscale: Fixed-point scale factor used for calculating load average values
> 
> # sysctl kern.fscale
> kern.fscale: 2048
> 
> Also:
> 
> #define FSHIFT  11              /* bits to right of fixed binary point */
> #define FSCALE  (1<<FSHIFT)
> 
> And:
> . . .
> fixpt_t ki_pctcpu; /* %cpu for process during ki_swtime */
> . . .
> u_int ki_swtime; /* Time swapped in or out */
> . . .
> 
> Back to top source code . . .
> 
> . . .
> /* define what weighted cpu is.  */
> #define weighted_cpu(pct, pp) ((pp)->ki_swtime == 0 ? 0.0 : \
>                          ((pct) / (1.0 - exp((pp)->ki_swtime * logcpu))))
> . . .
> #define PCTCPU(pp) (pcpu[pp - pbase])
> . . .
>                 sbuf_printf(procbuf, "%6.2f%% ", ps.wcpu ? 100.0 * weighted_cpu(PCTCPU(pp), pp) : 100.0 * PCTCPU(pp));
> 
> Note: Some of the references to pctcpu or PCTCPU or %cpu really seem
> to be the fraction of the cpu time and so actual percents result after
> scaling by 100.

I expected that top's cpu percentages would reflect a ratio of time
spent doing something commanded by the OS divided by the two second
update interval.... 

Silly me! Thank you for the enlightenment, 

bob prohaska
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.