Skip to content

[P9-1] ベンチバイナリに構造化 (JSON) 出力を追加する #94

Description

@thawk105

親イシュー: #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.ccdisplayRusageRUMaxrss() で出力)。

やること

  • 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_usmaxrss
  • per_thread: 集約前の各スレッドの local_* メトリクス
  • aggregate: 既存テキスト出力と等価な集約メトリクス
  • テキスト出力の後方互換を壊さないこと(既存スクリプト・CI が依存)

完了条件

  • --output-format=json 付きで実行すると、上記スキーマに沿った構造化 JSON が
    stdout または --output 指定先に出力される
  • --output-format 省略時は従来どおりのテキスト出力
  • silo の全ワークロード(ycsb / tpcc / bomb / sbomb)で JSON 出力が確認できること
    (他プロトコルへの展開は common/result.cc 集約済みのため自動的に効くはず)

備考

Metadata

Metadata

Assignees

No one assigned

    Labels

    iceboxFrozen for later. Thaw when the time is right.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions