load list of modules in one go as opposed to running separate module load commands for each of them - #5114
load list of modules in one go as opposed to running separate module load commands for each of them#5114boegel wants to merge 1 commit into
module load commands for each of them#5114Conversation
… load' commands for each of them
|
Using an easyconfig that is the first 49 extensions from
And with an easyconfig that is the first 12 extensions from
Each of these are timings for a single build. So this PR might improve the situation a little, but it does not get us anywhere close to EB4. |
|
I just dug into this a bit more, partially because we're planning to get rid of our SSD-based shared scratch filesystem soonish, which is making me switch to our regular GPFS scratch filesystem for my EasyBuild test environment. This results in a significant slowdown of test builds, to the point where an installation of for example Looking into this a bit, a significant amount of the time goes to loading modules for (build) dependencies, which can be slow because EasyBuild internally sets For
When environment modules & the installation for the toolchain & dependencies are on slow filesystems, it's definitely worth reducing the Next to the
A big chunk of these can probably also be avoided with caching the build environment and restoring it... I also see this as a proxy for accessing other files, i.e. the actual binaries/libraries/header files etc. that are provided by the dependencies. That can't be fixed easily, of course. We could check how many stats Lmod does for a single Also, we're still running Lmod 8.7, significant performance improvements have been implemented in Lmod 9.x, which would also help. Long story short: there's clearly a lot of room for improvement here... |
This should help quite a bit with resolving the performance regression reported in #5052, since all dependencies are being loaded in one go rather than one by one, at least for the "parent" installation.
We're still doing a separate
module loadfor the toolchain, but I won't look into that yet since changing that is lot more involved (there are separate private methods called fromToolchain._load_modules:_load_toolchain_moduleand_load_dependencies_modules).As I write this (rubber ducking 🦆 ) , I realize that I'm not sure how much impact this will have for extensions, since we only load the "fake" (temporary) module file for each extension (so a single
module load) viaEasyBlock.fake_module_environment...