Optimize consistency and state handling
Compare changes
- Benjamin Schubert authored
This doesn't need to be run in the scheduler's process and can be offloaded to the child, which will allow better multiprocessing
This optimizes how BuildStream handles states, and reduces the number of calls that are necessary to detect whether something is cached or not.
Changes proposed in this merge request:
is_resolved
on sources to determine whether the source is resolved or not. Default implementation is self.get_ref() is not None
is_cached()
on sources to determine whether the source has a local copy of its dataget_consistency()
on Source
, which only allows coarse-grained state tracking and is not needed by 1 and 2.Element
Fix #1126 (closed)
This optimization ensures that we do not call the check for a plugin of whether its sources are cached or not.
This means that if sources are in the internal source cache, we don't call the validate_cache
part of the plugin anymore, which means that warnings will not be shown/will not error the build as soon as the source is in the source cache.
Since this is a breaking behavior it will need to be synchronized with
action | python_version | commit | median time (secs) | mean time (secs) ± std |
---|---|---|---|---|
build - 12 | py37 | bschubert/optimize-consistency - 8b8b7e52 | 81.445 | 81.20 ± 0.74 |
py37 | master - 51263e21 | 84.735 | 84.74 ± 0.22 | |
build - 24 | py37 | bschubert/optimize-consistency - 8b8b7e52 | 81.35 | 81.28 ± 0.35 |
py37 | master - 51263e21 | 84.975 | 85.04 ± 0.47 | |
build - 4 | py37 | bschubert/optimize-consistency - 8b8b7e52 | 88.775 | 88.84 ± 0.26 |
py37 | master - 51263e21 | 92.18 | 92.07 ± 0.76 | |
build - 8 | py37 | bschubert/optimize-consistency - 8b8b7e52 | 81.725 | 81.86 ± 0.48 |
py37 | master - 51263e21 | 84.985 | 84.84 ± 0.48 | |
show | py37 | bschubert/optimize-consistency - 8b8b7e52 | 4.84 | 4.84 ± 0.03 |
py37 | master - 51263e21 | 4.89 | 4.90 ± 0.04 | |
show - cached | py37 | bschubert/optimize-consistency - 8b8b7e52 | 7.525 | 7.53 ± 0.32 |
py37 | master - 51263e21 | 7.93 | 8.00 ± 0.16 | |
show - sources fetched | py37 | bschubert/optimize-consistency - 8b8b7e52 | 7.135 | 7.08 ± 0.23 |
py37 | master - 51263e21 | 4.87 | 4.87 ± 0.05 | |
source fetch | py37 | bschubert/optimize-consistency - 8b8b7e52 | 41.695 | 41.68 ± 0.27 |
py37 | master - 51263e21 | 48.055 | 47.92 ± 0.33 |
There were 4 runs of each command.
action | commit | real | user | sys |
---|---|---|---|---|
bst show - nothing cached | master | 1m28 | 1m47 | 0m17 |
1m34 | 1m53 | 0m18 | ||
1m32 | 1m50 | 0m17 | ||
optimize-consistency | 0m11 | 0m10 | 0m01 | |
0m11 | 0m10 | 0m01 | ||
0m11 | 0m10 | 0m03 | ||
bst --fetchers 32 source fetch | master | 5m01 | 24m4 | 11m35 |
5m05 | 23m55 | 11m34 | ||
5m04 | 24m6 | 11m31 | ||
optimize-consistency | 4m11 | 24m33 | 11m2 | |
4m05 | 23m44 | 10m40 | ||
4m16 | 24m53 | 11m11 | ||
bst show - sources cached | master | 1m24 | 0m31 | 0m55 |
1m21 | 0m31 | 0m53 | ||
1m24 | 0m32 | 0m56 | ||
optimize-consistency | 0m17 | 0m13 | 0m03 | |
0m16 | 0m13 | 0m03 | ||
0m18 | 0m14 | 0m03 | ||
bst build | NOT COMPUTED, TOO LONG | X | X | X |
bst show - all cached | master | 1m58 | 0m38 | 1m32 |
1m54 | 0m37 | 1m20 | ||
1m56 | 0m38 | 1m21 | ||
optimize-consistency | 0m26s | 0m16s | 0m06 | |
0m19 | 0m15 | 0m04 | ||
0m19 | 0m15 | 0m04 |
This doesn't need to be run in the scheduler's process and can be offloaded to the child, which will allow better multiprocessing