OCaml 多核 - 2022 年 3 月

欢迎来到 2022 年 3 月的 多核 OCaml 月度报告!本更新以及 之前的更新 由我,@ctk21,@kayceesrk 和 @shakthimaan 共同编写。

我们一直在稳步朝着发布稳定的 OCaml 5.0 版本迈进,正如您在后面的修复列表中所见——感谢您的所有贡献!以前在 4.x 分支中支持的 OpenBSD、FreeBSD 和 NetBSD 平台配置现在已重新启用。ARM64 支持(适用于 macOS、Linux 和 BSD)在主干中是稳定的,ARM CFI 集成已合并作为后续操作以方便调试和分析。值得注意的是,这还包括 针对 ARMv8 和 Power 端口的内存模型测试。Windows mingw64 端口也已在主干中再次运行。

一个 效果教程 也贡献给了 OCaml 手册;即使在合并之后,也欢迎继续提供反馈。当您尝试使用效果时,请继续在本论坛中发布有关您的学习经验的问题或评论。

Sandmark 基准测试项目添加了字节码分析以解决任何性能回归问题。我们一直在努力获取编译数据点的测量结果。当前的基准管道生产部署具有重大 UI 更改,现在对基准运行具有警报通知。

与往常一样,多核 OCaml 的打开和已完成的任务首先列出,然后是生态系统工具项目。最后,为了您的参考,列出了 Sandmark、sandmark-nightly 和 current-bench 项目的更新。

多核 OCaml

打开

讨论

  • ocaml/ocaml#10960 审计 stdlib 以查找可变状态

    由于 OCaml 5.0.0 实现应该是内存安全和线程安全的,因此此问题正在积极跟踪 Stdlib 模块的可变状态。

  • ocaml/ocaml#11013 OCaml 5.0 发布目标的元问题

    一个问题跟踪器,其中包含用于分支 OCaml 5.0 的检查清单。

  • ocaml/ocaml#11074 OCaml 5.0 & 未捕获的异常

    关于如何在 OCaml 5.0 中处理未捕获的异常的问题和讨论。

错误

  • ocaml/ocaml#10868 修复初始化帧哈希表时的越界错误

    修复 runtime/frame_descriptors.c 中初始化帧哈希表时越界错误的 PR 准备合并。

  • ocaml/ocaml#11040 ThreadSanitizer 问题

    一个问题跟踪器,其中包含 tests/parallel 执行的 ThreadSanitizer 运行列表,用于排查竞争条件。

  • ocaml/ocaml#11144 恢复 amd64 的帧指针支持

    一个正在进行的工作,旨在重新引入 AMD64 架构的丢失的帧指针支持,因为这与多核合并部分丢失了。

构建

  • ocaml/ocaml#10315 [构建] 支持在 dune 构建中组合编译器

    一个使用 Dune 构建系统构建 OCaml 编译器的请求。这对多核 OCaml 生态系统开发也很有用。

  • ocaml/ocaml#10505 [RFC] 要求 libunix 符合 1003.1-2008

    一个更新构建以符合 The Open Group Base Specification Issue 6 和 7,IEEE Std 1003.1-2008 的草案 PR。

  • ocaml/ocaml#11096 在 FreeBSD/aarch64 上启用本机代码

    configure.ac 已更新以在 FreeBSD/aarch64 上原生构建。

  • ocaml/ocaml#11097 修复对 NetBSD 的支持并在 NetBSD/aarch64 上启用本机代码

    已启用对 NetBSD/aarch64 上原生构建的支持。

  • ocaml/ocaml#11143 在 GitHub Actions 中测试 32 位构建

    .github/workflows/build.yml 中添加了 i386 条目以使用 GitHub Actions 测试 32 位构建。

  • ocaml/ocaml#11149 使引导过程可重复

    此 PR 使 make bootstrap 步骤能够在 boot/ocamlcboot/ocamllex 中生成完全相同的图像,而与操作系统和体系结构无关。

