[PATCH] vars.sh: remove unnecessary fork to speedup boot/upgrades

Adam Borowski kilobyte at angband.pl
Wed Sep 2 13:40:09 BST 2020


On Tue, Sep 01, 2020 at 08:41:38PM +0200, Trek wrote:
> Thorsten Glaser <t.glaser at tarent.de> wrote:
> > On Mon, 31 Aug 2020, Adam Borowski wrote:
> > > I don't think we should throw away a significant (10% w/o color /
> > > 5% with) speed-up just because of a bug _somewhere else_.  
> > 
> > But I found something to possibly work around both this bug and
> > the speed penalisation depending on shell implementation.

> revision		dash	mksh	bash
> -----------------------+-------+-------+-----
> patch1-10		100.0	132.7	201.0
> fancy			328.3	413.4

> fancy output is really slow, mostly because it forks many tput and some
> echo, here the execve list when starting a service with the
> debian/master version and dash

It's pointless to use tput.  It uses assumptions that made sense many
decades ago, but do more ill than good nowadays (eg. on a serial console).
The TERM variable is of no use as terminal/OS vendors stopped updating
their termcap databases by mid-1980s as every terminal switched to vt100ish
commands that have a good enough baseline and cleanly ignore extensions.

Thus, most new programs simply hardcode the color codes.  Even no-color
terminals (last I've seen are Win98's telnet.exe and something on last
millenium VMS) gracefully skip them, possibly supporting bold (\e[1m).

So, let's do this:
    if [ -t 1 ]; then
        printf '\e[31mRED \e[32;1mLIGHT GREEN\e[0m\n'
    else
        printf 'monochromatic\n'
    fi

Ie, if isatty(1) say we're on a terminal, we can use fancy color.

The syntax is: \e [ ;-separated-commands m

A very paranoid list of supported commands, as of turn of the millenium:
    0    reset
    1    bright/bold
    31	 red
    32   green
    33   brown/yellow
    34   blue
    35   magenta
    36   cyan
    37   white
Any sane terminal from last decades can do much more, but we want to be
safe on Cisco Java SuperHiperBrokenTerm.

And hey, lookie here:
https://github.com/systemd/systemd/blob/master/tools/coverity.sh#L18
https://github.com/systemd/systemd/blob/master/src/basic/terminal-util.h

The former doesn't even check isatty(), the latter uses codes that don't
work on Hurd console or Linux < 3.16 (where I implemented them myself :) ).


Meow!
-- 
⢀⣴⠾⠻⢶⣦⠀
⣾⠁⢠⠒⠀⣿⡁
⢿⡄⠘⠷⠚⠋⠀ It's time to migrate your Imaginary Protocol from version 4i to 6i.
⠈⠳⣄⠀⠀⠀⠀



More information about the Debian-init-diversity mailing list