# disksim **Repository Path**: cherry05/disksim ## Basic Information - **Project Name**: disksim - **Description**: 异构存储 disksim 模拟器源码,以及相关的脚本和 parv 文件 - **Primary Language**: C - **License**: BSD-3-Clause - **Default Branch**: master - **Homepage**: https://gitee.com/cherry05/disksim-wiki - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 2 - **Created**: 2023-09-13 - **Last Updated**: 2024-05-29 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # disksim ## 介绍 异构存储 `disksim` 模拟器源码,包括一系列的脚本和 `parv` 文件,以及 `Wiki` 文档的说明。 ## 使用说明 主分支为 `master`,每个人可以直接从 `master` 上拉取代码进行编译运行。 若要修改代码或者进行实验测试,请 **fork 该项目**,先在 Wiki 上编写代码修改文档,然后提交 PR,最后进行主分支合并更新。 ## Wiki 文档说明 ### 代码修改 `disksim` 模拟器一共有约 8 万行代码,关于架构和代码说明,会在该仓库的 `Wiki` 中编写,欢迎大家将阅读的代码总结编辑在 `Wiki` 中。 **关于代码的改动,会在 `Wiki` 中单开一个新的 `md` 来进行说明,要求在提交 `PR` 之前,需要在 `Wiki` 中先对修改的代码进行说明**。 *每一次代码改动需要包括的信息有:修改/新增代码概述,作者名称,时间日期,修改/新增代码目的,详细描述,性能影响,其他说明,参考资料* 下面是信息的详细说明。 - 修改/新增代码概述 `(@brief)`。代码文档的第一行应该简明扼要描述修改或增加的主要功能,类似于 `git commit -m` 所提交的信息 - 时间日期 `(@date)`。 - 作者名称 `(@author)`。 - 修改/新增代码的目的。每一次修改/增加功能都应该有一定的目的,哪怕是优化输出格式,这也算目的 - 详细说明。如代码较少,可以直接将代码贴到该部分;如有必要,可以列出修改/新增关联的代码文件名及代码行数范围;如果是实现某一个算法,请在此详细说明算法实现方式 - 性能影响。请发掘出修改/新增代码后可能存在的性能隐患/提升,若没有则写 “无” - 其他说明。该部分可以对修改/新增代码进行任何说明,比如可能存在 bug,但是还没有发现;或某算法时间复杂度较高,希望将来进行优化;亦或是目前实现的功能比较简单,希望将来完善 - 参考资料。如果参考了书籍、文档或论文,请尽可能标注出来,让之后自己方便查阅,也方便他人学习 以上信息需要在仓库的 `Wiki` 页面编辑,也可以用 `git` 拉取下来在本地编辑,然后 `push` 上去。 模板如下: ```markdown ## 1. 修改 cache 替换策略 @date: 2023.9.14 @author: Cherry **修改目的:** 原有的缓存替换策略是 LFU,该算法在面对新负载命中率较低,会导致缓存污染。因此考虑将代码中的 LFU 算法改成双链 LRU。 **详细说明:** 修改了 `cachedev.c` 文件,增加了 `func1()`、`func2()` 函数。 ``c 如果代码较少,可以在这里直接贴上代码 `` 双链 LRU 算法实现思路如下: 略。 **性能影响:** 从理论分析和测试结果发现在各种场景下命中率均得到不通程度的提升。 **其他说明:** 暂时先采用该缓存替换算法,若将来又需要可以再进行优化。 **参考资料:** 略。 ``` ### disksim 文档 该部分文档主要是关于 `disksim` 源码的阅读说明,其中包括 `disksim` 的实现原理、架构、某些函数或重要字段的说明。也可以针对源码中的疑惑或 bug 进行说明(这里建议直接提 `issue`)。 模板如下: ```markdown ## 1. trace 格式的最后一个字段含义 最后一个字段表示的含义是距离上一个请求的时间间隔,并不是请求的时间戳。在代码文件 `src/disksim_iotrace.c` 的 `iotrace_validate_get_ioreq_event` 函数中 `new_event->time = simtime + (validate_nextinter / (double)1000);` 可以看出,下一个事件的时间是 `simtime + validate_nextinter`,说明该字段的含义是时间间隔。 ``` ## 参与者 ## .gitignore 如若编辑 gitignore 文件,请单独提交 PR 其中 `valid` 文件夹下只保留 `.parv`、`.sh`、`.cpp`、`.py`、`rs`、`.diskspecs`、`.model`、`Makefile` 等脚本和配置文件,个人新建的文件夹或其他文件均忽略。