尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
如何选择合适的DRAM调度策略?Ramulator 2.1 FRFCFS与Row Policy完整对比
【免费下载链接】ramulator2Ramulator 2.0 is a modern, modular, extensible, and fast cycle-accurate DRAM simulator. It provides support for agile implementation and evaluation of new memory system designs (e.g., new DRAM standards, emerging RowHammer mitigation techniques). Described in our IEEE CAL 2023 paper: https://arxiv.org/pdf/2308.11030.项目地址https://gitcode.com/gh_mirrors/ram/ramulator2点击查看免费下载Ramulator 2.1 是一款模块化、可扩展、周期精确cycle-accurate的 DRAM 模拟器用于快速实现与评估新的内存系统设计。在它的内存控制器中DRAM 调度策略由两个正交部件决定请求调度器scheduler决定下一个发哪条请求行策略row_policy决定何时关闭打开的行。选对两者的组合直接影响模拟出的延迟、带宽与 RowHit 命中率。本文带你完整对比 FRFCFS、FRFCFS-RowHit 调度器与 Open、ClosedCAP 行策略帮你在几分钟内为实验做出正确选择。为什么调度策略会决定 DRAM 性能DRAM 的访问遵循先开行ACT再读列RD的协议。当连续访问落在同一行时命中行缓冲RowHit延迟最低若访问另一个行则必须关行再开行RowConflict代价最高。调度器和行策略本质上就是在让正确的行保持打开这件事上做权衡现象含义对性能的影响RowHit访问已在打开的行最低延迟省 ACTRowMiss访问未打开的行需 ACT中等代价RowConflict打开行后又要访问别的行需 PREACT代价最高理解了这个背景再看两种调度器就顺理成章了。Ramulator 2.1 的两大请求调度器调度器接口 i_scheduler.h 只有一个核心方法get_best_request()从待处理队列里挑出下一条最值得发出的请求。它优先选时序就绪的请求就绪相同时按到达顺序先到先得打破平局。FRFCFS先到先得优先就绪最基础的调度器实现见 frfcfs.cppPython 包装为 frfcfs.py。它只做一件事在队列里扫描一遍挑出时序已就绪的请求若多个就绪则取到达最早的那个。简单、无额外状态适合绝大多数基准场景不做行维度的前瞻可能让一条未就绪的旧请求占着坑是 Ramulator 官方示例的默认选择见 example_config.pyFRFCFS-RowHit为行命中让路在 FRFCFS 基础上增加了行感知实现见 frfcfs_rowhit.cppPython 包装为 frfcfs_row_hit.py。它分两轮扫描第一轮标记出队列里所有行命中请求并记录每个 bank 最早的命中到达时刻第二轮执行 FRFCFS但跳过那些会抢占已有行命中的关行请求would_preempt_rowhit。直觉当 nRTP nCCD_L 时一旦行被打开继续访问同行比抢先关行去访问另一行更划算。FRFCFS-RowHit 就是防止后者打乱前者。对比项FRFCFSFRFCFS-RowHit核心逻辑就绪优先 到达顺序就绪优先 保护行命中额外状态无每 bank 的命中标志与到达时刻适用场景通用基准、基线高局部性负载、想最大化 RowHit复杂度低略高两轮扫描Row PolicyOpen 与 ClosedCAP 怎么选行策略接口 i_row_policy.h 定义了 4 个钩子pre_schedule()调度前可注入关行命令、try_upgrade_command()选定时可把命令升级为自动预充电版、on_issue()命令发出后、post_schedule()本 tick 收尾。Open 行策略最宽松的策略访问后不主动关行让行一直开着。实现极简见 open.cpp 与 open.py所有钩子均为空操作。局部性好的负载 → RowHit 高、延迟低访问模式跳跃 → 打开行长期占用可能引发不必要的 RowConflict 与能耗ClosedCAP 行策略访问 N 列后自动关行带列访问计数上限的关闭策略见 closed_cap.cpp 与 closed_cap.py。它给每个 bank 记一个列访问计数器达到上限cap默认 4后主动关行优先尝试命令升级把RD→RDA、WR→WRA自动预充电读/写同时关行这是最省时序的方式若标准不支持 AP 命令或时序未就绪则回退到注入显式PREpb关行一旦发出关行命令该 bank 的计数器立即清零重新计数。对比项OpenClosedCAP关行时机从不主动关列访问达到cap后关关行手段—优先 AP 升级回退 PREpb参数无cap默认 4适用场景高局部性、求低延迟跳跃访问、平衡能耗与延迟调度策略与行策略如何协同在 generic_ddr_controller.cpp 的tick()中两者的协作流程清晰可见推进时钟、刷新队列统计、排空已完成读请求刷新管理器与行策略pre_schedule()先行ClosedCAP 可能在此注入PREpb按active priority read/write的优先级调用调度器挑出最佳候选行策略try_upgrade_command()可能把候选升级为自动预充电命令向 DRAM 发出命令行策略与插件on_issue()记录请求退休retire或升级为 active行策略post_schedule()收尾。也就是说调度器选发谁行策略在选前、选中后、发出后三个时刻介入共同决定最终命令序列。改其中任一方都可能改变 RowHit/Conflict 的统计。三步上手在示例中切换调度策略仓库自带的 examples/example_config.py 是最快的起点。它用SimpleO3前端 DDR4 GenericDDR 控制器默认就是FRFCFSOpenctrl ramulator.controller.GenericDDR( dramddr4, schedulerramulator.scheduler.FRFCFS(), # 可换成 FRFCFSRowHit() refresh_managerramulator.refresh_manager.AllBank(), row_policyramulator.row_policy.Open(), # 可换成 ClosedCAP(cap4) addr_mapperramulator.addr_mapper.RoBaRaCoCh(), )三步即可对比换调度器把FRFCFS()改为FRFCFSRowHit()换行策略把Open()改为ClosedCAP(cap4)cap可调跑并看指标执行python3 examples/example_config.py从sim.stats里读row_hits/row_misses/row_conflicts/avg_read_latency。小技巧同一负载分别用 4 种组合2 调度器 × 2 行策略各跑一遍对比row_conflicts与avg_read_latency往往就能看出哪个组合更贴合你的访问模式。如何验证你的选择关键指标与测试sim.stats中memory_system → controller下有几个最直接的计数器指标含义row_hits/row_misses/row_conflicts三类行访问的总数avg_read_latency平均读延迟控制器周期read_queue_len_avg/write_queue_len_avg读/写队列平均占用想从命令序列层面确认行为是否符合预期仓库的controller_scheduling测试套件就是范本见 test_controller_genericddr.pytest_frfcfs_prefers_ready_request_over_older_blocked_request验证 FRFCFS 优先发就绪请求test_frfcfs_rowhit_keeps_same_bank_row_hits_before_conflict_close验证 FRFCFS-RowHit 在关行前保住同行命中test_closedcap_upgrades_second_access_to_rda验证 ClosedCAP 在cap1时把第二次访问升级为RDA。运行方式PYTHONPATHpython pytest tests/controller_scheduling -q选型速查清单追求基线、通用评估→FRFCFSOpen官方示例默认最简单。高局部性、想压 RowHit 延迟→FRFCFS-RowHitOpen。访问跳跃、想控制能耗与 RowConflict→FRFCFS-RowHitClosedCAP(cap4)并可按负载调小/调大cap。想确认行为正确→ 用controller_scheduling套件断言命令序列与gap。小结在 Ramulator 2.1 里DRAM 调度策略 调度器行策略的组合。FRFCFS简单稳健FRFCFS-RowHit在行局部性上更聪明Open释放行命中之利ClosedCAP用列计数上限在延迟与能耗间找平衡。读懂 generic_ddr_controller.cpp 的 tick 流程与上述几个计数器你就能为自己的工作负载挑出最合适的组合并用controller_scheduling测试快速验证它确实按预期工作。赞分享【免费下载链接】ramulator2Ramulator 2.0 is a modern, modular, extensible, and fast cycle-accurate DRAM simulator. It provides support for agile implementation and evaluation of new memory system designs (e.g., new DRAM standards, emerging RowHammer mitigation techniques). Described in our IEEE CAL 2023 paper: https://arxiv.org/pdf/2308.11030.项目地址https://gitcode.com/gh_mirrors/ram/ramulator2点击查看免费下载相关推荐Linux内核实时调度如何选择最适合你的调度策略Linux内核实时调度如何选择最适合你的调度策略 在嵌入式开发、工业自动化等高实时性要求的场景中你是否经常遇到任务响应延迟、系统卡顿的问题Linux文档教程操作系统知识库Xilem与Masonry深度对比如何选择适合你的UI框架Xilem与Masonry深度对比如何选择适合你的UI框架 Xilem和Masonry是Rust生态中两个重要的UI框架它们共同构成了一个完整的GUI解决方前端桌面应用跨平台Rhino与Nashorn对比如何选择适合的JavaScript引擎Rhino与Nashorn对比如何选择适合的JavaScript引擎 在Java生态系统中选择正确的JavaScript引擎对于项目成功至关重要。Rhino语言运行时编程语言解释器上一篇终极指南Karakeep移动端开发如何利用React Native与Expo打造全平台书签应用下一篇SVGR性能监控设置跟踪转换效率的方法创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
RELATED

