SkyByte 是一个基于 MacSim (一个cycle-accurate的CPU/GPU模拟器) 扩展的 CXL-based SSD 模拟框架。它结合了:
SkyByte-Sim:用于SSD/FTL层的模拟
文件: src/main.cc
x./macsim -b <baseline_config> -w <workload_config> [-t <setting_config>] -c <core_num> -o <terminal> -f <output_file> [-p] [-d] [-r]-w: workload配置文件
-b: baseline配置文件
-t: 额外设置配置文件 (可选)
-c: 逻辑核心数
-o: 状态输出重定向终端
-f: 输出文件名
-p: 打印时序模型
-d: 仅DRAM模式
-r: DRAM baseline模式
-s: NAND类型选择 (SLC/MLC/TLC)
std::ifstream bconfig_file(baseline_config_filename);// 解析以下参数: // - promotion_enable: 是否启用页面提升// - write_log_enable: 是否启用写日志// - tpp_enable: TPP策略启用// - astriflash_enable: Astriflash策略启用// - t_policy: 线程调度策略 (RR/RANDOM/LOCALITY/FAIRNESS)// - device_triggered_ctx_swt: 设备触发上下文切换// - cs_threshold: 上下文切换阈值// - ssd_cache_size_byte: SSD缓存大小// - host_dram_size_byte: 主机DRAM大小
xxxxxxxxxxstd::ifstream wconfig_file(workload_config_filename);// 解析以下参数:// - trace_location: trace文件位置前缀// - num_files: trace文件数量// - num_initial_threads: 初始线程数// - num_mark: 标记指令数// - num_sim_threads: 模拟线程数// - scale_factor: 时间缩放因子
xxxxxxxxxxstd::ifstream tconfig_file(setting_config_filename);// 解析以下参数:// - host_dram_size_byte: 覆盖主机DRAM大小// - ssd_host_rate: SSD与主机比率// - cs_threshold: 上下文切换阈值// - write_log_ratio: 写日志比率

Phase 1
xxxxxxxxxx// 1. 初始化SSDssd_init();
// 2. 创建调度器ThreadScheduler scheduler_1(param. trace_filenames, ... );
// 3. 创建并初始化MacSim模拟器macsim_c* sim_p = new macsim_c();sim_p->initialize(argc, argv);
// 4. 运行prefill模式prefill_pass = true;while (sim_p->run_a_cycle_prefill()) ;
// 5. 收集预填充页面for (const auto& element : prefill_pages) { ordered_vector. push_back(element);}Phase 2
xxxxxxxxxx// 1. 初始化SSDssd_init();
// 2. 数据预填充for (auto page : ordered_vector) { bytefs_fill_data(page);}
// 3. 创建调度器运行warmupThreadScheduler scheduler_2(... );scheduler_2.startExecution();
// 4. 等待完成并保存状态copy_dram_system(warmup_hint_data_file);if (tpp_enable) { copy_tpp_system(warmup_hint_data_file_tpp);}Phase 3
xxxxxxxxxx// 1. 恢复warmup状态replay_dram_system(warmup_hint_data_file);if (tpp_enable) { replay_tpp_system(warmup_hint_data_file_tpp);}
// 2. 创建调度器ThreadScheduler scheduler(... );scheduler.startExecution();
// 3. 创建并运行MacSimmacsim_c* sim = new macsim_c();sim->initialize(argc, argv);
// 4. 主模拟循环while (sim->run_a_cycle()) ;
// 5. 输出统计信息sim->stat_stalls(output_file);sim->finalize();print_stat();
文件: src/macsim.cc
macsim_c::initialize() 函数 (第711-781行):

run_a_cycle)文件: src/macsim.cc (第867-1067行)

ssd_init)文件: src/SkyByte-Sim/ftl. cc (第1691-1762行)
xxxxxxxxxxint ssd_init() { // 1. 初始化SSD参数 ssd_init_params(spp); // 页大小、块数、通道数等 // 2. 初始化SSD内部架构 ssd->ch = malloc(sizeof(ssd_channel) * spp->nchs); for (i = 0; i < spp->nchs; i++) { ssd_init_ch(&ssd->ch[i], spp); // 初始化通道和LUN } // 3. 初始化超级块 ssd->sb = malloc(sizeof(ssd_superblock) * spp->sb_per_ssd); for (i = 0; i < spp->sb_per_ssd; i++) { ssd_init_sb(&ssd->sb[i], spp); } // 4. 初始化映射表 ssd_init_maptbl(ssd); ssd_init_rmap(ssd); // 5. 初始化GC bytefs_gc_init(ssd); ssd_init_write_pointer(ssd); // 6. 初始化队列 ssd_init_queues(ssd); // 7. 初始化后端DRAM init_dram_backend(&(ssd->bd), TOTAL_SIZE, 0); // 8. 初始化缓存控制器 dram_subsystem = new cache_controller(... ); // 9. 启动服务线程 bytefs_start_threads();}
