-
Notifications
You must be signed in to change notification settings - Fork 10
[DO NOT MERGE] Generate reports #3
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[DO NOT MERGE] Generate reports #3
Conversation
|
Version comparison is extremely valuable, well done! The numbers look really srange though, 3-5x degradation from version to version looks like either debug mode or boehm gc. |
|
I will double-check that I do not have any debugging enabled by accident and re-run it tonight. |
2b8cd6a to
6800fd5
Compare
|
@valdisxp1 Indeed, master regressed wrt 0.3.8. I did manual bisect based first few benchmarks and found that it regressed in scala-native/scala-native#1295. The issue is that we used to do DCE after lowering and before codegen and that PR mistakenly removed it. |
5ce9d98 to
7bcaa51
Compare
|
Including more changes #4 and automation stuff.
scripts/run.py latest@master latest@my-branch
scripts/summary latest@master latest@my-branch |
…master # Conflicts: # scripts/summary.py
Features: - New `SCALANATIVE_GC` option `commix` to enable the new GC changes. - Concurrent, parallel sweep. Reduced GC pause times by utilizing additional processor cores during sweeping. - Parallel mark. Reduces GC pause times by utilizing additional processor cores during marking. - Configurable number of GC threads with `SCALANATIVE_GC_THREADS` environment variable. Set to number of available processors - 1 up to 8, but no less than 1. - Increasing heap size until mark is <=5% of total time. This can be adjusted with `SCALANATIVE_TIME_RATIO`. I.e. `export SCALANATIVE_TIME_RATIO=0.03` for <= 3%. - Added an option the change the minimum free block ratio `SCALANATIVE_FREE_RATIO`. If there are not enough free blocks after a garbage collection it will increase the heap size. - The minimum heap size setting renamed from `SCALANATIVE_MIN_HEAP_SIZE` to a shorter `SCALANATIVE_MIN_SIZE`. Updated Immix to match. - The maxium heap size setting renamed from `SCALANATIVE_MAX_HEAP_SIZE` to a shorter `SCALANATIVE_MAX_SIZE`. Updated Immix to match. ### Changes to GC Statistics - Stat collection disabled by default to reduce code size. They can be enabled by compiler arguments. See example and table below. - Stats changed to event-based CSV format. - Stats now also saves events for collection start and end. - Stats includes `start_ns` column - time in nanoseconds since application was started. - Stats is compatible with the new concurrent sweep events. Multiple verbosity levels of enabled for stats with compiler arguments. For example: ```scala nativeCompileOptions += "-DENABLE_GC_STATS_BATCHES" ``` > scala-native-benchmarks flags as per suggested changes in scala-native/scala-native-benchmarks#3 > results size for default tests when doing a single run `--runs 1` instead of the default which is 20. Internals: - thread-safe `BlockList`s - thread-safe `BlockRange`s - thread-safe block counts - thread-safe `GreyList`s - new block flags in `BlockMeta` - removed marking `Stack`s Debugging : - asserts in Immix can now be enabled by setting `DEBUG_ASSERT` flag ```scala nativeCompileOptions += "-DDEBUG_ASSERT" ``` This similar to the way you could enable trace level printing and debug symbols. ```scala // trace level printing in Immix nativeCompileOptions += "-DDEBUG_PRINT" // enable debug symbols for C code nativeCompileOptions += "-g" ``` - More integrity check asserts for sweeping. ## Refactoring: - Moved `Block_Sweep` to `Allocator_Sweep` in order to match `LargeAllocator_Sweep`. - Moved `Heap_AllocSmall` and `HeapAllocLarge` to their respective allocators - Renamed `block_superblock_middle` to ` block_superblock_tail` in order to avoid confusion. This block flag is used for both middle and last blocks
Features: - New `SCALANATIVE_GC` option `commix` to enable the new GC changes. - Concurrent, parallel sweep. Reduced GC pause times by utilizing additional processor cores during sweeping. - Parallel mark. Reduces GC pause times by utilizing additional processor cores during marking. - Configurable number of GC threads with `SCALANATIVE_GC_THREADS` environment variable. Set to number of available processors - 1 up to 8, but no less than 1. - Increasing heap size until mark is <=5% of total time. This can be adjusted with `SCALANATIVE_TIME_RATIO`. I.e. `export SCALANATIVE_TIME_RATIO=0.03` for <= 3%. - Added an option the change the minimum free block ratio `SCALANATIVE_FREE_RATIO`. If there are not enough free blocks after a garbage collection it will increase the heap size. - The minimum heap size setting renamed from `SCALANATIVE_MIN_HEAP_SIZE` to a shorter `SCALANATIVE_MIN_SIZE`. Updated Immix to match. - The maxium heap size setting renamed from `SCALANATIVE_MAX_HEAP_SIZE` to a shorter `SCALANATIVE_MAX_SIZE`. Updated Immix to match. ### Changes to GC Statistics - Stat collection disabled by default to reduce code size. They can be enabled by compiler arguments. See example and table below. - Stats changed to event-based CSV format. - Stats now also saves events for collection start and end. - Stats includes `start_ns` column - time in nanoseconds since application was started. - Stats is compatible with the new concurrent sweep events. Multiple verbosity levels of enabled for stats with compiler arguments. For example: ```scala nativeCompileOptions += "-DENABLE_GC_STATS_BATCHES" ``` > scala-native-benchmarks flags as per suggested changes in scala-native/scala-native-benchmarks#3 > results size for default tests when doing a single run `--runs 1` instead of the default which is 20. Internals: - thread-safe `BlockList`s - thread-safe `BlockRange`s - thread-safe block counts - thread-safe `GreyList`s - new block flags in `BlockMeta` - removed marking `Stack`s Debugging : - asserts in Immix can now be enabled by setting `DEBUG_ASSERT` flag ```scala nativeCompileOptions += "-DDEBUG_ASSERT" ``` This similar to the way you could enable trace level printing and debug symbols. ```scala // trace level printing in Immix nativeCompileOptions += "-DDEBUG_PRINT" // enable debug symbols for C code nativeCompileOptions += "-g" ``` - More integrity check asserts for sweeping. ## Refactoring: - Moved `Block_Sweep` to `Allocator_Sweep` in order to match `LargeAllocator_Sweep`. - Moved `Heap_AllocSmall` and `HeapAllocLarge` to their respective allocators - Renamed `block_superblock_middle` to ` block_superblock_tail` in order to avoid confusion. This block flag is used for both middle and last blocks
run.pyandsummary.py. This makes testing the performance of new features easier (see Readme.md).See example report:
https://github.com/valdisxp1/scala-native-benchmark-results/blob/gh-pages/reports/summary_20180923_222231_scala-native-0.3.8_vs_scala-native-0.3.9-SNAPSHOT/Readme.md