summaryrefslogtreecommitdiff
path: root/examples/allnoconfig_simpler.py
diff options
context:
space:
mode:
authorUlf Magnusson <ulfalizer@gmail.com>2017-11-01 02:02:45 +0100
committerUlf Magnusson <ulfalizer@gmail.com>2017-11-01 06:04:10 +0100
commit70a9eb0668b51934f8d79f0c037d65aeb440bcef (patch)
tree11cd7c6bced43852446e37e7f18b4dc555f1debb /examples/allnoconfig_simpler.py
parent49a8303ca6e73419a3e26b963f78c61c6ab26d3b (diff)
Switch to a much faster invalidation algorithm
_cached_vis is always calculated as a side effect of calculating any other cached value, and so doubles as a flag for whether an item (symbol or choice) has any cached values. If _cached_vis is None for some item, it also indirectly means that no other item can have any cached values that (actually) depend on the item, because _cached_vis would have gotten calculated as a side effect of calculating any such cached value. Therefore, it's safe to stop recursive invalidation at an item that has _cached_vis None. Huge speedup for the allyes/noconfig*.py scripts. allnoconfig_simpler.py went from 2.671 seconds to 1.067 seconds. The dependency selftests need to be updated too now that _get_dependent() is gone. The kernel defconfig tests pass even if all global invalidation is disabled at least (except for the few defconfigs that don't set MODULES=y), and that's a huge invalidation test. Seems pretty speedy too, even though there's some redundant work, so maybe things could be simplified a bit...
Diffstat (limited to 'examples/allnoconfig_simpler.py')
-rw-r--r--examples/allnoconfig_simpler.py13
1 files changed, 0 insertions, 13 deletions
diff --git a/examples/allnoconfig_simpler.py b/examples/allnoconfig_simpler.py
index 59a1bd4..81e701c 100644
--- a/examples/allnoconfig_simpler.py
+++ b/examples/allnoconfig_simpler.py
@@ -5,19 +5,6 @@
# Usage:
#
# $ make [ARCH=<arch>] scriptconfig SCRIPT=Kconfiglib/examples/allnoconfig_simpler.py
-#
-# Implementation/performance note
-# ===============================
-#
-# Kconfiglib immediately invalidates (flags for recalculation) all (possibly)
-# dependent symbols when a value is assigned to a symbol, which slows this down
-# a bit (due to tons of redundant invalidation), but makes any assignment
-# pattern safe ("just works"). Kconfig.load_config() instead invalidates all
-# symbols up front, making it much faster. If you really need to eke out
-# performance, look at how load_config() does things (which involves internal
-# APIs that don't invalidate symbols). This has been fast enough for all cases
-# I've seen so far though (around 3 seconds for this particular script on my
-# Core i7 2600K, including the initial Kconfig parsing).
from kconfiglib import Kconfig, BOOL, TRISTATE
import sys