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/ocamlc
和boot/ocamllex
中生成完全相同的图像,而与操作系统和体系结构无关。
增强
-
ocaml/ocaml#11057 为多核中的异步操作实现质量处理
正在进行的工作,重新实现
caml_process_pending
行为,并提供对多核运行时中异步操作的代码改进。 -
ocaml/ocaml#11095 为多核中的异步操作实现质量处理(1/N)
作为 为多核中的异步操作实现质量处理" PR 的后续操作,第一组提交。
-
ocaml/ocaml#11110 更多 ThreadSanitizer 原子操作和忽略列表
已为
Field
和Tag_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#11158 将
ocaml/ocamlnat
中读取OCAMLTOP_INCLUDE_PATH
的代码分离出来ocaml
和ocamlnat
中用于解析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
在测试套件运行时没有正确报告中止失败 -
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.h
和runtime/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#11092 在
aarch64-*-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#10925 将
Caml_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 的建议。
已完成
-
源代码已升级为依赖于
uring.0.3
,并且CHANGES.md
已更新以进行发布。
domainslib
开放
-
ocaml-multicore/domainslib#68 domainslib 的范围
一个功能请求,希望在 domainslib 中有
mpsc queues
、concurrent hashmap
以及更多并发构建块。 -
ocaml-multicore/domainslib#69 使
Chan.t
和Task.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
现在已正确处理空循环的极端情况。
杂项
开放
-
ocaml-multicore/effects-examples#27 添加用于测试的 GitHub 工作流程
已添加
.github/workflows/ci.yml
用于 CI 测试。 -
ocaml-multicore/ocaml-uring#55 FD 传递
sendmsg
在 WSL2 上失败在最新的 WSL 内核上,当 FD 传递
sendmsg
示例失败时,会返回EINVAL
。
已关闭
-
ocaml-multicore/kcas#12 清理依赖项
除 dune 之外,依赖项已从
kcas.opam
中移除。Makefile 已更新,并且旧的 ocamlbuild .mllib-file 已移除。 -
ocaml-multicore/retro-httpaf-bench#19 cohttp-eio:添加基于 cohttp-eio 的基准测试
已添加
cohttp_eio
基准测试,并更新了基准测试脚本。 -
ocaml-multicore/retro-httpaf-bench#23 更新到 Eio 0.2
retro-httpaf-bench
Dockerfile 已更新为使用 Eio 0.2。 -
ocaml-multicore/effects-examples#26 移植到 OCaml 5.00
effects-examples
现在已移植到 OCaml 5.0.0+trunk 上运行,无需专门的效果语法。
基准测试
Sandmark
开放
基准测试
-
ocaml-bench/sandmark#119 额外的基准测试 - hamming 和 soli
已在 Sandmark 中添加了
hamming.ml
和soli.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-ergo
、frama-c
和js_of_ocaml
基准测试的筛选器检查。
增强功能
-
ocaml-bench/sandmark#274 自定义变体支持
指定开发人员分支、配置选项、运行时参数、OCaml 变体的名称、依赖项包覆盖、包删除列表以及 Sandmark nightly 运行应该发生的过期日期的特性请求已合并到 Sandmark。
-
ocaml-bench/sandmark#286 更新
check_url
,并在 custom.json 文件中验证 URLMakefile 中的
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 使用
trunk
和domainslib.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
已关闭
-
ocaml-bench/sandmark-nightly#5 禁用基准测试的状态
Sandmark 中的 Jupyter 笔记本已移植了 sandmark-nightly 中的更改,并且基准测试已启用。
-
ocaml-bench/sandmark-nightly#41 在 UI 中显示 Sandmark 分支和版本
UI 现在在构建和运行基准测试时显示 Sandmark 分支和版本号。
-
ocaml-bench/sandmark-nightly#48 首页的编号列表未对齐
已修复首页的列表缩进。
-
ocaml-bench/sandmark-nightly#49 将 Sandmark 信息添加到 sandmark-nightly
UI 中显示了 sandmark-nightly 运行中使用的 Sandmark 提交版本和分支。
-
ocaml-bench/sandmark-nightly#52 调整 UI 大小以显示完整的 OCaml 变体名称
已扩大 OCaml 变体名称宽度,以便在 UI 中显示完整的名称。
-
ocaml-bench/sandmark-nightly#53 以表格形式显示基准测试以读取工具提示
选定的基准测试以表格形式显示,并添加了工具提示支持。
-
ocaml-bench/sandmark-nightly#54 隐藏已检测运行时页面
目前没有使用已检测运行时,因此相应页面已隐藏在用户面前。
current-bench
打开
-
ocurrent/current-bench#306 WIP ocaml 编译器基准测试
一个正在进行的、高级的跟踪器,用于构建
ocaml/ocaml
编译器基准测试,以及使用 current-bench 项目所需的工具。 -
ocurrent/current-bench#318 Cobench 用户库
一个请求,用于创建一个库,简化使用 current-bench 项目创建和使用基准测试的过程。
-
ocurrent/current-bench#329 在
BenchmarkData.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.res
和LineGraph.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_id
和pull_number
的 worker。 -
ocurrent/current-bench#339 frontend: 过滤掉小于最大值 0.5% 的值
现在,小于最大值 0.5% 的值被过滤掉,因此
Array.getExn
不会导致前端崩溃。 -
ocurrent/current-bench#342 前端:隐藏表格比较行
NA/NA
当图形中没有分支 fork 可比较时,
NA/NA
用于前端。
杂项
-
ocurrent/current-bench#327 Slack
现在可以将基准测试运行的调试日志发送到 Slack 以进行警报通知。
-
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.opam
和pipeline/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 子系统