增强

  • ocaml/ocaml#11057 为多核中的异步操作实现质量处理

    正在进行的工作,重新实现 caml_process_pending 行为,并提供对多核运行时中异步操作的代码改进。

  • ocaml/ocaml#11095 为多核中的异步操作实现质量处理(1/N)

    作为 为多核中的异步操作实现质量处理" PR 的后续操作,第一组提交。

  • ocaml/ocaml#11110 更多 ThreadSanitizer 原子操作和忽略列表

    已为 FieldTag_val 竞争条件添加了 ThreadSanitizer 忽略列表。已添加 CAMLno_tsan,并提供对特定函数没有竞争条件的说明,以及已添加了放松的原子操作。

  • ocaml/ocaml#11137 引入 Store_tag_val(dst, val) 并在运行时使用它

    运行时代码不依赖于 Tag_val 作为左值,因此 Store_tag_val(dst,val) 被引入到 runtime/alloc.c 中。

  • ocaml/ocaml#11138 添加 C 函数 caml_thread_has_lock

    现在,任何 C 线程都可以调用 caml_thread_has_lock 函数,如果该线程属于一个域并持有该域的锁,则它将返回 true。

  • ocaml/ocaml#11142 Gc.set 现在更改所有域的次要堆大小

    一个草案 PR,用于调整 Gc.set 的语义,以便为所有域设置次要堆大小。

  • ocaml/ocaml#11154 添加 Domain.get_name

    一个在 Domain 模块中包含 get_name 的功能请求,因为 API 已经包含 set_name

  • ocaml/ocaml#11156 5.00 后更改次要堆大小的 API

    在 5.00 后 API 中更改所有域的次要堆大小的建议建议。

文档

  • ocaml/ocaml#10992 OCaml 多核内存模型和 C(运行时、FFI、VM)

    有关 OCaml 多核内存模型和 Field 宏的使用文档正在积极修订和更新。

  • ocaml/ocaml#11058 runtime/HACKING.adoc:调试运行时的提示

    包含运行时系统信息的 HACKING.adoc 文档,以及解释故障排除的 runtime/HACKING.adoc 文件已准备合并。

  • ocaml/ocaml#11093 效果手册

    此 PR 向手册添加了效果处理程序教程。渲染后的网页位于 https://kcsrk.info/webman/manual/effects.html。

测试

  • ocaml/ocaml#10980 GitHub Actions / ocamltest / 测试套件 / OCaml 5

    一个问题跟踪器,其中包含与 ocamltest 和 OCaml 5 相关的操作项列表。

  • ocaml/ocaml#11065 恢复字节码调试器的基本功能

    处理堆栈回溯的 PR 现在正在运行,将创建一个单独的 PR 来处理 next 指令。

  • ocaml/ocaml#11121 weaklifetime_par.ml 在树莓派 4 上被操作系统的 OOM 收割器杀死

    关于树莓派 4 上带有 2GB 内存的 ARM64 后端上的测试套件失败报告。

性能

  • ocaml/ocaml#10964 基于环形缓冲区的运行时跟踪(eventring

    专为持续监控 OCaml 应用程序而设计的 Eventring 运行时跟踪系统正在积极审查中。

  • ocaml/ocaml#11090 程序名称可用性问题

    一个多核运行时的可用性回归问题,其中 top 将 OCaml 程序报告为 Domain0

  • ocaml/ocaml#11125 用于次要堆预留/分配的运行时事件

    应为次要堆预留和分配函数发出记录分配大小和关键区的运行时事件。

已关闭

