[This patch is reviewed in parallel on GitHub] Hi,
Please review my latest take on fixing ganeti memory model. I've tried to implement the memory model as discussed in [1] and proposed in [2], but without introducing memory overcommitment (swap etc) or dependencies on 2.17 features. The changes should fix missing memory, node memory as reported by hbal & friends resulting in a more conservative estimation of available memory on the node. This should prevent situations, when the KVM node is involuntarily oversubscribed - as instances touch more memory, they grow and at some point this leads to OOM kills. This implementation of the proposed memory model can be easily extended to support memory overcommitment (as in [2]) by adding additional state variables (total/available swap size) and a additional constraint based on overcommitment ratio, some hints are left in code comments. To comment on this patch using GitHub see [3]. [1] https://code.google.com/p/ganeti/issues/detail?id=127 [2] https://groups.google.com/forum/#!searchin/ganeti-devel/memory$20model%7Csort:relevance/ganeti-devel/lDfiAvBeqPw/JBXyAUfuAwAJ [3] https://github.com/RafaelMarinheiro/ganeti/pull/3 Viktor Bachraty (3): Htools should use state-of-record instance size Add optStaticKvmNodeMemory to HTools Redesign Ganeti memory model src/Ganeti/HTools/Backend/Luxi.hs | 19 ++-- src/Ganeti/HTools/CLI.hs | 13 ++- src/Ganeti/HTools/Cluster.hs | 17 ++-- src/Ganeti/HTools/ExtLoader.hs | 6 +- src/Ganeti/HTools/Loader.hs | 26 +++-- src/Ganeti/HTools/Node.hs | 155 +++++++++++++++++++++-------- src/Ganeti/HTools/Program/Hail.hs | 1 + src/Ganeti/HTools/Program/Hbal.hs | 1 + src/Ganeti/HTools/Program/Hinfo.hs | 1 + src/Ganeti/HTools/Program/Hroller.hs | 1 + src/Ganeti/HTools/Program/Hspace.hs | 1 + src/Ganeti/HTools/Program/Hsqueeze.hs | 1 + test/hs/Test/Ganeti/HTools/Backend/Text.hs | 14 ++- test/hs/Test/Ganeti/HTools/Node.hs | 11 +- 14 files changed, 190 insertions(+), 77 deletions(-) -- 2.12.0.367.g23dc2f6d3c-goog
