spack/lib/spack
Tom Scogland 4a7b0afde2
Log performance improvement (#23925)
* util.tty.log: read up to 100 lines if ready

Rework to read up to 100 lines from the captured stdin as long as data
is ready to be read immediately.  Adds a helper function to poll with
`select` for ready data.  This showed a roughly 5-10x perf improvement
for high-rate writes through the logger with relatively short lines.

* util.tty.log: Defer flushes to end of ready reads

Rather than flush per line, flush per set of reads.  Since this is a
non-blocking loop, the total perceived wait is short.

* util.tty.log: only scan each line once, usually

Rather than always find all control characters then substitute them all,
use `subn` to count the number of control characters replaced.  Only if
control characters exist find out what they are.  This could be made
truly single pass with sub with a function, but it's a more intrusive
change and this got 99%ish of the performance improvement (roughly
another 2x in some cases).

* util.tty.log: remove check for `readable`

Python < 3 does not support a readable check on streams, should not be
necessary here since we control the only use and it's explicitly a
stream to be read.
2021-05-31 20:33:14 -07:00
..
docs adding support for export of private gpg key (#22557) 2021-05-28 23:32:57 -07:00
env cc: change mode to ccld for loopopt edit (#23482) 2021-05-13 21:31:20 -07:00
external spack: update archspec 2021-05-20 14:56:04 -07:00
llnl Log performance improvement (#23925) 2021-05-31 20:33:14 -07:00
spack adding support for export of private gpg key (#22557) 2021-05-28 23:32:57 -07:00