相关推荐

Java 基础入门(五):控制台输入输出与方法详解

Java 基础入门(五):控制台输入输出与方法详解

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📅 2026/11/2 1:22:19
从社区参与到源码贡献:Kornia 贡献指南与开发环境实战

从社区参与到源码贡献:Kornia 贡献指南与开发环境实战

计算机视觉深度学习图像处理 【免费下载链接】kornia 🐍 Geometric Computer Vision Library for Spatial AI 项目地址: https://gitcode.com/GitHub_Trending/ko/kornia 点击查看 免费下载 导读 Kornia 是一个基于 PyTorch 的可微分计算机视觉库&…

📅 2026/11/2 1:22:19
Aurelio 储蓄目标所需回报率:从公式、二分求解到 17.5% 的实战解读

Aurelio 储蓄目标所需回报率:从公式、二分求解到 17.5% 的实战解读

【免费下载链接】aurelio-finance Open-source personal finance app with an AI financial advisor: track your net worth, investments, ETFs, cash and debts on your own computer. 项目地址: https://gitcode.com/gh_mirrors/au/aurelio-finance 点击查看 免费…

📅 2026/11/2 1:22:19
MORE NEWS

更多资讯

📰

深度学习调参方法论:学习率扫描、batch size与loss排查

深度学习调参经验分享这个话题,我憋了很久。带过几个项目、被loss曲线折磨过无数个通宵之后,我最常被问到的问题不是“这个网络结构怎么设计的”,而是“为什么我的loss不降”“学习率到底设多少”“batch size开多大合适”。这类问题没有标准…

