1211-

12月11日

1. fs.py代码阅读

gem5通过python内置的optparse模块添加命令行选项

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# 实例化命令行模块
parser = optparse.OptionParser
# 通过调用configs/common/Options.py模块中的方法添加相应命令行选项
Options.addCommonOptions(parser) # 添加常用参数。如CPU类型、CPU时钟频率等
Options.addFSOptions(parser) # 添加FS模拟参数。如使用的内核、镜像文件等

# 如果命令行参数含有'--ruby',则增加ruby需要的命令行选项
if '--ruby' in sys.argv:
Ruby.define_options(parser)

# 解析参数
# parse_args()返回两个值:
# options, 这是一个对象(optpars.Values),保存有命令行参数值。只要知道命令行参数名,如file,就可以访问其对应的值:options.file。
# args,一个由positional arguments组成的列表。
(options, args) = parser.parse_args()

if args:
print("Error: script doesn't take any positional arguments")
sys.exit(1)

args 是一个包含所有命令行参数值的命名空间对象。每个命令行参数都成为这个对象的一个属性,可以通过 args.参数名 的形式访问。
在 gem5 的上下文中,这意味着 args 包含了模拟器运行所需的所有配置信息,如是否启用 Ruby 模拟、文件系统的配置等。

以上代码定义了argparse解析器并添加了命令行参数。然后它解析了这些参数,并基于这些参数来设置CPU类和内存类。之后,它构建测试系统,可能还会构建驱动系统,最后创建一个root根对象来启动模拟。

在gem5中,root是整个模拟环境的最顶层容器,它通常包含了模拟的计算机系统(如处理器、内存、总线等)以及与这些组件连接的所有设备和系统的配置。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
np = options.num_cpus

test_sys = build_test_system(np)
if len(bm) == 2:
drive_sys = build_drive_system(np)
root = makeDualRoot(True, test_sys, drive_sys, options.etherdump)
elif len(bm) == 1 and options.dist:
# This system is part of a dist-gem5 simulation
root = makeDistRoot(test_sys,
options.dist_rank,
options.dist_size,
options.dist_server_name,
options.dist_server_port,
options.dist_sync_repeat,
options.dist_sync_start,
options.ethernet_linkspeed,
options.ethernet_linkdelay,
options.etherdump);
elif len(bm) == 1:
root = Root(full_system=True, system=test_sys)
else:
print("Error I don't know how to create more than 2 systems.")
sys.exit(1)

在这个脚本中,root对象是在不同条件下被创建的:
如果模拟的是一个双系统(dual系统),那么root会通过调用makeDualRoot()函数被创建,这意味着会有两个系统(test_sys和drive_sys)并行运行在模拟中。
如果启用了分布式模拟(dist模式),则通过调用makeDistRoot()函数创建root,此时root代表的系统会作为分布式模拟中的一个节点。
如果模拟的是单个系统,那么root会简单地通过Root(full_system=True, system=test_sys)创建,其中test_sys是通过build_test_system()函数构建的测试系统。

https://blog.csdn.net/qq_34898487/article/details/134318122