增强

  • ocaml/ocaml#10802 在 C 代码中使用 4.12 值宏

    循环样式用于遍历列表,而 Val_int(0) 现在表示值为 0 的整数。

  • ocaml/ocaml#10958 仅在源代码更改时重建 flexlink.exe

    Makefile 已更新,仅在源代码被修改时才构建 flexdll/flexlink.exe

  • ocaml/ocaml#10971 限制运行时预留内存量的方法,以便可以使用 Valgrind 和 AFL

    现在可以从 OCAMLRUNPARAM 设置 max_domains 值以限制内存使用量,并在实现中提供可用性和复杂性之间的良好平衡。

  • ocaml/ocaml#10991 使用 zstd 上传和下载 CI 工件

    使用 zstd 压缩可以提高 CI 工件的上传和下载时间。

  • ocaml/ocaml#11078 放宽调试运行时中 caml_initialize 断言

    caml_initialize 中的断言检查已放宽,以不影响调试运行时的吞吐量。

  • ocaml/ocaml#11082 为次要堆保留 caml_minor_heap_max_wsz * Max_domains

    初始次要堆大小预留为 s * Max_domains,域可以使用 Gc.set 将其次要堆大小增加到预留量之外。预留大小始终为 caml_minor_heap_max_wsz * Max_domains

  • ocaml/ocaml#11123 Gc 统计:主要收集次数

    Caml_state->stat_major_collections 的使用已移除,并且使用全局值 caml_major_cycles_completed 来报告统计信息,如文档中所述。

  • ocaml/ocaml#11158ocaml/ocamlnat 中读取 OCAMLTOP_INCLUDE_PATH 的代码分离出来

    ocamlocamlnat 中用于解析 OCAMLTOP_INCLUDE_PATH 的相同代码已被重构。

修复

  • ocaml/ocaml#11037 重启 Jenkins CI 时发现的各种修复

    此 PR 包含一些修复,例如更新 Jenkins CI "main" 脚本以更好地处理仅字节码构建、更新测试套件、配置调整和运行时系统更改。

  • ocaml/ocaml#11054 尊重用户提供的最大堆栈空间值,并修复 tmp/stack_space.ml 测试的调试运行

    此 PR 遵守 OCAMLRUNPARAM=1 用于初始堆栈大小,并确保 tmc/stack_space.ml 在运行阶段应用堆栈限制。

  • ocaml/ocaml#11061 dumpobj 工具崩溃

    PR#11077 中合并了一个修复 tools/dumpobj 在字节码程序上出现的段错误的补丁。

  • ocaml/ocaml#11076 调整字节码的堆栈参数,避免生成太多对 caml_ensure_stack_capacity 的调用

    堆栈“安全裕量”已减少到 6,堆栈阈值已增加到 32。大多数字节码函数使用不超过 32 - 6 个堆栈槽,这为字节码回归提供了快速修复。

  • ocaml/ocaml#11077 修复由于裸指针比较导致的 dumpobj 崩溃

    dumpobj 中使用 (==) 而不是 (=) 修复了支持裸指针的通用比较函数中的崩溃。

  • ocaml/ocaml#11094 Domainslib 产生段错误

    一个修复了在使用 Sandmark 进行并行程序时使用 domainslib 导致的段错误的补丁,修复了纤维管理中的段错误。

  • ocaml/ocaml#11105 修复纤维管理中的段错误(问题 #11094)

    现在维护了一个指向列表数组的整数索引,而不是指向纤维管理中缓存的指针。这修复了在使用 Sandmark 中的 domainslib 构建并行基准测试时报告的段错误。

  • ocaml/ocaml#11141 修复 32 位构建

    runtime/gc_ctrl.c 已更新为使用 ARCH_INTNAT_PRINTF_FORMAT 来构建 32 位版本。

测试

  • ocaml/ocaml#10953 ocamltest/summarize.awk 在测试套件运行时没有正确报告中止失败

    PR#11088PR#11100 已合并以处理使用 summarize.awk 失败的测试运行。

  • ocaml/ocaml#11084 在使用调试运行时运行时,在 lib-dynlink-private 测试用例中禁用 test_cow_repeated

    testsuite/tests/lib-dynlink-private/test.ml 已更新,以在使用调试运行时时禁用 test_cow_repeated

  • ocaml/ocaml#11004 内存模型测试

    已合并 testsuite 中包含内存模型测试的新子目录。这些对于 ARMv8 和 Power 端口非常有用。

  • ocaml/ocaml#11088 summarize.awk:当 ocamltest 结果无法理解时应该失败

    已修复 summarize.awk 中对来自 ocamltest 运行的意外结果的处理。

  • ocaml/ocaml#11099 ARM64 CFI 支持

    ARM64 上针对 CFI 命令的展开现在可以正常工作,并且 tests/unwind 在 MacOS x86_64 和 ARM64 上都通过了测试。

  • ocaml/ocaml#11124 修复 weaklifetime_par.ml

    一系列修复以修复 weaklifetime_par.ml 的实现,该实现会导致 Raspberry Pi 4 上的测试套件失败。

