親イシュー: #28 / 旧 #38 を分割したうちの 1 つ(P9 系の 3 分割のうち 1/3)。
依存: なし(いつでも着手可能)。後続の #95 (マトリクス実行スクリプト)がこの出力を利用する。
現状(2026-05-15)
各ワークロードの main()(例: cc/silo/ycsb_silo.cc)は実行後に
Result::displayAllResult() を呼び、common/result.cc がメトリクスを
cout << "key:\t" << value 形式のプレーンテキストで 1 行ずつ出力する。
構造化出力(JSON 等)は存在しない。
出力フォーマットを切り替えるフラグ(--output-format / --output)は未実装。
CCBench のバイナリは gflags ベースなのでフラグ追加自体は容易。
旧 [P9] 構造化ベンチ出力とマトリクス実行スクリプトを追加する #38 起票時と異なり、Result の表示ロジックは [P0] common/ を静的ライブラリ化する #30 (common 静的ライブラリ化)
/ [P2] per-protocolボイラープレートを共通化する #33 系の作業で common/result.cc(約 760 行)に集約済み。各
cc/<protocol>/result.cc は per-protocol のグローバル std::vector<Result> を
宣言する数行のスタブ(silo の場合 11 行)に縮小されている。したがって JSON
出力の改修対象は common/result.cc 1 箇所に局所化されており、10 プロトコル
横断の改修は不要。 (P7 で cc/occ/ が撤去され、対象プロトコルは 10 個。)
Result はスレッドごとの local_* 値を保持し、addLocalAllResult() で 0 番に
集約してから表示する。per-thread 値は集約前に存在するため per_thread 配列の
出力は実装可能。
clocks_per_us は現状ユーザがフラグで与える。CPU 名等の環境情報の自動取得は未実装
(maxrss のみ common/util.cc の displayRusageRUMaxrss() で出力)。
やること
{
"config" : {"protocol" : " silo" , "workload" : " ycsb" , "threads" : 16 },
"env" : {"cpu" : " ..." , "freq_ghz" : 3.2 },
"per_thread" : [... ],
"aggregate" : {"throughput_txps" : 1234567 , "abort_rate" : 0.02 }
}
完了条件
--output-format=json 付きで実行すると、上記スキーマに沿った構造化 JSON が
stdout または --output 指定先に出力される
--output-format 省略時は従来どおりのテキスト出力
silo の全ワークロード(ycsb / tpcc / bomb / sbomb)で JSON 出力が確認できること
(他プロトコルへの展開は common/result.cc 集約済みのため自動的に効くはず)
備考
親イシュー: #28 / 旧 #38 を分割したうちの 1 つ(P9 系の 3 分割のうち 1/3)。
依存: なし(いつでも着手可能)。後続の #95(マトリクス実行スクリプト)がこの出力を利用する。
現状(2026-05-15)
main()(例:cc/silo/ycsb_silo.cc)は実行後にResult::displayAllResult()を呼び、common/result.ccがメトリクスをcout << "key:\t" << value形式のプレーンテキストで 1 行ずつ出力する。構造化出力(JSON 等)は存在しない。
--output-format/--output)は未実装。CCBench のバイナリは gflags ベースなのでフラグ追加自体は容易。
Resultの表示ロジックは [P0] common/ を静的ライブラリ化する #30(common 静的ライブラリ化)/ [P2] per-protocolボイラープレートを共通化する #33 系の作業で
common/result.cc(約 760 行)に集約済み。各cc/<protocol>/result.ccは per-protocol のグローバルstd::vector<Result>を宣言する数行のスタブ(silo の場合 11 行)に縮小されている。したがって JSON
出力の改修対象は
common/result.cc1 箇所に局所化されており、10 プロトコル横断の改修は不要。(P7 で
cc/occ/が撤去され、対象プロトコルは 10 個。)Resultはスレッドごとのlocal_*値を保持し、addLocalAllResult()で 0 番に集約してから表示する。per-thread 値は集約前に存在するため
per_thread配列の出力は実装可能。
clocks_per_usは現状ユーザがフラグで与える。CPU 名等の環境情報の自動取得は未実装(
maxrssのみcommon/util.ccのdisplayRusageRUMaxrss()で出力)。やること
common/(ccbench_commonライブラリ)に出力フォーマット切り替えフラグを追加する--output-format=text|json(デフォルトtextで既存挙動を維持)--output=<path>(省略時は stdout)Resultに JSON シリアライズ経路を追加する(displayAllResult()系と並ぶ形){ "config": {"protocol": "silo", "workload": "ycsb", "threads": 16}, "env": {"cpu": "...", "freq_ghz": 3.2}, "per_thread": [...], "aggregate": {"throughput_txps": 1234567, "abort_rate": 0.02} }config: プロトコル名・ワークロード名・スレッド数・主要なワークロードフラグenv: 取得可能な範囲で CPU 情報・clocks_per_us・maxrssper_thread: 集約前の各スレッドのlocal_*メトリクスaggregate: 既存テキスト出力と等価な集約メトリクス完了条件
--output-format=json付きで実行すると、上記スキーマに沿った構造化 JSON がstdout または
--output指定先に出力される--output-format省略時は従来どおりのテキスト出力(他プロトコルへの展開は
common/result.cc集約済みのため自動的に効くはず)備考