...discovered by during investigation of latest Scheduler failures. The root of the problems is that block overflow can potentially trigger expansion of the allocation pool. Under some circumstances, this on-the fly allocation requires a rotation of index slots, thereby invalidating existing iterators. While such behaviour is not uncommon with storage data structures (see std::vector), in this case it turns out problematic because due to performance considerations, a usage pattern emerged which exploits re-using existing storage »Slots« with known deadline. This optimisation seems to have significant leverage on the planning jobs, which happen to allocated and arrange a whole strike of Activities with similar deadlines. One of these problem situations can easily be fixed, since it is triggered through the iterator itself, using a delegate function to request a storage expansion, at which point the iterator is able to re-link and fix its internal index. This solution also has no tangible performance implications in optimised code. Unfortunately there remains one obscure corner case where such an pool expansion could also have invalidated other iterators, which are then used later to attach dependency relations; even a partial fix for that problem seems to cause considerable performance cost of about -14% in optimised code. |
||
|---|---|---|
| .. | ||
| draw | ||
| DIR_INFO | ||
| empty.html | ||
| InterfaceConcept_Varga.mm | ||
| renderengine.html | ||
| thinkPad.ichthyo.mm | ||
| uml | ||
| workflow.mm | ||