fix large PID overflow their column in top command
Bernhard Reutner-Fischer
rep.dot.nop at gmail.com
Tue Feb 13 18:16:35 UTC 2024
On Mon, 5 Feb 2024 09:56:20 +0000
Matthew Chae <Matthew.Chae at axis.com> wrote:
> Hi David,
>
> I'm sending an improved patch based on your comments.
>
> Not only does it not care about the PID_MAX value,
> it searches all the contents to be output to recognize the required column width
> and dynamically allocates the space for PID and PPID appropriately without creating a lot of empty space.
>
> Additionally, this patch still allows user names to be displayed up to 8 characters without truncation.
>
> Can you look through the attachment?
Unfortunately the patch does not apply to current master.
How much would your patch add to the size? Can you bring it down to a
minimum?
See make baseline; apply the patch;make bloatcheck
thanks
> (0002-Allocate-PID-PPID-space-dynamically-in-top-command.patch)
>
> BR-Matthew Chae
> ________________________________
> From: David Laight <David.Laight at ACULAB.COM>
> Sent: Thursday, November 23, 2023 6:10 PM
> To: 'Denys Vlasenko' <vda.linux at googlemail.com>; Matthew Chae <Matthew.Chae at axis.com>
> Cc: busybox at busybox.net <busybox at busybox.net>; Christopher Wong <Christopher.Wong at axis.com>
> Subject: RE: fix large PID overflow their column in top command
>
> ...
> > + fp = xfopen_for_read("/proc/sys/kernel/pid_max");
> > + if (!fgets(pid_buf, PID_DIGITS_MAX + 1, fp)) {
> > ...
> > + if (strncmp(pid_buf, "32768", 5) == 0)
> > + pid_digits_num = 5;
> > + else
> > + pid_digits_num = PID_DIGITS_MAX;
> >
> > The logic above is not sound. Even if sysctl kernel.pid_max
> > is 32768, there can be already running processes with pids > 99999.
>
> It's also probably wrong for pretty much all other values.
>
> I'd just base the column width on strlen(pid_buf) with a minimum
> value of 5.
>
> It is unlikely that pid_max has been reduced - so column overflow
> it that case probably doesn't really matter.
>
> The more interesting case is really a system with a very large pid_max
> that has never run many processes.
> You don't really want lots of blank space.
>
> I can't remember whether top reads everything before doing any output?
> Since the output is sorted it probably almost always does.
> In which case it knows the column width it will need.
>
> I did post a patch a while back that enabled 'Irix mode'.
> (100% cpu is one cpu at 100%, not all cpus at 100%)
> Maybe I should dig it out again.
>
> David
>
> -
> Registered Address Lakeside, Bramley Road, Mount Farm, Milton Keynes, MK1 1PT, UK
> Registration No: 1397386 (Wales)
More information about the busybox
mailing list