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 的可變狀態

    此問題正在積極追蹤 Stdlib 模組的可變狀態,因為 OCaml 5.0.0 實作應該同時具備記憶體和執行緒安全。

  • 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 原子和忽略清單

    已將忽略清單新增至 ThreadSanitizer,以處理 FieldTag_val 競爭狀況。已新增 CAMLno_tsan 以及針對特定函式沒有競爭狀況的理由,以及寬鬆的原子。

  • ocaml/ocaml#11137 引入 Store_tag_val(dst, val) 並在執行階段中使用

    執行階段程式碼不依賴 Tag_val 作為左值,因此在 runtime/alloc.c 中引入 Store_tag_val(dst,val)

  • ocaml/ocaml#11138 新增 C 函式 caml_thread_has_lock

    任何 C 執行緒現在都可以呼叫函式 caml_thread_has_lock,如果該執行緒屬於網域並且也持有相同網域的鎖定,則會傳回 true。

  • ocaml/ocaml#11142 Gc.set 現在會變更所有網域的次要堆積大小

    調整 Gc.set 語義以設定所有網域的次要堆積大小的草稿 PR。

  • 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 / testsuite / OCaml 5

    包含與 ocamltest 和 OCaml 5 相關的動作項目清單的問題追蹤器。

  • ocaml/ocaml#11065 還原位元組碼偵錯器的基本功能

    處理堆疊回溯的 PR 現在可以運作,並且將建立一個單獨的 PR 來處理 next 指令。

  • ocaml/ocaml#11121 weaklifetime_par.ml 在 Raspberry Pi 4 上遭 OS 的 OOM 清理器終止

    關於具有 2GB 記憶體的 Raspberry Pi 4 上的 ARM64 後端的測試套件失敗報告。

效能

  • ocaml/ocaml#10964 基於環形緩衝區的執行階段追蹤 (eventring)

    專為持續監控 OCaml 應用程式而設計的 Eventring 執行階段追蹤系統正在積極審查中。

  • ocaml/ocaml#11090 程式名稱可用性問題

    多核心執行階段的可用性衰退問題,其中 top 將 OCaml 程式報告為 Domain0

  • ocaml/ocaml#11125 用於次要堆積保留/配置的執行階段事件

    針對次要堆積保留和配置函式,應該發出記錄已配置大小和臨界區的執行階段事件。

已關閉

增強

  • ocaml/ocaml#10802 在 C 程式碼中使用 4.12 值巨集

    for 迴圈樣式用於清單走訪,而 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 工具崩潰

    已將針對位元組碼程式在 tools/dumpobj 中發生的區段錯誤的修正合併至 PR#11077

  • 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 命令的 unwinding 可以運作,而且 tests/unwind 在 MacOS x86_64 和 ARM64 上都能通過。

  • ocaml/ocaml#11124 修正 weaklifetime_par.ml

    一系列修正旨在修正導致測試套件失敗或 Raspberry Pi 4 失敗的 weaklifetime_par.ml 實作。

Windows

  • ocaml/ocaml#10884 修正 Windows 上從 Dynlink 載入的程式碼進行閉包序列化

    已停止在 natdynlink 中註冊空的程式碼片段,如果金鑰是重複的,則 caml_skiplist_insert 會更新資料指標。

  • ocaml/ocaml#10908 修正 Windows 上 caml_mem_map 中可能發生的競爭情況

    已修正修剪記憶體區塊時發生的競爭情況,並清除了 platform.c 中並行次要收集器的 printf 除錯。

  • ocaml/ocaml#11115 修正 Windows 上系統執行緒的效能回歸

    刻度執行緒會在 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 同步程式碼

    已在 domain.c 中記錄 STW 同步程式碼。

  • ocaml/ocaml#11073 程式碼理解:為什麼 STW 區段不會一直保留 all_domains_lock

    已在 PR#11072domain.c 中記錄 STW 同步程式碼。

  • 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

    由於 Eio.Dir.t 已存在,因此新的 API 要求列出目錄的內容。

  • ocaml-multicore/eio#207 新增 readdir 功能

    一個提供 Eio 的 readdir 功能實作的草稿 PR,也用於討論其 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 成為單射

    具有類型建構子的單射註釋可用於 GADT 的索引,特別是 Effect.t

已完成

  • ocaml-multicore/domainslib#65 修正主幹上的建置

    已更新 Effect.eff -> Effect.t 變更以進行主幹建置,並且 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

    已將 hamming.mlsoli.ml 基準測試的草稿版本新增至 Sandmark。

  • 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 動作

    需要移轉 .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 無法在多核心上執行

    已建立在 Sandmark 中為 Multicore OCaml 建置 js_of_ocaml 的草稿 PR。

  • ocaml-bench/sandmark#262 ocaml-migrate-parsetree.2.2.0+stock 無法使用 ocaml.5.00.0+trunk 編譯

    透過 ppxlib.0.25.0~5.00preview,主幹不再需要 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 筆記本

    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 夜間執行應持續到期的期限的功能請求已合併到 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 將夜間腳本移至 Sandmark

    來自 sandmark-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

    在 sandmark-nightly 執行中使用的 Sandmark 的提交版本和分支會顯示在 UI 中。

  • ocaml-bench/sandmark-nightly#52 調整 UI 大小以顯示完整的 OCaml 變體名稱

    已加大 OCaml 變體名稱的寬度,以在 UI 中顯示完整名稱。

  • ocaml-bench/sandmark-nightly#53 以表格顯示基準測試以讀取工具提示

    選定的基準測試會以表格顯示,並且已新增工具提示支援。

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

current-bench

開啟

  • ocurrent/current-bench#306 進行中的 ocaml 編譯器基準測試

    一個進行中的高階問題追蹤器,用於使用 current-bench 專案建置 ocaml/ocaml 編譯器基準測試和必要的工具。

  • 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 已停用的工作者 / Docker 映像

    前端會自動選取第一個「環境」(工作者 + Docker 映像),且系統可能包含已停用的環境。環境清單現在會篩選並僅顯示使用中的項目。

  • ocurrent/current-bench#331 在工作者下拉式選單中僅顯示具有有效執行項目的工作者

    現在下拉式選單中只會顯示特定 repo_idpull_number 的工作人員。

  • ocurrent/current-bench#339 前端:過濾掉小於最大值 0.5% 的值

    現在會過濾掉小於最大值 0.5% 的值,以避免 Array.getExn 導致前端崩潰。

  • ocurrent/current-bench#342 前端:隱藏表格比較列 NA/NA

    當圖表中沒有分支可供比較時,前端會使用 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 is Not Unix
  • HTTP:超文本傳輸協定
  • IEEE:電機電子工程師學會
  • JSON:JavaScript 物件表示法
  • MD:Markdown
  • OOM:記憶體不足
  • OPAM:OCaml 套件管理器
  • OS:作業系統
  • PR:提取請求
  • RFC:請求評論
  • STW:停止所有執行緒
  • UI:使用者介面
  • URL:統一資源定位器
  • VM:虛擬機器
  • WSL:適用於 Linux 的 Windows 子系統