support/scripts/cve.py: use fast ijson backend if available on old ijson versions
PATCH 1/1 support/scripts/cve.py: use fast ijson backend if available on old ijson versions
ijson < 2.5 (as available in Debian 10) use the slow python backend by default instead of the most efficient one available like modern ijson versions, significantly slowing down cve checking. E.G.:
time ./support/scripts/pkg-stats --nvd-path ~/.nvd -p avahi --html foobar.html
Goes from
174,44s user 2,11s system 99% cpu 2:58,04 total
To
93,53s user 2,00s system 98% cpu 1:36,65 total
E.G. almost 2x as fast.
As a workaround, detect when the python backend is used and try to use a more efficient one instead. Use the yajl2_cffi backend as recommended by upstream, as it is most likely to work, and print a warning (and continue) if we fail to load it.
The detection is slightly complicated by the fact that ijson.backends used to be a reference to a backend module, but is nowadays a string (without the ijson.backends prefix).
--- support/scripts/cve.py | 6 ++++++ 1 file changed, 6 insertions(+)
support/scripts/cve.py +6 -0
@@ -28,6 +28,12 @@ import operator try: import ijson + # backend is a module in < 2.5, a string in >= 2.5 + if 'python' in getattr(ijson.backend, '__name__', ijson.backend): + try: + import ijson.backends.yajl2_cffi as ijson + except ImportError: + sys.stderr.write('Warning: Using slow ijson python backend\n') except ImportError: sys.stderr.write("You need ijson to parse NVD for CVE check\n") exit(1)
Signature · 1 line
2.20.1
Yann E. MORIN
AppliedPATCH 1/1 support/scripts/cve.py: use fast ijson backend if available on old ijson versions
Peter, All,
On 2021-04-09 13:01 +0200, Peter Korsgaard spake thusly:
Quoted 19 lines
ijson < 2.5 (as available in Debian 10) use the slow python backend by default instead of the most efficient one available like modern ijson versions, significantly slowing down cve checking. E.G.:
time ./support/scripts/pkg-stats --nvd-path ~/.nvd -p avahi --html foobar.html
Goes from
174,44s user 2,11s system 99% cpu 2:58,04 totalTo
93,53s user 2,00s system 98% cpu 1:36,65 totalE.G. almost 2x as fast.
As a workaround, detect when the python backend is used and try to use a more efficient one instead. Use the
yajl2_cffibackend as recommended by upstream, as it is most likely to work, and print a warning (and continue) if we fail to load it.
Quoted 5 lines
The detection is slightly complicated by the fact that ijson.backends used to be a reference to a backend module, but is nowadays a string (without the ijson.backends prefix).
Signed-off-by Peter Korsgaard <[email protected]>
Applied to master, thanks.
Regards,
Yann E. MORIN.
Quoted 28 lines
--- support/scripts/cve.py | 6 ++++++ 1 file changed, 6 insertions(+)support/scripts/cve.py +6
-0@@ -28,6 +28,12 @@ import operator try: import ijson + # backend is a module in < 2.5, a string in >= 2.5 + if 'python' in getattr(ijson.backend, '__name__', ijson.backend): + try: + import ijson.backends.yajl2_cffi as ijson + except ImportError: + sys.stderr.write('Warning: Using slow ijson python backend\n') except ImportError: sys.stderr.write("You need ijson to parse NVD for CVE check\n") exit(1)Signature · 6 lines
2.20.1 _______________________________________________ buildroot mailing list buildroot at busybox.net http://lists.busybox.net/mailman/listinfo/buildroot
Signature · 6 lines
.-----------------.--------------------.------------------.--------------------. | Yann E. MORIN | Real-Time Embedded | /"\ ASCII RIBBON | Erics' conspiracy: | | +33 662 376 056 | Software Designer | \ / CAMPAIGN | ___ | | +33 561 099 427 `------------.-------: X AGAINST | \e/ There is no | | http://ymorin.is-a-geek.org/ | _/*\_ | / \ HTML MAIL | v conspiracy. | '------------------------------^-------^------------------^--------------------'
PATCH 1/1 support/scripts/cve.py: use fast ijson backend if available on old ijson versions
In reply to Peter KorsgaardQuoted 21 lines
Quoted 1 line
Quoted 1 line
Quoted 1 line
Quoted 1 line
"Peter" == Peter Korsgaard <[email protected]> writes:
ijson < 2.5 (as available in Debian 10) use the slow python backend by default instead of the most efficient one available like modern ijson versions, significantly slowing down cve checking. E.G.:
time ./support/scripts/pkg-stats --nvd-path ~/.nvd -p avahi --html foobar.html
Goes from
174,44s user 2,11s system 99% cpu 2:58,04 totalTo
93,53s user 2,00s system 98% cpu 1:36,65 totalE.G. almost 2x as fast.
As a workaround, detect when the python backend is used and try to use a more efficient one instead. Use the
yajl2_cffibackend as recommended by upstream, as it is most likely to work, and print a warning (and continue) if we fail to load it.
Quoted 5 lines
The detection is slightly complicated by the fact that ijson.backends used to be a reference to a backend module, but is nowadays a string (without the ijson.backends prefix).
Signed-off-by Peter Korsgaard <[email protected]>
Committed to 2021.02.x, thanks.
Signature · 1 line
Bye, Peter Korsgaard