MARSSx86

MARSSx86是一个针对x86-64体系结构的全系统仿真模拟器,运行在Linux系统下。之前曾经做过内存方面的研究,用到了MARSSx86模拟器,但是国内关于MARSSx86的资料比较少,于是就想写点关于MARSSx86相关的东西。首先简单介绍了MARSSx86的相关信息,然后介绍了MARSSx86的安装方法,最后介绍了MARSSx86安装时出现的部分错误的解决办法。

关于MARSSx86

MARSSx86是一个周期精确的全系统模拟的x86-64架构工具,特别是多核的实现。MARSSx86是在纽约州立宾汉姆顿大学计算机体系结构和电源感知系统研究组开发的(CAPS研究组)。MARSSx86基于mptlsim多核处理器模拟器,内部多核模拟器基于PTLsim。

出现背景

大规模计算的需求

  1. 多核服务器,需要模拟大量的工作负载
  2. 需要模拟复杂的存储系统架构,同步的缓存
  3. 在系统组成软件的影响下模拟接口软件与协议
  4. 需要评估能源性能的权衡

移动/嵌入式空间的需求

  1. 硬件软件协同设计支持
  2. 用不同的模块支持片上系统
  3. 支持能源消耗的研究

功能特点

MARSSx86主要特点

  1. 全系统全周期精确仿真
  2. 多核x86系统;多核心和缓存模型;相干缓存和片上网络
  3. 启动模拟修改OS /图书馆/应用,支持未修改POSIX线程
  4. 自定义/专有插件接口模块,例如dramsim2(一种时钟周期精确的存储系统仿真器)等

最重要的功能

  1. 可以评估实际应用对建筑主流计算机在全系统环境
  2. 可以产生固体和可重复的结果
  3. 具有合理的精度与实际硬件
  4. 足够快来探索设计空间的合理时间

基准和应用程序

  1. SPEC CPU 2006 INT/ FP:CPU密集型基准程序
  2. PARSEC套件:新兴工作负载共享内存并行程序
  3. Lmbench和STREAM:计算系统的延迟和带宽的基准程序
  4. pgbench:PostgreSQL基准SQL数据库
  5. SPEC Jbb:基于JVM的基准
  6. CloudSuite:大数据应用,网络搜索,网络服务和流媒体等

组成部件

MARSSx86的框架包括:

  • QEMU仿真模型的CPU,硬盘,网卡,等
  • 周期精确的仿真模型的CPU,高速缓存,互连,DRAM控制器等

模块化仿真组件

在Ubuntu下安装MARSSx86

MARSSx86是基于x86 - 64计算机系统的仿真工具。MARSSx86安装在Linux环境下,基于QEMU和PTLsim两个独立的开源项目。

安装g++编译器

首先在Ubuntu终端中键入sudo apt-get install build-essential 来安装build-essential软件包,其中包含了编译c/c++所需要的软件包,安装途中输入y继续。

获得MARSSx86的源码

$ git clone git://github.com/avadhpatel/marss.git

由于我在写该文档以前已经下载好立MARSSx86的源码,所以输入下载命令得到了一个错误。

MARSSx86下载在主文件中,命名为marss,打开marss会看到

其中文本文档22/22.back/111后来生成的,暂时可以不看。可以看到配置文件,插件文件,ptlsim文件(该文件很重要,模拟时要创建machine时用到里面的文件,如下图)。qemu文件,模拟cpu和硬件。

下载磁盘映像

可以通过命令或者到网页中下载所需得磁盘映像,在模拟时用作所需的操作系统。放到主目录下。

编译MARSSx86

因为要用SCons编译工具来编译marss,所以我们要先下载SCons编译工具,利用命令下载和安装SCons编译工具

$ wget http://prdownloads.sourceforge.net/scons/scons-2.2.0.tar.gz 
$ tar zxvf scons-2.2.0.tar.gz
$ cd scons-2.2.0
$ python setup.py install --prefix=$HOME

接下来开始编译marss,打开marss源代码所在位置。命令:

$ cd $MARSS
$ scons -Q

SCons脚本文件是用来配置marss的QEMU并且编译所有得源代码。为了编译的marss有调试得支持,命令:

$ scons -Q debug=1
$ scons -Q debug=2 # 提供更多得调试信息
$ scons -Q -j 3 # 指定命令行使用的最大线程数

在默认情况下,marss编译为单核,模拟多个核,SMP或CMP配置,添加一个选项c = num_cores,命令为$ scons -Q c=8。上述命令将编译的MARSSx86模拟8核CPU。在编译时设置模拟核数的原因是因为有很多地方的源代码需要硬编码的值的核数。

运行MARSSx86

首先安装磁盘映像。我选择mini.iso(这个是Linux的磁盘映像)

$ qemu-img create -f qcow2 micro2014.qcow2 10G
$ qemu-system-x86_64 -m 4G -drive file=micro2014.qcow2,cache=unsafe -cdrom mini.iso -boot d -k en-us

使用下面的命令运行的MARSSx86

$ qemu/qemu-system-x86_64 -m 512 -hda ~/mini.iso

按下Ctrl-Alt-2,进入模拟

输入quit就退出

之后输入qemu/qemu-system-x86_64–hda/home/wsn/full_system_image/ubuntu-natty.qcow2即可进入MARSSx86

安装MARSSx86时出现的错误

ERROR: zlib check failed
Make sure you have zlib library and headers installed

解决办法:sudo apt-get install zlib1g-dev


ERROR: SDL library not found
ERROR: xll library Check failed

解决办法:sudo apt-get install libsdl1.2-dev


gnutls was not found in the pkg-config search path.
Perhaps you should add the directory containing `gnutls.pc'
to the PKG_CONFIG_PATH environment variable
No package 'gnutls' found
VNC TLS support not found, TLS support disabled

解决办法:sudo apt-get install libgtk2.0-dev libgnutls-dev libsasl2-dev python-gtk2-dev


/bin/sh: 1: curl-config: not found

解决办法:sudo apt-get install libcurl4-openssl-dev


qemu/target-i386/kvm.o: In function `kvm_arch_init_vcpu':
kvm.c:(.text+0x1e8e): undefined reference to `BIT'
kvm.c:(.text+0x1e9c): undefined reference to `BIT'
kvm.c:(.text+0x1f10): undefined reference to `BIT'
kvm.c:(.text+0x211e): undefined reference to `BIT'
kvm.c:(.text+0x217e): undefined reference to `BIT'
qemu/target-i386/kvm.o:kvm.c:(.text+0x21dd): more undefined references to `BIT' follow

参考:https://github.com/avadhpatel/marss/commit/221336091ec99e8814b791a9135ae3ea73e14746


qemu/libqemu_common.a(vnc-tls.o): In function `vnc_tls_client_setup':
vnc-tls.c:(.text+0x35f): undefined reference to `gnutls_kx_set_priority'
vnc-tls.c:(.text+0x37a): undefined reference to `gnutls_certificate_type_set_priority'
vnc-tls.c:(.text+0x395): undefined reference to `gnutls_protocol_set_priority'
collect2: error: ld returned 1 exit status
scons: *** [qemu/qemu-system-x86_64] Error 1

参考:https://gumdaeng.com/2016/05/27/20160527/

Author: Hongyi Guo
Link: https://guohongyi.com/2019/05/09/Ubuntu下安装Marss-x86/
Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.