Windows

  • ocaml/ocaml#10884 修复 Windows 上从 Dynlink 加载的代码进行闭包编组

    natdynlink 中的空代码片段注册已被停止,并且 caml_skiplist_insert 在密钥是重复时更新数据指针。

  • ocaml/ocaml#10908 修复 Windows 上 caml_mem_map 中的可能竞态条件

    已修复在修剪内存块时出现的竞态条件,并且来自 platform.c 中并发次要收集器中的 printf 调试已清理。

  • ocaml/ocaml#11115 修复 Windows 上 systhreads 的性能回归

    滴答线程在 Windows 版本的 select 上调用 caml_thread_yield,这会导致性能回归。Sleep 函数被用作替代,并且性能差异很明显,如下所示

    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 修复 Windows 上的 tool-dumpobj 测试

    通过更新 tool-dumpobj/test.run,Inria CI 上的 mingw-64 运行已修复。

文档

  • ocaml/ocaml#11008 文档并重构 gc-stats 代码

    runtime/caml/gc_stats.hruntime/gc_stat.c 代码已被重构并记录。

  • ocaml/ocaml#11072 domain.c:记录 STW 同步代码

    STW 同步代码已在 domain.c 中记录。

  • ocaml/ocaml#11073 代码理解:为什么 STW 部分没有始终保持 all_domains_lock

    STW 同步代码已在 PR#11072 中的 domain.c 中记录。

  • ocaml/ocaml#11120 警告 69、70、71 和 72 的手册条目缺失

    手册条目列在 man ocamlc 的输出中,已添加了警告 69、70、71 和 72。

  • ocaml/ocaml#11122 修复 Stdlib 文档注释中的拼写错误

    已修复 stdlib/stdlib.mli 中的拼写错误。

杂项

  • ocaml/ocaml#11092aarch64-*-openbsd* 上启用原生代码

    OCaml 在 OpenBSD/aarch64 上构建良好。

  • ocaml/ocaml#11112 加固 -use-runtime 抵御路径中的空格

    此 PR 确保使用 -use-runtime 指定的路径中的空格按预期工作。

  • ocaml/ocaml#11047 GC 统计:正确地使分配统计信息成为孤儿

    此 PR 中实现了一个使分配统计信息成为孤儿的过程,其中“孤儿统计信息”存储在 gc_stats.c 中的全局 structure alloc_stats 变量中。在域终止时,当前域的统计信息将添加到“孤儿统计信息”中。

  • ocaml/ocaml#10925Caml_state 的符号重命名为 caml_state

    Caml_state 宏已重命名为 caml_state 以避免名称冲突。

  • ocaml/ocaml#10989 直接从 git 下载 GNU parallel

    tools/ci/appveyor/appveyor_build.sh 已更新为使用 Git 下载 GNU parallel。

生态系统

Eio

开放

  • ocaml-multicore/eio#206 API 请求:readdir

    一个新的 API 请求来列出目录的内容,因为 Eio.Dir.t 已经存在。

  • ocaml-multicore/eio#207 添加 readdir 功能

    一个草案 PR,它为 Eio 提供了 readdir 功能的实现,以及讨论其 API。

  • ocaml-multicore/eio#208 更新 README 以使用 OCaml 5.0

    一个建议将 README 更新为使用 OCaml 5.0 的建议。

已完成

  • ocaml-multicore/eio#205 准备发布

    源代码已升级为依赖于 uring.0.3,并且 CHANGES.md 已更新以进行发布。

domainslib

开放

  • ocaml-multicore/domainslib#68 domainslib 的范围

    一个功能请求,希望在 domainslib 中有 mpsc queuesconcurrent hashmap 以及更多并发构建块。

  • ocaml-multicore/domainslib#69 使 Chan.tTask.promise 可注入

    使用类型构造函数的注入性注释可用作 GADTs 的索引,特别是 Effect.t

