OCaml Multicore - March 2022
Welcome to the March 2022 Multicore OCaml monthly report! This update along with the previous updates have been compiled by me, @ctk21, @kayceesrk and @shakthimaan.
We have continued steadily towards making a stable OCaml 5.0 release, as you can see from the long list of fixes later -- thank you for all your contributions! Platform configurations that were formerly supported in the 4.x branches for OpenBSD, FreeBSD, and NetBSD have now been re-enabled. ARM64 support (for macOS, Linux and the BSDs) is stable in trunk, and ARM CFI integration has been merged as a follow-up to facilitate debugging and profiling. Notably, this also includes memory model tests for ARMv8 and Power ports. The Windows mingw64 port is also working again in trunk.
An effects tutorial has also been contributed to the OCaml manual; feedback continues to be welcome even after it's merged in. As you experiment with effects, please do continue to post to this forum with questions or comments about your learnings.
The Sandmark benchmark project has added bytecode analysis to address any performance regressions. We have also been working on obtaining measurements for the compilation data points. The current-bench pipeline production deployments has significant UI changes, and now has alert notifications for the benchmark runs.
As always, the Multicore OCaml open and completed tasks are listed first, which are then followed by the ecosystem tooling projects. The Sandmark, sandmark-nightly, and current-bench project updates are finally presented for your reference.
Multicore OCaml
Open
Discussion
-
ocaml/ocaml#10960 Audit
stdlibfor mutable stateThe mutable state for the Stdlib modules is actively being tracked in this issue, since the OCaml 5.0.0 implementation should be both memory and thread-safe.
-
ocaml/ocaml#11013 Meta-issue for OCaml 5.0 release goals
An issue tracker that contains a checklist for branching OCaml 5.0.
-
ocaml/ocaml#11074 OCaml 5.0 & unhandled exceptions
A question and discussion on how unhandled exceptions should be handled in OCaml 5.0.
Bug
-
ocaml/ocaml#10868 Fix off-by-1 bug when initializing frame hashtables
The PR for
runtime/frame_descriptors.cthat fixes on off-by-1 bug when initializing frame hashtables is ready to be merged. -
ocaml/ocaml#11040
ThreadSanitizerissuesAn issue tracker that contains list of
ThreadSanitizerruns fromtests/parallelexecution for troubleshooting race conditions. -
ocaml/ocaml#11144 Restore frame-pointers support for amd64
A work-in-progress to re-introduce the lost frame-pointers support for AMD64 architecture, since the same was partially lost with the Multicore merge.
Build
-
ocaml/ocaml#10315 [Build] Support for composing the compiler in a dune build
A request to use the Dune build system to build the OCaml compiler. This will be useful for Multicore OCaml ecosystem development as well.
-
ocaml/ocaml#10505 [RFC] Require 1003.1-2008 for libunix
A draft PR that updates the build to be compliant with The Open Group Base Specification Issue 6 and 7, IEEE Std 1003.1-2008.
-
ocaml/ocaml#11096 Enable native code on FreeBSD/aarch64
The
configure.achas been updated to build natively on FreeBSD/aarch64. -
ocaml/ocaml#11097 Fix support for NetBSD and enable native code on NetBSD/aarch64
The support for native builds on NetBSD/aarch64 has been enabled.
-
ocaml/ocaml#11143 Test 32-bit build in GitHub Actions
An
i386entry in.github/workflows/build.ymlhas been added to test 32-bit builds with GitHub Actions. -
ocaml/ocaml#11149 Make the bootstrap process repeatable
The PR enables the
make bootstrapstep to produce the exact same images inboot/ocamlcandboot/ocamllex, irrespective of the OS and architecture.
Enhancement
-
ocaml/ocaml#11057 Implement quality treatment for asynchronous actions in multicore
A work-in-progress that reimplements the
caml_process_pendingbehaviour, and provides code improvements to the asynchronous actions in the Multicore runtime. -
ocaml/ocaml#11095 Implement quality treatment for asynchronous actions in multicore (1/N)
A first set of commits as a follow-up to the Implement quality treatment for asynchronous actions in Multicore" PR.
-
ocaml/ocaml#11110 More ThreadSanitizer atomics and ignorelist
An ignorelist has been added to ThreadSanitizer for
FieldandTag_valrace conditions. ACAMLno_tsan, with a justification for no race condition for specific functions, has been added along with relaxed atomics. -
ocaml/ocaml#11137 Introduce
Store_tag_val(dst, val)and use it in the runtimeThe runtime code does not depend on
Tag_valas an lvalue, and henceStore_tag_val(dst,val)is introduced inruntime/alloc.c. -
ocaml/ocaml#11138 Add C function
caml_thread_has_lockAny C thread can now call the function
caml_thread_has_lock, and it returns true if the thread belongs to a domain and also holds the lock for the same. -
ocaml/ocaml#11142
Gc.setnow changes the minor heap size of all domainsA draft PR to adjust the semantics of
Gc.setto set the minor heap size for all domains. -
ocaml/ocaml#11154 Add
Domain.get_nameA feature request to include
get_namein theDomainmodule, since the API already contains aset_name. -
ocaml/ocaml#11156 Post-5.00 API for changing minor heap size
The proposed suggestions for changing the minor heap size of all domains post-5.00 API.
Documentation
-
ocaml/ocaml#10992 OCaml multicore memory model and C (runtime, FFI, VM)
The document on the OCaml Multicore memory model and the use of the
Fieldmacro is actively being revised and updated. -
ocaml/ocaml#11058
runtime/HACKING.adoc: tips on debugging the runtimeThe
HACKING.adocdocument with information on the runtime system, and theruntime/HACKING.adocfile that explains troubleshooting is ready to be merged. -
ocaml/ocaml#11093 Effects manual
The PR adds an effect handlers tutorial to the manual. The rendered web page is at https://kcsrk.info/webman/manual/effects.html.
Testing
-
ocaml/ocaml#10980 GitHub Actions / ocamltest / testsuite / OCaml 5
An issue tracker that contains a list of action items related to ocamltest and OCaml 5.
-
ocaml/ocaml#11065 Restore basic functionality to the bytecode debugger
The PR to handle stack backtraces is working now, and a separate PR will be created to handle the
nextinstruction. -
ocaml/ocaml#11121
weaklifetime_par.mlgets killed by OS's OOM-reaper on Raspberry Pi 4A testsuite failure report on ARM64-backend on a Raspberry Pi 4 with 2GB of memory.
Performance
-
ocaml/ocaml#10964 Ring-buffer based runtime tracing (
eventring)The Eventring runtime tracing system designed for continuous monitoring of OCaml applications is actively being reviewed.
-
ocaml/ocaml#11090 Program name usability issue
A usability regression issue with Multicore runtime where
topreports OCaml programs asDomain0. -
ocaml/ocaml#11125 Runtime events for minor heap reservation / allocation
The runtime events that log the allocated sizes and critical sections should be emitted for the minor heap reservation and allocation functions.
Closed
Enhancement
-
ocaml/ocaml#10802 Use 4.12 value macros in C code
The for loop style is used for list-walking, and
Val_int(0)now means an integer of value 0. -
ocaml/ocaml#10958 Only rebuild
flexlink.exewhen sources changeThe Makefile has been updated to only build
flexdll/flexlink.exewhen the sources have been modified. -
ocaml/ocaml#10971 Means of limiting how much memory is being reserved by the runtime, so that Valgrind and AFL can be used
The
max_domainsvalue can now be set fromOCAMLRUNPARAMto limit the memory usage, and to provide a good balance between usability and complexity in the implementation. -
ocaml/ocaml#10991 Use
zstdfor CI artifacts upload and downloadThe upload and download time of CI artifacts are improved with the use of
zstdcompression. -
ocaml/ocaml#11078 Relax
caml_initializeassertion in the debug runtimeThe assertion checks in
caml_initializeare relaxed to not impede the debug runtime throughput. -
ocaml/ocaml#11082 Reserve only
caml_minor_heap_max_wsz*Max_domainsfor the minor heapThe initial minor heap size reservation is
s * Max_domains, and domains can useGc.setto increase their minor heap size beyond the reservation. The size of the reservation is alwayscaml_minor_heap_max_wsz*Max_domains. -
ocaml/ocaml#11123 Gc stats: major collections count
The use of
Caml_state->stat_major_collectionsis removed andcaml_major_cycles_completedglobal value is used to report statistics, as mentioned in the documentation. -
ocaml/ocaml#11158 Factor out reading
OCAMLTOP_INCLUDE_PATHinocaml/ocamlnatThe identical code in
ocamlandocamlnatfor parsingOCAMLTOP_INCLUDE_PATHhas been refactored.
Fixes
-
ocaml/ocaml#11037 Assorted fixes found while restarting the Jenkins CI
The PR includes a number of fixes such as update to the Jenkins CI "main" script to better handle bytecode-only builds, updates to the test suite, configuration tweaks and changes to the runtime system.
-
ocaml/ocaml#11054 Respect user provided maximum stack space value, and fix debug run of
tmp/stack_space.mltestThis PR honors
OCAMLRUNPARAM=1for the initial stack size, and ensures thattmc/stack_space.mlapplies stack restriction during the running stage. -
ocaml/ocaml#11061
dumpobjtool crashesA fix for the segmentation fault from
tools/dumpobjon a bytecode program has been merged in PR#11077. -
ocaml/ocaml#11076 Adjust stack parameters for bytecode to avoid generating too many calls to
caml_ensure_stack_capacityThe stack "safety margin" has been decreased to 6 and the stack threshold has been increased to 32. Most bytecode functions use no more than 32 - 6 stack slots, and this provides a quick fix for the byte code regressions.
-
ocaml/ocaml#11077 Fix
dumpobjcrash due to naked pointer comparisonThe use of
(==)instead of(=)indumpobjfixes the crash in the generic comparison function that supported naked pointers. -
ocaml/ocaml#11094 Domainslib producing segfaults
A patch for the segmentation fault in fiber management fixes the segmentation fault caused when using domainslib on parallel programs with Sandmark.
-
ocaml/ocaml#11105 Fix segfault in fiber management (issue #11094)
An integer index into an array of lists is now maintained, instead of a pointer to the cache in fiber management. This fixes the segmentation fault reported when building parallel benchmarks with domainslib in Sandmark.
-
ocaml/ocaml#11141 Fix 32-bit build
The
runtime/gc_ctrl.chas been updated to useARCH_INTNAT_PRINTF_FORMATto build for 32-bit.
Testing
-
ocaml/ocaml#10953
ocamltest/summarize.awknot properly reporting abort failures on testsuite runsThe PR#11088 and PR#11100 have been merged to handle the failing test runs with
summarize.awk. -
ocaml/ocaml#11084 Disable
test_cow_repeatedin thelib-dynlink-privatetestcase when running with the debug runtimeThe
testsuite/tests/lib-dynlink-private/test.mlhas been updated to disabletest_cow_repeatedwith the debug runtime. -
ocaml/ocaml#11004 Memory model tests
A new sub-directory in
testsuitecontaining the memory model tests has been merged. These are useful for the ARMv8 and Power ports. -
ocaml/ocaml#11088
summarize.awk: should fail when ocamltest result is not understoodThe handling of unexpected results from an ocamltest run in
summarize.awkhave been fixed. -
ocaml/ocaml#11099 ARM64 CFI support
The unwind on ARM64 for the CFI commands now work, and
tests/unwindpass on both MacOS x86_64 and ARM64. -
ocaml/ocaml#11124 Fix
weaklifetime_par.mlA series of fixes to fix the
weaklifetime_par.mlimplementation that causes test suite failures or Raspberry Pi 4.
Windows
-
ocaml/ocaml#10884 Fix closure marshalling from Dynlink-loaded code on Windows
The registration of empty code fragments in natdynlink has been stopped, and
caml_skiplist_insertupdates the data pointer if the key is a duplicate. -
ocaml/ocaml#10908 Fix possible race in
caml_mem_mapon WindowsA race condition when trimming the memory block has been fixed, and printf debugging from the concurrent minor collector in
platform.chas been cleaned up. -
ocaml/ocaml#11115 Fix performance regression in systhreads on Windows
The tick thread calls
caml_thread_yieldon the Windows version ofselectwhich was causing performance regressions. TheSleepfunction is used instead and the performance differences are noticeable as shown below:Test before/s run1/s run2/s lib-threads/sieve 5.36 3.18 2.47 parallel/fib_threads 137.52 62.29 63.95 parallel/multicore_systhreads 20.2 11.88 11.08 -
ocaml/ocaml#11116 Fix
tool-dumpobjtest on WindowsThe mingw-64 runs on Inria's CI are fixed with the update to
tool-dumpobj/test.run.
Documentation
-
ocaml/ocaml#11008 Document and refactor the gc-stats code
The
runtime/caml/gc_stats.handruntime/gc_stat.ccode have been refactored and documented. -
ocaml/ocaml#11072 domain.c: document the STW synchronization code
The STW synchronization code has been documented in
domain.c. -
ocaml/ocaml#11073 Code comprehension: why don't STW sections keep
all_domains_lockthe whole time?The STW synchronization code has been documented in
domain.cin PR#11072. -
ocaml/ocaml#11120 Man entries for warnings 69, 70, 71 and 72 are missing
The manual entries are listed in the output of
man ocamlc, and the warnings for 69, 70, 71 and 72 have been added. -
ocaml/ocaml#11122 Fix typo in Stdlib documentation comment
A typo in
stdlib/stdlib.mlihas been fixed.
Sundries
-
ocaml/ocaml#11092 Enable native code on
aarch64-*-openbsd*OCaml builds fine on
OpenBSD/aarch64. -
ocaml/ocaml#11112 Harden
-use-runtimeagainst spaces in pathsThe PR ensures that spaces in the paths specified with
-use-runtimework as expected. -
ocaml/ocaml#11047 GC stats: properly orphan allocation stats
An orphaning process for allocation statistics has been implemented in this PR, where the "orphan stats" are stored in a global
structure alloc_statsvariable ingc_stats.c. On domain termination, the stats of the current domain are added to the "orphan stats". -
ocaml/ocaml#10925 Rename symbol for
Caml_statetocaml_stateThe
Caml_statemacro has been renamed tocaml_stateto avoid a name collision. -
ocaml/ocaml#10989 Download GNU parallel directly from git
The
tools/ci/appveyor/appveyor_build.shhas been updated to download GNU parallel with Git.
Ecosystem
Eio
Open
-
ocaml-multicore/eio#206 API request:
readdirA new API request to list the contents of the directory, since
Eio.Dir.talready exists. -
ocaml-multicore/eio#207 Add readdir feature
A draft PR that provides an implementation of
readdirfeature for Eio, and also to discuss its API. -
ocaml-multicore/eio#208 Update the README to use OCaml 5.0
A suggestion to update the README to use OCaml 5.0.
Completed
-
ocaml-multicore/eio#205 Prepare release
The sources have been upgraded to depend on
uring.0.3, and theCHANGES.mdhas been updated for a release.
domainslib
Open
-
ocaml-multicore/domainslib#68 Scope of domainslib
A feature request to have
mpsc queues,concurrent hashmapand more concurrency building blocks in domainslib. -
ocaml-multicore/domainslib#69 Make
Chan.tandTask.promiseinjectiveThe injectivity annotations with type constructors can be usable as indexes of GADTs, in particular
Effect.t.
Completed
-
ocaml-multicore/domainslib#65 Fix build on trunk
The
Effect.eff -> Effect.tchange has been updated to build for trunk, and the CI builds for5.0.0+trunk. -
ocaml-multicore/domainslib#66
Domainslib.0.4.1build failure withOCaml 5.0.0+trunkA newer release of
domainslib.0.4.2has been updated to build with OCaml 5.0.0+trunk. -
ocaml-multicore/domainslib#67 Fix
Task.parallel_for_reduceon empty loopA corner-case for an empty loop is now correctly handled for
Task.parallel_for_reduceinlib/task.ml.
Sundries
Open
-
ocaml-multicore/effects-examples#27 Add GitHub workflow for testing
A
.github/workflows/ci.ymlhas been added for CI testing. -
ocaml-multicore/ocaml-uring#55 FD passing
sendmsgfails on WSL2An
EINVALis returned on the latest WSL kernel when the FD passingsendmsgexamples fail.
Closed
-
ocaml-multicore/kcas#12 Clean up dependencies
The dependencies have been removed from
kcas.opam, except for dune. The Makefile has been updated, and the old ocamlbuild .mllib-file has been removed. -
ocaml-multicore/retro-httpaf-bench#19 cohttp-eio: add cohttp-eio based benchmark
A
cohttp_eiobenchmark has been added with updates to the benchmarking scripts. -
ocaml-multicore/retro-httpaf-bench#23 Update to Eio 0.2
The
retro-httpaf-benchDockerfile has been updated to use Eio 0.2. -
ocaml-multicore/effects-examples#26 Port to OCaml 5.00
The
effects-exampleshave now been ported to run on OCaml 5.0.0+trunk, without the dedicated effects syntax.
Benchmarking
Sandmark
Open
Benchmarks
-
ocaml-bench/sandmark#119 Additional benchmarks - hamming and soli
A draft version of the
hamming.mlandsoli.mlbenchmarks have been added to Sandmark. -
ocaml-bench/sandmark#299 Irmin 3 benchmarks
A request to update the Sandmark Irmin benchmark which replays the access patterns for Tezos.
-
ocaml-bench/sandmark#319 Added two serial benchmarks namely: hamming and soli with their respectively
The PR adds the Hamming and Soli sequential benchmarks to Sandmark.
CI
-
ocaml-bench/sandmark#275 Move from drone CI to GitHub actions
The CI jobs from .drone.yml need to be migrated to run with GitHub Actions workflow.
-
ocaml-bench/sandmark#316 main.yml
A new
.github/workflows/main.ymlGitHub Actions file has been added to run in the CI.
Dependencies
-
ocaml-bench/sandmark#18
js_of_ocamlfails to run on multicoreA draft PR to build
js_of_ocamlin Sandmark for Multicore OCaml has been created. -
ocaml-bench/sandmark#262 ocaml-migrate-parsetree.2.2.0+stock fails to compile with ocaml.5.00.0+trunk
ocaml-migrate-parsetreeis no longer required for trunk with ppxlib.0.25.0~5.00preview. -
ocaml-bench/sandmark#310 Remove
js_of_ocamlA work-in-progress to build
js_of_caml-compilerwith5.0.0+trunk, asframa-cis not compatible with ocaml/ocaml.
Sundries
-
ocaml-bench/sandmark#272 Delay benchmark runs if the machine is active
A load average check for threshold 0.6 needs to be verified before running the benchmarks.
-
ocaml-bench/sandmark#302 Renaming suggestions for
*run_config.jsonfilesThe current
*run_config.jsonfiles need to be renamed as follows:run_config.json->sequential.jsonmulticore_parallel_run_config.json->parallel_turing.jsonmulticore_parallel_navajo_run_config.json->parallel_navajo.jsonmicro_multicore.json->micro.json
-
ocaml-bench/sandmark#309 Outreachy Applicants: set-up and how-to
Sandmark is participating in the Outreachy program, and the necessary setup and how-to instructions to get started on the project have been provided.
-
ocaml-bench/sandmark#315 Rename Json Files
A PR to rename the current
*run_config.jsonfiles to be more meaningful for their intended purpose. -
ocaml-bench/sandmark#317 Add checks for
loadavgAn ongoing PR to add a
loadavgcheck to ensure that the server is not busy before actually running the benchmarks.
Closed
Bytecode
-
ocaml-bench/sandmark#282 Analyse Bytecode Performance
The
run_config_byte.jsonfile now allows you to run byte code version of the Sandmark benchmarks. -
ocaml-bench/sandmark#298 Support to build and run benchmarks in byte mode
A
run_config_byte.jsonfile has been added to build and run the benchmarks in byte mode. You can test the same using:$ USE_SYS_DUNE_HACK=1 SANDMARK_CUSTOM_NAME=5.00.0 BUILD_BENCH_TARGET=bytebench \ RUN_CONFIG_JSON=run_config_byte.json make ocaml-versions/5.00.0+trunk.bench
Notebooks
-
ocaml-bench/sandmark#279 Update notebooks/ To 5.00.0+trunk
The Jupyter notebooks in the notebooks/ folder have been updated to use 5.0.0+trunk.
-
ocaml-bench/sandmark#301 Port sandmark nightly UI to sandmark notebooks
The Sandmark-nightly UI changes have been ported to the Sandmark notebooks/ and work with
5.0.0+trunkOCaml variant. -
ocaml-bench/sandmark#305 re-enable disabled benchmarks
The filter check that disabled
alt-ergo,frama-candjs_of_ocamlbenchmarks have been enabled in the Jupyter notebooks.
Enhancement
-
ocaml-bench/sandmark#274 Custom Variant Support
The feature request to specify developer branches, configure options, runtime parameters, a name for the OCaml variant, dependency package overrides, package removal list, and an expiry date until which the Sandmark nightly runs should occur has been merged to Sandmark.
-
ocaml-bench/sandmark#286 Update
check_urland validate URL in custom.json filesThe
check_urltarget in the Makefile checks if a URL is present for each and every entry in thecustom.jsonfile, and also if the URL contains a downloadable file. -
ocaml-bench/sandmark#297 Added dynamic package override and removal for Custom Support Variant
The ability to override and remove dependency packages dynamically is now supported with the Custom Support Variant feature.
-
ocaml-bench/sandmark#306 Update
check_urland addedcheck_jqA
check_jqfunctionality has been added in the Makefile to verify that the config.json files can be parsed by jq. Thecheck_urlnow verifies that the provided URL is downloadable with wget. -
ocaml-bench/sandmark#307 Use pristine sandmark clone for each build
A fresh clone of Sandmark is used now before each and every sandmark-nightly run, instead of relying on
make clean.
Sundries
-
ocaml-bench/sandmark#300 Use 5.0.0+trunk name and version
Sandmark OCaml variants have been updated to use the
5.0.0+trunkname and version number. -
ocaml-bench/sandmark#304 Parallel benchmarks get killed with
SEGVwithtrunkanddomainslib.0.4.2The PR#11105 fix in the fiber management resolves the segmentation fault caused in parallel benchmarks with trunk and
domainslib.0.4.2. -
ocaml-bench/sandmark#308 Move nightly scripts to Sandmark
The nightly cron run scripts from
sandmark-nightlyhave been moved tosandmark. -
ocaml-bench/sandmark#312 Removed failure:ignore
The
failure:ignoreoption has been removed from.drone.ymlCI as5.0.0+trunkbuilds are stable now.
Sandmark-nightly
Closed
-
ocaml-bench/sandmark-nightly#5 Status of disabled benchmarks
The Jupyter notebooks in Sandmark have been ported with the changes from sandmark-nightly, and the benchmarks have been enabled.
-
ocaml-bench/sandmark-nightly#41 Show Sandmark branch and version in the UI
The UI now shows the Sandmark branch and version number in building and running the benchmarks.
-
ocaml-bench/sandmark-nightly#48 Numbered list is misaligned in the home page
The list indentation has been fixed in the home page.
-
ocaml-bench/sandmark-nightly#49 Add Sandmark info to sandmark-nightly
The commit version and branch of Sandmark used in the sandmark-nightly runs are displayed in the UI.
-
ocaml-bench/sandmark-nightly#52 Resize UI to show the full OCaml variant name
The OCaml variant name width has been enlarged to show the full name in the UI.
-
ocaml-bench/sandmark-nightly#53 Show benchmarks in a table to read the tooltip
The selected benchmarks are displayed as a table and tooltip support has been added.