📰

文档预览站点抓取实战:从图片流到PDF合成与文本提取

1. 先把需求和边界讲清楚标题里说的“爬取文档分享站点的文档”,实际操作起来远不是requests.get()一把梭那么简单。我这两年接过好几个类似的小需求:有的是同行想把公开分享的行业报告归档做知识库,有的是做内容审核的同事要批量核对自家上传…

📰

运维转网安:职业转型路径与实战指南

1. 为什么运维转网安是当前职业发展的黄金选择运维工程师转型网络安全领域,已经成为近年来IT职业发展中最具性价比的路径之一。我身边至少有十几位运维同事在过去两年完成了这个转型,薪资涨幅普遍在30-50%之间。这种转型之所以如此热门,核心在…

📰

Android Studio 集成 OpenCV 的步骤与常见报错

问题现象 把计算机视觉库接入安卓工程,是很多人第一次接触原生库集成的场景,报错也五花八门: 照着教程导入模块,构建时直接报「找不到名为 default 的配置」; 模块导进来了,主工程却引用不到里面的类; 编译通过、安装成功,一运行就报找不到原生库; 加载库时写的名字在…

📰

rc.local配IP总翻车?银河麒麟服务器版nmcli持久化配置指南

1. 开机自启配IP这件事,为什么总在rc.local里翻车服务器交付上线前的最后一公里,往往不是装系统、不是分区、也不是调内核参数,而是把网卡IP配好、确认重启后还能自己起来。这个环节看起来最简单,实际上最容易在半年后的一次机房断…

📰

VGG19图像分类迁移学习实验全流程与避坑指南

简介:智能计算系统实验4-1配套的VGG19图像分类实践包,面向正在学习深度学习模型部署与推理优化的学生和开发者。内容围绕经典19层卷积网络展开:从连续33卷积与池化逐层提取特征,到全连接层与Softmax输出类别概率;同时给…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