已完成

  • ocaml-multicore/domainslib#65 修复 trunk 上的构建

    Effect.eff -> Effect.t 更改已更新以构建 trunk,并且 CI 构建了 5.0.0+trunk

  • ocaml-multicore/domainslib#66 Domainslib.0.4.1 使用 OCaml 5.0.0+trunk 构建失败

    domainslib.0.4.2 的较新版本已更新,可以与 OCaml 5.0.0+trunk 一起构建。

  • ocaml-multicore/domainslib#67 修复空循环上的 Task.parallel_for_reduce

    lib/task.ml 中的 Task.parallel_for_reduce 现在已正确处理空循环的极端情况。

杂项

开放

已关闭

基准测试

Sandmark

开放

基准测试
  • ocaml-bench/sandmark#119 额外的基准测试 - hamming 和 soli

    已在 Sandmark 中添加了 hamming.mlsoli.ml 基准测试的草案版本。

  • ocaml-bench/sandmark#299 Irmin 3 基准测试

    一个请求更新 Sandmark Irmin 基准测试,该基准测试会重放 Tezos 的访问模式。

  • ocaml-bench/sandmark#319 添加了两个串行基准测试,分别是:hamming 和 soli,以及它们各自的

    此 PR 将 Hamming 和 Soli 串行基准测试添加到 Sandmark 中。

CI
  • ocaml-bench/sandmark#275 从 drone CI 迁移到 GitHub Actions

    来自 .drone.yml 的 CI 任务需要迁移到使用 GitHub Actions 工作流程运行。

  • ocaml-bench/sandmark#316 main.yml

    一个新的 .github/workflows/main.yml GitHub Actions 文件已添加用于在 CI 中运行。

依赖项
  • ocaml-bench/sandmark#18 js_of_ocaml 无法在多核上运行

    已创建了一个草案 PR 用于在 Sandmark 中为多核 OCaml 构建 js_of_ocaml

  • ocaml-bench/sandmark#262 ocaml-migrate-parsetree.2.2.0+stock 无法使用 ocaml.5.00.0+trunk 编译

    使用 ppxlib.0.25.0~5.00preview 后,trunk 不再需要 ocaml-migrate-parsetree

  • ocaml-bench/sandmark#310 删除 js_of_ocaml

    正在进行一项工作,使用 5.0.0+trunk 构建 js_of_caml-compiler,因为 frama-c 与 ocaml/ocaml 不兼容。

杂项
  • ocaml-bench/sandmark#272 如果机器处于活动状态,则延迟基准测试运行

    在运行基准测试之前,需要验证负载平均值检查的阈值为 0.6。

  • ocaml-bench/sandmark#302 针对 *run_config.json 文件的重命名建议

    当前的 *run_config.json 文件需要按以下方式重命名

    • 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 申请者:设置和操作方法

    Sandmark 正参与 Outreachy 项目,已提供必要的设置和操作方法,以便在项目上开始工作。

  • ocaml-bench/sandmark#315 重命名 Json 文件

    一个 PR 用于将当前的 *run_config.json 文件重命名为更具意义的名称,以体现其用途。

  • ocaml-bench/sandmark#317 添加 loadavg 检查

    一个正在进行的 PR 用于添加 loadavg 检查,以确保服务器在实际运行基准测试之前不处于繁忙状态。

已关闭

字节码
  • ocaml-bench/sandmark#282 分析字节码性能

    run_config_byte.json 文件现在允许您运行 Sandmark 基准测试的字节码版本。

  • ocaml-bench/sandmark#298 支持以字节码模式构建和运行基准测试

    已添加一个 run_config_byte.json 文件用于以字节码模式构建和运行基准测试。您可以使用以下方法进行测试

    $ 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 
    
笔记本
  • ocaml-bench/sandmark#279 将 notebooks/ 更新到 5.00.0+trunk

    notebooks/ 文件夹中的 Jupyter 笔记本已更新为使用 5.0.0+trunk。

  • ocaml-bench/sandmark#301 将 sandmark nightly UI 移植到 sandmark notebooks

    Sandmark-nightly UI 更改已移植到 Sandmark notebooks/,并与 5.0.0+trunk OCaml 变体一起使用。

  • ocaml-bench/sandmark#305 重新启用禁用的基准测试

    在 Jupyter 笔记本中已启用禁用 alt-ergoframa-cjs_of_ocaml 基准测试的筛选器检查。

增强功能
  • ocaml-bench/sandmark#274 自定义变体支持

    指定开发人员分支、配置选项、运行时参数、OCaml 变体的名称、依赖项包覆盖、包删除列表以及 Sandmark nightly 运行应该发生的过期日期的特性请求已合并到 Sandmark。

  • ocaml-bench/sandmark#286 更新 check_url,并在 custom.json 文件中验证 URL

    Makefile 中的 check_url 目标检查 custom.json 文件中每个条目是否存在 URL,以及 URL 是否包含可下载的文件。

  • ocaml-bench/sandmark#297 添加了针对自定义支持变体的动态包覆盖和删除

    现在,自定义支持变体特性支持动态覆盖和删除依赖项包。

  • ocaml-bench/sandmark#306 更新 check_url,并添加 check_jq

    已在 Makefile 中添加了 check_jq 功能,用于验证 config.json 文件是否可以由 jq 解析。check_url 现在验证提供的 URL 是否可以使用 wget 下载。

  • ocaml-bench/sandmark#307 为每次构建使用原始的 sandmark 克隆

    现在,在每次 sandmark-nightly 运行之前都会使用 Sandmark 的全新克隆,而不是依赖于 make clean

杂项
  • ocaml-bench/sandmark#300 使用 5.0.0+trunk 名称和版本

    Sandmark OCaml 变体已更新为使用 5.0.0+trunk 名称和版本号。

  • ocaml-bench/sandmark#304 使用 trunkdomainslib.0.4.2 时,并行基准测试因 SEGV 而被终止

    PR#11105 中对线程管理的修复解决了使用 trunk 和 domainslib.0.4.2 时,并行基准测试中发生的段错误。

  • ocaml-bench/sandmark#308 将 nightly 脚本移动到 Sandmark

    来自 sandmark-nightly 的 nightly cron 运行脚本已移动到 sandmark

  • ocaml-bench/sandmark#312 删除 failure:ignore

    由于 5.0.0+trunk 构建现在已经稳定,因此已从 .drone.yml CI 中删除了 failure:ignore 选项。

Sandmark-nightly

已关闭

Sandmark-nightly-PR-53-tooltip|690x113

current-bench

打开

  • ocurrent/current-bench#306 WIP ocaml 编译器基准测试

    一个正在进行的、高级的跟踪器,用于构建 ocaml/ocaml 编译器基准测试,以及使用 current-bench 项目所需的工具。

  • ocurrent/current-bench#318 Cobench 用户库

    一个请求,用于创建一个库,简化使用 current-bench 项目创建和使用基准测试的过程。

  • ocurrent/current-bench#329BenchmarkData.res 中使用标准记录而不是 Js.object 来表示指标数据

    一项重构任务,用于将指标数据更改为使用标准记录而不是 Js.object

  • ocurrent/current-bench#330 回顾过去

    一些 UI 更改,以便 dune 团队可以更好地查看过去的基准测试结果。

  • ocurrent/current-bench#332 考虑将时间用作 x 轴

    一个愿望清单条目,用于将时间可视化到 x 轴上的图表中。

  • ocurrent/current-bench#333 Docker 构建参数

    OCluster 管道中的 Docker 需要使用 --build-args,以便使用 Sandmark nightly 进行自定义 Dockerfile 运行。

  • ocurrent/current-bench#344 在不同的指标图表中使用相同的颜色显示相同的子指标

    一项 UI 增强功能,用于在所有图表中显示相同子指标的相同颜色。

已关闭