-
ocaml-bench/sandmark-nightly#54 Hide instrumented runtime pages
The instrumented runtime is currently not used, and hence the respective pages are hidden from the user.
current-bench
Open
-
ocurrent/current-bench#306 WIP ocaml compiler benchmarks
A work-in-progress, high-level issue tracker for building
ocaml/ocamlcompiler benchmarks, and necessary tooling with the current-bench project. -
ocurrent/current-bench#318 Cobench user library
A request for a library to ease the process of creating and using benchmarks with the current-bench project.
-
ocurrent/current-bench#329 Use a standard record instead of a
Js.objectfor metric data inBenchmarkData.resA refactoring task for the metric data to use a standard record instead of a
Js.object. -
ocurrent/current-bench#330 Looking at the past
A list of UI changes to better view the past benchmark results for the dune team.
-
ocurrent/current-bench#332 Consider using time as the x-axis
A wishlist entry to visualize the graphs with time on the x-axis.
-
ocurrent/current-bench#333 Docker build arguments
The use of
--build-argsfor Docker in the OCluster pipeline is required for custom Dockerfile runs with Sandmark nightly. -
ocurrent/current-bench#344 Show the same sub-metric in the same color across different metric graphs
A UI enhancement to show the same colour for a sub-metric across all the graphs.
Closed
Fixes
-
ocurrent/current-bench#326 Frontend: Fix bug with using same x-axis for all metrics
The respective meta-data for all the commits, and for every metric in the x-axis is now correctly displayed in the UI.
-
ocurrent/current-bench#334 Fix CI
A minor fix in
pipeline/libl/current_bench_json.mlto correctly match and resolve the benchmark name. -
ocurrent/current-bench#337 Fix missing value frontend crash
A couple of fixes for
Js.Obj.assignand the front-end when an overlaid metric is added to a branch. -
ocurrent/current-bench#340 Missing metric indicator fixes
The
BenchmarkTest.resandLineGraph.reshave been fixed to handle missing metric indicator. -
ocurrent/current-bench#341 frontend: Fix broken line numbers when filling in missing commits
A fix in
frontend/src/AppHelpers.resto handle broken line numbers when filling missing commits. -
ocurrent/current-bench#343 Fix colors changing on hiding some lines and change color palette
An aesthetic UI change on the color palette, and fix for color changes when hiding lines.
-
ocurrent/current-bench#345 Correctly handle carriage returns when counting line numbers
A proper way to handle
\r,\r\n, and\nin the browser when showing the line numbers in the UI.
Frontend
-
ocurrent/current-bench#323 Allow clicking on the legend to show/hide plot lines and use more columns
The legend now uses more columns when clicking on the show/hide plot in the UI.
-
ocurrent/current-bench#324 Disabled worker / docker image
The frontend automatically selects the first "environment" (worker + Docker image) and the system may contain disabled ones. The environment list now filters and shows only the active entries.
-
ocurrent/current-bench#331 Show only workers with valid runs in workers dropdown
The workers for a specific
repo_idandpull_numberalone are now shown in the dropdown menu. -
ocurrent/current-bench#339 frontend: Filter out values less than 0.5% of maximum
The values less than 0.5% of the maximum are now filtered out so that
Array.getExndoes not crash the frontend. -
ocurrent/current-bench#342 Frontend: hide table comparison rows
NA/NAThe
NA/NAis used in the frontend when there are no branch forks to compare in the graphs.
Sundries
-
ocurrent/current-bench#327 Slack
The debug logs from benchmark runs can now be sent to Slack for alert notification.

-
ocurrent/current-bench#328 Add a Cobench client library for pushing results with the HTTP API
The Irmin benchmark monthly results need to be uploaded to current-bench, and hence a Cobench client library has been created to be used with the HTTP API.
-
ocurrent/current-bench#336 Docker build arguments
The
environment/*.conffile now supports an optionalbuild_argssetting that can be used to pass environment variables tomake bench. This is useful for sandmark-nightly as well for cron-like scheduling of fast and slow benchmarks.{ "repositories": [ { "name": "local/local", "worker": "autumn", "build_args": ["FOO=42"] }, -
ocurrent/current-bench#338 Use latest OCurrent for logs line number links
The
ocurrent-bench.opamandpipeline/pipeline.opamfiles have been updated to use the latest OCurrent version.
We would like to thank all the OCaml users, developers and contributors in the community for their continued support to the project.
Acronyms
- AFL: American Fuzzy Lop
- AMD: Advanced Micro Devices
- API: Application Programming Interface
- ARM: Advanced RISC Machines
- AWK: Aho Weinberger Kernighan
- BSD: Berkeley Software Distribution
- CFI: Call Frame Information
- CI: Continuous Integration
- FD: File Descriptor
- FFI: Foreign Function Interface
- GADT: Generalized Algebraic Data Type
- GC: Garbage Collector
- GNU: GNU's Not Unix
- HTTP: Hypertext Transfer Protocol
- IEEE: Institute of Electrical and Electronics Engineers
- JSON: JavaScript Object Notation
- MD: Markdown
- OOM: Out Of Memory
- OPAM: OCaml Package Manager
- OS: Operating System
- PR: Pull Request
- RFC: Request For Comments
- STW: Stop The World
- UI: User Interface
- URL: Uniform Resource Locator
- VM: Virtual Machine
- WSL: Windows Subsystem for Linux