I really hate having long discussions in github per-line comments to merged
commits, because nobody will ever be able to _find_ them again six months from
now if that history needs to be referenced.

Continuing from:

  https://github.com/landley/toybox/commit/cbc3e2c9889e#r123308704

On 8/1/23 09:50, enh-google wrote:
> yeah, but (a) gsed isn't part of macOS (it's from homebrew) and (b) since 
> that's
> actually a fairly new sed, as far as we know, /sed/ isn't the point at all ---
> it's just that process launching is slow and (c) because we don't have a 
> second
> witness, as far as we know, it's just /my/ mac that's slow anyway.

The second witness is Zach van Rijn gave me ssh access to:

  __  __                        _       _   __  __ _
 |  \/  | __ _  ___   _ __ ___ (_)_ __ (_) |  \/  / |
 | |\/| |/ _` |/ __| | '_ ` _ \| | '_ \| | | |\/| | |
 | |  | | (_| | (__  | | | | | | | | | | | | |  | | |
 |_|  |_|\__,_|\___| |_| |_| |_|_|_| |_|_| |_|  |_|_|
                                ___  ____
    _     _ __ ___   __ _  ___ / _ \/ ___|  Welcome to Darwin on
  _| |_  | '_ ` _ \ / _` |/ __| | | \___ \  Apple Silicon (16GB)
 |_   _| | | | | | | (_| | (__| |_| |___) |
   |_|   |_| |_| |_|\__,_|\___|\___/|____/      2020 M1 Mac Mini

 Hardware donated, hosted,                   Report issues here:
 and managed by Adélie Linux.                      zv.io/contact

I was guessing that the homebrew launch plumbing is a latency spike comparable
with cygwin (for similar reasons: gnu duct-taped to non-gnu), but I hadn't dug
nontrivially into it because even _with_ homebrew:

  $ date +%s.%N
  1690907598.N

That said, looking again:

  $ ./toybox date +%s.%N; gsed 2>/dev/null; ./toybox date +%s.%N
  1690907813.326507000
  1690907813.341453000
  $ ./toybox date +%s.%N; sed </dev/null 2>/dev/null; ./toybox date +%s.%N
  1690907834.689830000
  1690907834.700861000
  $ ./toybox date +%s.%N; ./toybox date +%s.%N
  1690907949.490777000
  1690907949.497742000

It's not _that_ bad? 7 ms to do basically nothing...

  $ ./toybox date +%s.%N; false; false; false; ./toybox date +%s.%N
  1690908392.773238000
  1690908392.781617000
  $ ./toybox date +%s.%N; /usr/bin/false; /usr/bin/false; /usr/bin/false;
./toybox date +%s.%N
  1690908440.248034000
  1690908440.271217000

Toybox date isn't noticeably slower than launching "false" (shell builtin is
basically free). So maybe the problem is that MacOS is slow at launching ANY
binary? (Blame the mach-o plumbing? 7 ms on one of the new fire-breathing M1
chips is presumably a bit longer on an old laptop. We also didn't ask gsed to
_do_ anything, I dunno if there's lazy binding and such on mac pulling in more
shared libraries if you actually exercise code paths...)

The </dev/null above is because macos sed run with no arguments acts as "cat".
I'm not sure why? Nothing else seems to...

  $ echo hello world | sed
  hello world
  $ echo hello world | awk
  usage: awk [-F fs] [-v var=value] [-f progfile | 'prog'] [file ...]
  $ echo hello world | tr
  usage: tr [-Ccsu] string1 string2
         tr [-Ccu] -d string1
         tr [-Ccu] -s string1
         tr [-Ccu] -ds string1 string2
  $ echo hello world | gsed 2>&1 | wc
        41     207    1797

> i think either of just s/their// or s/their gsed/gsed on macOS/ would be
> accurate and fair, but the current wording is quite misleading (or at least,
> "doesn't accurately say what we /know/ to be true").

The new one's faster. It goes to 11. I'm happy to admit the old slowness was
bypassed (by staying within bash) rather than thoroughly root caused...

Rob
_______________________________________________
Toybox mailing list
Toybox@lists.landley.net
http://lists.landley.net/listinfo.cgi/toybox-landley.net

Reply via email to