修复
  • ocurrent/current-bench#326 前端:修复所有指标都使用相同 x 轴的错误

    UI 现在正确显示了所有提交的相关元数据,以及 x 轴中每个指标的相关元数据。

  • ocurrent/current-bench#334 修复 CI

    pipeline/libl/current_bench_json.ml 中进行了一个小修复,以正确匹配并解析基准测试名称。

  • ocurrent/current-bench#337 修复缺少值导致的前端崩溃

    Js.Obj.assign 和前端进行了几个修复,以便在将覆盖的指标添加到分支时进行处理。

  • ocurrent/current-bench#340 缺少指标指示器修复

    已修复 BenchmarkTest.resLineGraph.res,以处理缺少指标指示器。

  • ocurrent/current-bench#341 前端:修复在填写缺少提交时出现的行号错误

    frontend/src/AppHelpers.res 中进行了一个修复,以处理在填写缺少提交时出现的行号错误。

  • ocurrent/current-bench#343 修复隐藏某些行时颜色变化,并更改调色板

    对调色板进行了一次美观的 UI 更改,并修复了隐藏行时颜色变化的问题。

  • ocurrent/current-bench#345 在计算行号时正确处理回车符

    在浏览器中显示 UI 中的行号时,以适当的方式处理 \r\r\n\n

前端
  • ocurrent/current-bench#323 允许点击图例显示/隐藏绘图线,并使用更多列

    现在,当在 UI 中点击显示/隐藏绘图时,图例使用更多列。

  • ocurrent/current-bench#324 禁用 worker / docker 镜像

    前端会自动选择第一个“环境”(worker + Docker 镜像),系统可能包含禁用的环境。 环境列表现在会过滤并仅显示活动条目。

  • ocurrent/current-bench#331 在 worker 下拉列表中仅显示具有有效运行的 worker

    现在,下拉菜单中仅显示特定 repo_idpull_number 的 worker。

  • ocurrent/current-bench#339 frontend: 过滤掉小于最大值 0.5% 的值

    现在,小于最大值 0.5% 的值被过滤掉,因此 Array.getExn 不会导致前端崩溃。

  • ocurrent/current-bench#342 前端:隐藏表格比较行 NA/NA

    当图形中没有分支 fork 可比较时,NA/NA 用于前端。

杂项

Current-bench-PR-327-alert|690x301

  • ocurrent/current-bench#328 添加一个 Cobench 客户端库,用于使用 HTTP API 推送结果

    Irmin 基准测试的月度结果需要上传到 current-bench,因此创建了一个 Cobench 客户端库,用于与 HTTP API 一起使用。

  • ocurrent/current-bench#336 Docker 构建参数

    environment/*.conf 文件现在支持一个可选的 build_args 设置,该设置可用于将环境变量传递给 make bench。 这对于 sandmark-nightly 以及 cron 式的快速和慢速基准测试调度也很有用。

    {
    "repositories": [
      {
        "name": "local/local",
        "worker": "autumn",
        "build_args": ["FOO=42"]
      },
    
  • ocurrent/current-bench#338 使用最新的 OCurrent 用于日志行号链接

    ocurrent-bench.opampipeline/pipeline.opam 文件已更新为使用最新的 OCurrent 版本。

我们要感谢社区中所有 OCaml 用户、开发人员和贡献者对该项目的持续支持。

缩略语

  • AFL: American Fuzzy Lop
  • AMD: 超微半导体
  • API: 应用程序编程接口
  • ARM: 高级精简指令集机器
  • AWK: Aho Weinberger Kernighan
  • BSD: 伯克利软件发行版
  • CFI: 栈帧信息
  • CI: 持续集成
  • FD: 文件描述符
  • FFI: 外部函数接口
  • GADT: 广义代数数据类型
  • GC: 垃圾收集器
  • GNU: GNU's Not Unix
  • HTTP: 超文本传输协议
  • IEEE: 电气电子工程师学会
  • JSON: JavaScript 对象表示法
  • MD: Markdown
  • OOM: 内存不足
  • OPAM: OCaml 包管理器
  • OS: 操作系统
  • PR: 拉取请求
  • RFC: 互联网请求意见
  • STW: 全局暂停
  • UI: 用户界面
  • URL: 统一资源定位器
  • VM: 虚拟机
  • WSL: Windows 的 Linux 子系统