赞
踩
翻译自官网(https://www.gem5.org/documentation/learning_gem5/part1/building/)
gem5的设计考虑到了Linux环境。我们定期在 Ubuntu 18.04、Ubuntu 20.04 和 Ubuntu 22.04 上进行测试,以确保 gem5 在这些环境中运行良好。不过,如果安装了正确的依赖项,任何基于Linux的操作系统都能正常运行。我们确保 gem5 可使用 gcc 和 clang 进行编译(有关编译器版本信息,请参阅下面的 “依赖关系”)。
使用 clang 编译器编译时,Mac OS 在安装了所有其他依赖项后应能正常运行。不过,目前我们并未在 Mac OS 上正式测试我们的构建版本。因此,我们无法保证希望在Mac OS上编译和运行gem5的用户能获得与在基于Linux的系统上相同的稳定性。在gem5的后续版本中,我们希望通过改进测试来更有效地支持Mac OS。
从gem5 21.0开始,我们仅支持在Python 3.6以上版本中编译和运行gem5。 gem5 20.0是我们最后一个支持Python 2的gem5版本。
如果无法在合适的操作系统/环境中运行 gem5,我们提供了预先准备好的 Docker 镜像,可用于编译和运行 gem5。有关详细信息,请参阅下面的 Docker 部分。
如果在 Ubuntu 22.04 或相关 Linux 发行版上编译 gem5,可以使用 APT 安装所有这些依赖项:
sudo apt install build-essential git m4 scons zlib1g zlib1g-dev \
libprotobuf-dev protobuf-compiler libprotoc-dev libgoogle-perftools-dev \
python3-dev libboost-all-dev pkg-config
对于正在努力建立环境以构建和运行 gem5 的用户,我们提供了以下 Docker 映像:
包含所有可选依赖项的Ubuntu 22.04:gcr.io/gem5-test/ubuntu-22.04_all-dependencies:v22-1(源Dockerfile)。
Ubuntu 22.04(包含最少依赖项):gcr.io/gem5-test/ubuntu-22.04_min-dependencies:v22-1(源 Dockerfile)。
Ubuntu 20.04(包含所有可选依赖项):gcr.io/gem5-test/ubuntu-20.04_all-dependencies:v22-1(源 Dockerfile)。
Ubuntu 18.04(包含所有可选依赖项):gcr.io/gem5-test/ubuntu-18.04_all-dependencies:v22-1(源 Dockerfile)。
docker pull
例如,Ubuntu 20.04 包含所有可选的依赖项:
docker pull gcr.io/gem5-test/ubuntu-20.04_all-dependencies:v22-1
那么,要在这种环境中工作,我们建议使用以下方法:
docker run -u U I D : UID: UID:GID --volume :/gem5 --rm -it
其中,<gem5 目录> 是文件系统中 gem5 的完整路径, 是拉取的映像(例如,gcr.io/gem5-test/ubuntu-22.04_all-dependencies:v22-1)。
在此环境下,你将能在 /gem5 目录中构建并运行 gem5。
git clone https://github.com/gem5/gem5
gem5 的构建系统基于 SCons,这是一个用 Python 实现的开源构建系统。有关 scons 的更多信息,请访问 http://www.scons.org。主 scons 文件名为 SConstruct,位于源代码树的根部。附加的 scons 文件被命名为 SConscript,遍布整个源代码树,通常靠近与之关联的文件。
在 gem5 目录的根目录中,gem5 可以使用 SCons 文件构建:
scons build/{ISA}/gem5.{variant} -j {cpus}
其中 {ISA} 是目标(客户)指令集架构,而 {variant} 则指定编译设置。在大多数情况下,opt 是一个很好的编译目标。-j标志是可选的,允许编译并行化,{cpus}指定线程数。在某些系统上,从头开始的单线程编译可能需要 2 个小时。因此,我们强烈建议尽可能分配更多线程。
有效的 ISA 有
有效的构建变量有
scons build/X86/gem5.opt -j 4
此外,用户还可使用 "gprof "和 "pperf "构建选项来启用剖析功能:
编译完成后,可以使用
./build/{ISA}/gem5.{variant} [gem5 options] {simulation script} [script options]
使用 --help 标志运行将显示所有可用选项:
使用方法 ===== gem5.opt [gem5 选项] script.py [脚本选项] gem5 是受版权保护的软件;请使用 --copyright 选项了解详情。 选项 ======= --version 显示程序的版本号并退出 --help、-h 显示帮助信息并退出 --build-info, -B 显示构建信息 -copyright, -C 显示完整的版权信息 --readme, -R 显示自述文件 --outdir=DIR, -d DIR 将输出目录设置为 DIR [默认:m5out] --redirect-stdout, -r 重定向 stdout(和 stderr,不含 -e)到文件 --redirect-stderr, -e 将 stderr 重定向到文件 --stdout-file=FILE-r重定向的文件名 [默认值:simout] --stderr-file=FILE-e 重定向的文件名 [默认值:simerr] --监听器模式={开,关,自动} 端口(如 gdb)监听模式(auto: 如果 默认值:auto --只接收回传连接 端口监听器只接受通过 环回设备上的连接 --交互式, -i 运行脚本后调用交互式解释器 脚本后调用交互式解释器 --pdb 在运行脚本前调用 python 调试器 --path=PATH[:PATH], -p PATH[:PATH] 调用 脚本 --quiet,-q 降低冗余度 --verbose, -v 增加冗长度 统计选项 ------------------ --stats-file=FILE 设置统计输出文件 [默认: stats.txt] --stats-help 显示可用统计访问者的文档 配置选项 --------------------- --dump-config=FILE转储配置输出文件 [默认值:config.ini] --json-config=FILE 创建配置的 JSON 输出 [默认值: config.json] --dot-config=FILE --dot-config=FILE创建配置的 DOT 和 pdf 输出文件 [默认值:config.dot] --dot-dvfs-config=FILE 创建 DVFS 配置的 DOT 和 pdf 输出 [默认值:无] 调试选项 ----------------- --debug-break=TICK[,TICK](调试断点 在 TICK(s)处创建断点(如果未连接调试器,则杀死进程 如果没有连接调试器,则会杀死进程) --debug-help 打印调试标志帮助 --debug-flags=FLAG[,FLAG](调试标记 设置调试输出的标志(-FLAG 关闭一个 标志)。 --debug-start=TICK在 TICK 开始调试输出 --debug-end=TICK在TICK处结束调试输出 --debug-file=FILE设置调试输出文件[默认:cout] --debug-ignore=EXPR忽略 EXPR 模拟对象 --远程 gdb-port=REMOTE_GDB_PORT 远程 gdb 基本端口(设为 0 则禁止监听) 帮助选项 ------------ --列出所有内置模拟对象及其参数和默认值。 值
EXTRAS scons 变量可用于在 gem5 中构建额外的源文件目录,方法是将其设置为以冒号分隔的额外目录路径列表。EXTRAS 是在 gem5 代码基础之上构建的一种便捷方法,不会将你的新源代码与上游源代码混淆。这样,你就可以独立于主代码库管理你的新代码。
让我们从构建一个基本的 x86 系统开始。目前,必须为要模拟的每个 ISA 分别编译 gem5。此外,如果使用 ruby-intro-chapter,还必须为每种高速缓存一致性协议单独编译。
要编译 gem5,我们将使用 SCons。SCons 使用 SConstruct 文件(gem5/SConstruct)来设置一些变量,然后使用每个子目录中的 SConscript 文件来查找和编译所有 gem5 源代码。
首次执行时,SCons 会自动创建一个 gem5/build 目录。在这个目录中,你会找到由 SCons 和编译器等生成的文件。你用来编译 gem5 的每一组选项(ISA 和高速缓存一致性协议)都会有一个单独的目录。
build_opts 目录中有许多默认编译选项。这些文件指定了初始编译 gem5 时传递给 SCons 的参数。我们将使用 X86 默认值,并指定要编译所有的 CPU 型号。你可以查看 build_opts/X86 文件,查看 SCons 选项的默认值。你也可以在命令行中指定这些选项,以覆盖任何默认值。
python3
which scons
build/X86/gem5.opt -j9
gem5 中的 SCons 脚本目前有 5 种不同的二进制文件可以为 gem5 构建:调试、选项和快速。这些名称大多不言自明,但下面会详细说明。
不带优化和调试符号。在使用调试器调试时,如果需要查看的变量在 gem5 的 opt 版本中已被优化,则此二进制文件非常有用。与其他二进制文件相比,使用 debug 运行速度较慢。
此二进制文件在构建时开启了大部分优化(如 -O3),但包含调试符号。此二进制文件比 debug 快得多,但仍包含足够的调试信息,能够调试大多数问题。
在生成时进行了所有优化(包括在支持的平台上进行链接时优化),不包含调试符号。fast 是性能最高的二进制文件,比 opt 小得多。不过,只有当你认为代码不太可能存在重大错误时,才适合使用 fast。
传给 SCons 的主要参数是你要编译的内容,即 build/X86/gem5.opt。在本例中,我们要编译 gem5.opt(带有调试符号的优化二进制文件)。我们要在 build/X86 目录中构建 gem5。由于该目录目前不存在,SCons 将在 build_opts 中查找 X86 的默认参数。(注:我在这里使用 -j9 在我的机器上的 8 个内核中的 9 个内核上执行编译。你应该为你的机器选择一个合适的数字,通常是内核+1)。
输出结果应如下所示:
编译完成后,你就可以在 build/X86/gem5.opt 目录下获得一个可运行的 gem5 可执行文件。编译可能需要很长时间,通常需要 15 分钟或更长时间,尤其是在 AFS 或 NFS 等远程文件系统上编译时。
更新环境变量以指向正确的 gcc 版本,或安装更新版本的 gcc。请参阅 "构建要求 "部分。(building-requirements-section)
如果您使用的是非默认版本的 Python(例如,默认版本是 2.5,而您使用的是 3.6 版),那么在使用 SCons 生成 gem5 时可能会出现问题。RHEL6 版本的 SCons 使用了 Python 的硬编码位置,导致了这个问题。在这种情况下,gem5 通常能成功编译,但可能无法运行。以下是运行 gem5 时可能看到的一个错误。
要解决这个问题,可以通过运行 python3 which scons
build/X86/gem5.opt 而不是 scons build/X86/gem5.opt 来强制 SCons 使用环境的 Python 版本。
如果未安装 M4 宏处理器,则会出现类似下面的错误:
仅安装 M4 宏包可能无法解决这个问题。您可能还需要安装所有 autoconf 工具。在 Ubuntu 上,可以使用以下命令。
sudo apt-get install automake
使用 protobuf 编译 gem5 可能会导致以下错误、
这里讨论了问题的根本原因: [https://gem5.atlassian.net/browse/GEM5-1032]。
要解决这个问题,您可能需要更新 ProtocolBuffer 的版本、
sudo apt update
sudo apt install libprotobuf-dev protobuf-compiler libgoogle-perftools-dev
之后,在重新编译 gem5 之前,你可能需要清理 gem5 的构建文件夹
python3
which scons
--clean --no-cache # cleaning the build folder
python3which scons
build/X86/gem5.opt -j 9 # re-compiling gem5
如果问题仍然存在,你可能需要在重新编译 gem5 之前完全删除 gem5 生成文件夹
rm -rf build/ # completely removing the gem5 build folder
python3which scons
build/X86/gem5.opt -j 9 # re-compiling gem5
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。