Skip to content

[Paper/M0][P0] Add low-overhead workspace, FUSE, cache, and remote-fetch telemetry #40

Description

@Ivanbeethoven

Parent research epic: #39

背景

系统论文必须解释延迟来自哪里,而不仅是给出端到端时间。当前 tracing 日志适合调试,但缺少稳定事件 schema、跨 workspace 关联、缓存层级、队列等待、远端字节数和可重放 trace。

目标

建立一个默认关闭、低开销、版本化的观测层,能够回答:

  • 哪些 FUSE 请求进入了 daemon;
  • 请求命中了 upper、CL、Dicfuse memory、disk cache 还是 remote;
  • metadata 和 blob 请求各消耗多少时间;
  • 不同 workspace/snapshot 之间有多少重复请求;
  • mount、ready、refresh、unmount 各阶段耗时;
  • 预取命中、浪费和取消情况;
  • changed-path 查询是否触发了递归扫描。

设计建议

新增统一上下文:

struct WorkspaceContext {
    workspace_id: WorkspaceId,
    snapshot_id: Option<SnapshotId>,
    generation: u64,
    request_id: Option<RequestId>,
}

定义版本化事件:

enum FsEvent {
    FuseOp,
    DirectoryFetch,
    BlobFetch,
    CacheLookup,
    CopyUp,
    Whiteout,
    MountTransition,
    PrefetchDecision,
    QueueWait,
}

每个事件至少包含:

schema_version
timestamp
workspace_id
snapshot_id / generation
operation
latency_us
queue_delay_us
result
bytes
data_source = upper | cl | memory | disk_cas | remote
path_id / path_class
object_id (可配置脱敏)

注意:内核缓存命中不会进入 daemon,不能伪装成 daemon 事件。可额外采集 FUSE/kernel 统计或 eBPF/perf 数据,用“请求未进入 daemon”的方式估算。

Tasks

  • 新增 src/telemetry/,定义稳定、带版本号的事件 schema;
  • lookup/getattr/opendir/readdir/readdirplus/open/read 增加埋点;
  • 为 directory/blob fetch、retry、cache hit/miss 增加埋点;
  • 为 Antares mount lifecycle 和 refresh lifecycle 增加 span;
  • 为 copy-up、whiteout、rename 和 changed-path 查询增加事件;
  • 支持 JSONL trace 输出;
  • 支持聚合指标输出,至少包含 counter、histogram 和 gauge;
  • 默认使用 HMAC/path-id 脱敏,原始路径需要显式开启;
  • 支持采样率和按 workspace 开关;
  • 给每个事件写 schema 文档和兼容性测试;
  • 增加 trace 文件大小上限和 rotation;
  • 增加 benchmark,测量关闭和开启 telemetry 的开销。

Acceptance Criteria

  • 相同 workload 的事件顺序和字段可稳定解析;
  • trace 中可以关联一次 workspace 从 create 到 delete 的完整生命周期;
  • 可以区分 memory、disk CAS 和 remote blob fetch;
  • 可以输出每个 workspace 和 snapshot 的逻辑请求数、物理远端请求数与字节数;
  • 默认配置不会记录原始绝对路径;
  • telemetry 关闭时没有后台写盘线程;
  • telemetry 开启后,在固定 replay 上的中位吞吐下降不超过 5%,并保存测量报告;
  • CI 包含 schema 向后兼容测试。

论文产出

  • FUSE operation breakdown;
  • metadata/blob stall breakdown;
  • cache hit-rate;
  • cross-workspace duplicate ratio;
  • prefetch accuracy/waste;
  • telemetry overhead 图。

Relevant Files

src/dicfuse/async_io.rs
src/dicfuse/store.rs
src/daemon/antares.rs
src/antares/fuse.rs
src/util/logging.rs

Dependencies

无。应与 Issue 2 并行开始。


Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions