Multicore OCaml: 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
Auditstdlib
for 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 goalsAn issue tracker that contains a checklist for branching OCaml 5.0.
-
ocaml/ocaml#11074
OCaml 5.0 & unhandled exceptionsA 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 hashtablesThe PR for
runtime/frame_descriptors.c
that fixes on off-by-1 bug
when initializing frame hashtables is ready to be merged. -
ocaml/ocaml#11040
ThreadSanitizer
issuesAn issue tracker that contains list of
ThreadSanitizer
runs from
tests/parallel
execution for troubleshooting race conditions. -
ocaml/ocaml#11144
Restore frame-pointers support for amd64A 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 buildA 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 libunixA 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/aarch64The
configure.ac
has been updated to build natively on
FreeBSD/aarch64. -
ocaml/ocaml#11097
Fix support for NetBSD and enable native code on NetBSD/aarch64The support for native builds on NetBSD/aarch64 has been enabled.
-
ocaml/ocaml#11143
Test 32-bit build in GitHub ActionsAn
i386
entry in.github/workflows/build.yml
has been added to
test 32-bit builds with GitHub Actions. -
ocaml/ocaml#11149
Make the bootstrap process repeatableThe PR enables the
make bootstrap
step to produce the exact same
images inboot/ocamlc
andboot/ocamllex
, irrespective of the OS
and architecture.
Enhancement
-
ocaml/ocaml#11057
Implement quality treatment for asynchronous actions in multicoreA work-in-progress that reimplements the
caml_process_pending
behaviour, 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 ignorelistAn ignorelist has been added to ThreadSanitizer for
Field
and
Tag_val
race conditions. ACAMLno_tsan
, with a justification for
no race condition for specific functions, has been added along with
relaxed atomics. -
ocaml/ocaml#11137
IntroduceStore_tag_val(dst, val)
and use it in the runtimeThe runtime code does not depend on
Tag_val
as an lvalue, and
henceStore_tag_val(dst,val)
is introduced inruntime/alloc.c
. -
ocaml/ocaml#11138
Add C functioncaml_thread_has_lock
Any 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.set
now changes the minor heap size of all domainsA draft PR to adjust the semantics of
Gc.set
to set the minor
heap size for all domains. -
ocaml/ocaml#11154
AddDomain.get_name
A feature request to include
get_name
in theDomain
module,
since the API already contains aset_name
. -
ocaml/ocaml#11156
Post-5.00 API for changing minor heap sizeThe 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
Field
macro is actively being revised and updated. -
ocaml/ocaml#11058
runtime/HACKING.adoc
: tips on debugging the runtimeThe
HACKING.adoc
document with information on the runtime system,
and theruntime/HACKING.adoc
file that explains troubleshooting is
ready to be merged. -
ocaml/ocaml#11093
Effects manualThe PR adds an effect handlers tutorial to the manual. The rendered
web page is at OCaml - Language extensions.
Testing
-
ocaml/ocaml#10980
GitHub Actions / ocamltest / testsuite / OCaml 5An issue tracker that contains a list of action items related to
ocamltest and OCaml 5. -
ocaml/ocaml#11065
Restore basic functionality to the bytecode debuggerThe PR to handle stack backtraces is working now, and a separate PR
will be created to handle thenext
instruction. -
ocaml/ocaml#11121
weaklifetime_par.ml
gets 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 issueA usability regression issue with Multicore runtime where
top
reports OCaml programs asDomain0
. -
ocaml/ocaml#11125
Runtime events for minor heap reservation / allocationThe 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 codeThe for loop style is used for list-walking, and
Val_int(0)
now
means an integer of value 0. -
ocaml/ocaml#10958
Only rebuildflexlink.exe
when sources changeThe Makefile has been updated to only build
flexdll/flexlink.exe
when 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 usedThe
max_domains
value can now be set fromOCAMLRUNPARAM
to limit
the memory usage, and to provide a good balance between usability
and complexity in the implementation. -
ocaml/ocaml#10991
Usezstd
for CI artifacts upload and downloadThe upload and download time of CI artifacts are improved with the
use ofzstd
compression. -
ocaml/ocaml#11078
Relaxcaml_initialize
assertion in the debug runtimeThe assertion checks in
caml_initialize
are relaxed to not impede
the debug runtime throughput. -
ocaml/ocaml#11082
Reserve onlycaml_minor_heap_max_wsz
*Max_domains
for the minor heapThe initial minor heap size reservation is
s * Max_domains
, and
domains can useGc.set
to increase their minor heap size beyond
the reservation. The size of the reservation is always
caml_minor_heap_max_wsz
*Max_domains
. -
ocaml/ocaml#11123
Gc stats: major collections countThe use of
Caml_state->stat_major_collections
is removed and
caml_major_cycles_completed
global value is used to report
statistics, as mentioned in the documentation. -
ocaml/ocaml#11158
Factor out readingOCAMLTOP_INCLUDE_PATH
inocaml/ocamlnat
The identical code in
ocaml
andocamlnat
for parsing
OCAMLTOP_INCLUDE_PATH
has been refactored.
Fixes
-
ocaml/ocaml#11037
Assorted fixes found while restarting the Jenkins CIThe 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 oftmp/stack_space.ml
testThis PR honors
OCAMLRUNPARAM=1
for the initial stack size, and
ensures thattmc/stack_space.ml
applies stack restriction during
the running stage. -
ocaml/ocaml#11061
dumpobj
tool crashesA fix for the segmentation fault from
tools/dumpobj
on a bytecode
program has been merged in
PR#11077. -
ocaml/ocaml#11076
Adjust stack parameters for bytecode to avoid generating too many calls tocaml_ensure_stack_capacity
The 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
Fixdumpobj
crash due to naked pointer comparisonThe use of
(==)
instead of(=)
indumpobj
fixes the crash in
the generic comparison function that supported naked pointers. -
ocaml/ocaml#11094
Domainslib producing segfaultsA 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 buildThe
runtime/gc_ctrl.c
has been updated to use
ARCH_INTNAT_PRINTF_FORMAT
to build for 32-bit.
Testing
-
ocaml/ocaml#10953
ocamltest/summarize.awk
not properly reporting abort failures on testsuite runsThe PR#11088 and
PR#11100 have been
merged to handle the failing test runs withsummarize.awk
. -
ocaml/ocaml#11084
Disabletest_cow_repeated
in thelib-dynlink-private
testcase when running with the debug runtimeThe
testsuite/tests/lib-dynlink-private/test.ml
has been updated
to disabletest_cow_repeated
with the debug runtime. -
ocaml/ocaml#11004
Memory model testsA new sub-directory in
testsuite
containing 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.awk
have been fixed. -
ocaml/ocaml#11099
ARM64 CFI supportThe unwind on ARM64 for the CFI commands now work, and
tests/unwind
pass on both MacOS x86_64 and ARM64. -
ocaml/ocaml#11124
Fixweaklifetime_par.ml
A series of fixes to fix the
weaklifetime_par.ml
implementation
that causes test suite failures or Raspberry Pi 4.
Windows
-
ocaml/ocaml#10884
Fix closure marshalling from Dynlink-loaded code on WindowsThe registration of empty code fragments in natdynlink has been
stopped, andcaml_skiplist_insert
updates the data pointer if the
key is a duplicate. -
ocaml/ocaml#10908
Fix possible race incaml_mem_map
on WindowsA race condition when trimming the memory block has been fixed, and
printf debugging from the concurrent minor collector inplatform.c
has been cleaned up. -
ocaml/ocaml#11115
Fix performance regression in systhreads on WindowsThe tick thread calls
caml_thread_yield
on the Windows version of
select
which was causing performance regressions. TheSleep
function 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
Fixtool-dumpobj
test 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 codeThe
runtime/caml/gc_stats.h
andruntime/gc_stat.c
code have been
refactored and documented. -
ocaml/ocaml#11072
domain.c: document the STW synchronization codeThe STW synchronization code has been documented in
domain.c
. -
ocaml/ocaml#11073
Code comprehension: why don’t STW sections keepall_domains_lock
the whole time?The STW synchronization code has been documented in
domain.c
in
PR#11072. -
ocaml/ocaml#11120
Man entries for warnings 69, 70, 71 and 72 are missingThe 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 commentA typo in
stdlib/stdlib.mli
has been fixed.
Sundries
-
ocaml/ocaml#11092
Enable native code onaarch64-*-openbsd*
OCaml builds fine on
OpenBSD/aarch64
. -
ocaml/ocaml#11112
Harden-use-runtime
against spaces in pathsThe PR ensures that spaces in the paths specified with
-use-runtime
work as expected. -
ocaml/ocaml#11047
GC stats: properly orphan allocation statsAn orphaning process for allocation statistics has been implemented
in this PR, where the “orphan stats” are stored in a global
structure alloc_stats
variable ingc_stats.c
. On domain
termination, the stats of the current domain are added to the
“orphan stats”. -
ocaml/ocaml#10925
Rename symbol forCaml_state
tocaml_state
The
Caml_state
macro has been renamed tocaml_state
to avoid a
name collision. -
ocaml/ocaml#10989
Download GNU parallel directly from gitThe
tools/ci/appveyor/appveyor_build.sh
has been updated to
download GNU parallel with Git.
Ecosystem
Eio
Open
-
ocaml-multicore/eio#206
API request:readdir
A new API request to list the contents of the directory, since
Eio.Dir.t
already exists. -
ocaml-multicore/eio#207
Add readdir featureA draft PR that provides an implementation of
readdir
feature for
Eio, and also to discuss its API. -
ocaml-multicore/eio#208
Update the README to use OCaml 5.0A suggestion to update the README to use OCaml 5.0.
Completed
-
ocaml-multicore/eio#205
Prepare releaseThe sources have been upgraded to depend on
uring.0.3
, and the
CHANGES.md
has been updated for a release.
domainslib
Open
-
ocaml-multicore/domainslib#68
Scope of domainslibA feature request to have
mpsc queues
,concurrent hashmap
and
more concurrency building blocks in domainslib. -
ocaml-multicore/domainslib#69
MakeChan.t
andTask.promise
injectiveThe injectivity annotations with type constructors can be usable as
indexes of GADTs, in particularEffect.t
.
Completed
-
ocaml-multicore/domainslib#65
Fix build on trunkThe
Effect.eff -> Effect.t
change has been updated to build for
trunk, and the CI builds for5.0.0+trunk
. -
ocaml-multicore/domainslib#66
Domainslib.0.4.1
build failure withOCaml 5.0.0+trunk
A newer release of
domainslib.0.4.2
has been updated to build with
OCaml 5.0.0+trunk. -
ocaml-multicore/domainslib#67
FixTask.parallel_for_reduce
on empty loopA corner-case for an empty loop is now correctly handled for
Task.parallel_for_reduce
inlib/task.ml
.
Sundries
Open
-
ocaml-multicore/effects-examples#27
Add GitHub workflow for testingA
.github/workflows/ci.yml
has been added for CI testing. -
ocaml-multicore/ocaml-uring#55
FD passingsendmsg
fails on WSL2An
EINVAL
is returned on the latest WSL kernel when the FD passing
sendmsg
examples fail.
Closed
-
ocaml-multicore/kcas#12
Clean up dependenciesThe 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 benchmarkA
cohttp_eio
benchmark has been added with updates to the
benchmarking scripts. -
ocaml-multicore/retro-httpaf-bench#23
Update to Eio 0.2The
retro-httpaf-bench
Dockerfile has been updated to use Eio 0.2. -
ocaml-multicore/effects-examples#26
Port to OCaml 5.00The
effects-examples
have 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 soliA draft version of the
hamming.ml
andsoli.ml
benchmarks have
been added to Sandmark. -
ocaml-bench/sandmark#299
Irmin 3 benchmarksA 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 respectivelyThe PR adds the Hamming and Soli sequential benchmarks to Sandmark.
CI
-
ocaml-bench/sandmark#275
Move from drone CI to GitHub actionsThe CI jobs from .drone.yml need to be migrated to run with GitHub
Actions workflow. -
ocaml-bench/sandmark#316
main.ymlA new
.github/workflows/main.yml
GitHub Actions file has been
added to run in the CI.
Dependencies
-
ocaml-bench/sandmark#18
js_of_ocaml
fails to run on multicoreA draft PR to build
js_of_ocaml
in 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+trunkocaml-migrate-parsetree
is no longer required for trunk with
ppxlib.0.25.0~5.00preview. -
ocaml-bench/sandmark#310
Removejs_of_ocaml
A work-in-progress to build
js_of_caml-compiler
with
5.0.0+trunk
, asframa-c
is not compatible with ocaml/ocaml.
Sundries
-
ocaml-bench/sandmark#272
Delay benchmark runs if the machine is activeA load average check for threshold 0.6 needs to be verified before
running the benchmarks. -
ocaml-bench/sandmark#302
Renaming suggestions for*run_config.json
filesThe current
*run_config.json
files need to be renamed as follows:-
run_config.json
→sequential.json
-
multicore_parallel_run_config.json
→parallel_turing.json
-
multicore_parallel_navajo_run_config.json
→parallel_navajo.json
-
micro_multicore.json
→micro.json
-
-
ocaml-bench/sandmark#309
Outreachy Applicants: set-up and how-toSandmark 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 FilesA PR to rename the current
*run_config.json
files to be more
meaningful for their intended purpose. -
ocaml-bench/sandmark#317
Add checks forloadavg
An ongoing PR to add a
loadavg
check to ensure that the server is
not busy before actually running the benchmarks.
Closed
Bytecode
-
ocaml-bench/sandmark#282
Analyse Bytecode PerformanceThe
run_config_byte.json
file now allows you to run byte code
version of the Sandmark benchmarks. -
ocaml-bench/sandmark#298
Support to build and run benchmarks in byte modeA
run_config_byte.json
file 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+trunkThe 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 notebooksThe Sandmark-nightly UI changes have been ported to the Sandmark
notebooks/ and work with5.0.0+trunk
OCaml variant. -
ocaml-bench/sandmark#305
re-enable disabled benchmarksThe filter check that disabled
alt-ergo
,frama-c
and
js_of_ocaml
benchmarks have been enabled in the Jupyter notebooks.
Enhancement
-
ocaml-bench/sandmark#274
Custom Variant SupportThe 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
Updatecheck_url
and validate URL in custom.json filesThe
check_url
target in the Makefile checks if a URL is present
for each and every entry in thecustom.json
file, and also if the
URL contains a downloadable file. -
ocaml-bench/sandmark#297
Added dynamic package override and removal for Custom Support VariantThe ability to override and remove dependency packages dynamically
is now supported with the Custom Support Variant feature. -
ocaml-bench/sandmark#306
Updatecheck_url
and addedcheck_jq
A
check_jq
functionality has been added in the Makefile to verify
that the config.json files can be parsed by jq. Thecheck_url
now
verifies that the provided URL is downloadable with wget. -
ocaml-bench/sandmark#307
Use pristine sandmark clone for each buildA fresh clone of Sandmark is used now before each and every
sandmark-nightly run, instead of relying onmake clean
.
Sundries
-
ocaml-bench/sandmark#300
Use 5.0.0+trunk name and versionSandmark OCaml variants have been updated to use the
5.0.0+trunk
name and version number. -
ocaml-bench/sandmark#304
Parallel benchmarks get killed withSEGV
withtrunk
anddomainslib.0.4.2
The PR#11105 fix in the
fiber management resolves the segmentation fault caused in parallel
benchmarks with trunk anddomainslib.0.4.2
. -
ocaml-bench/sandmark#308
Move nightly scripts to SandmarkThe nightly cron run scripts from
sandmark-nightly
have been moved
tosandmark
. -
ocaml-bench/sandmark#312
Removed failure:ignoreThe
failure:ignore
option has been removed from.drone.yml
CI as
5.0.0+trunk
builds are stable now.
Sandmark-nightly
Closed
-
ocaml-bench/sandmark-nightly#5
Status of disabled benchmarksThe 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 UIThe 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 pageThe list indentation has been fixed in the home page.
-
ocaml-bench/sandmark-nightly#49
Add Sandmark info to sandmark-nightlyThe 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 nameThe 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 tooltipThe selected benchmarks are displayed as a table and tooltip support
has been added.
-
ocaml-bench/sandmark-nightly#54
Hide instrumented runtime pagesThe 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 benchmarksA work-in-progress, high-level issue tracker for building
ocaml/ocaml
compiler benchmarks, and necessary tooling with the
current-bench project. -
ocurrent/current-bench#318
Cobench user libraryA 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 aJs.object
for metric data inBenchmarkData.res
A refactoring task for the metric data to use a standard record
instead of aJs.object
. -
ocurrent/current-bench#330
Looking at the pastA 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-axisA wishlist entry to visualize the graphs with time on the x-axis.
-
ocurrent/current-bench#333
Docker build argumentsThe use of
--build-args
for 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 graphsA 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 metricsThe 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 CIA minor fix in
pipeline/libl/current_bench_json.ml
to correctly
match and resolve the benchmark name. -
ocurrent/current-bench#337
Fix missing value frontend crashA couple of fixes for
Js.Obj.assign
and the front-end when an
overlaid metric is added to a branch. -
ocurrent/current-bench#340
Missing metric indicator fixesThe
BenchmarkTest.res
andLineGraph.res
have been fixed to
handle missing metric indicator. -
ocurrent/current-bench#341
frontend: Fix broken line numbers when filling in missing commitsA fix in
frontend/src/AppHelpers.res
to handle broken line numbers
when filling missing commits. -
ocurrent/current-bench#343
Fix colors changing on hiding some lines and change color paletteAn 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 numbersA proper way to handle
\r
,\r\n
, and\n
in 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 columnsThe legend now uses more columns when clicking on the show/hide plot
in the UI. -
ocurrent/current-bench#324
Disabled worker / docker imageThe 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 dropdownThe workers for a specific
repo_id
andpull_number
alone are now
shown in the dropdown menu. -
ocurrent/current-bench#339
frontend: Filter out values less than 0.5% of maximumThe values less than 0.5% of the maximum are now filtered out so
thatArray.getExn
does not crash the frontend. -
ocurrent/current-bench#342
Frontend: hide table comparison rowsNA/NA
The
NA/NA
is used in the frontend when there are no branch forks
to compare in the graphs.
Sundries
-
ocurrent/current-bench#327
SlackThe 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 APIThe 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 argumentsThe
environment/*.conf
file now supports an optionalbuild_args
setting 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 linksThe
ocurrent-bench.opam
andpipeline/pipeline.opam
files 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