gem5全系统模拟

陆续写些关于新书《自己动手写CPU》的博客,本篇主要是讲解 gem5运行全系统模拟

使用gem5可以启动Linux内核,称为全系统模拟,启动之后,可以通过telent连接,进行访问,但四telent有时不稳定,gem5推荐使用m5term进行连接访问,整个步骤如下:

(假设gem5文件加压缩后,位于/root/gem5/gem5-stable-50ff05095970文件夹)

(1)打开终端,进入/root/gem5/gem5-stable-50ff05095970目录,使用如下命令得到x86的二进制虚拟机

scons build/X86/gem5.opt 

时间比较长,大约半个小时。

(2)在http://www.m5sim.org/Download下载x86对应的全系统文件,我用的下载地址是http://www.m5sim.org/dist/current/x86/x86-system.tar.bz2

下载后,在/root/gem5/gem5-stable-50ff05095970目录下新建一个文件夹fs-image,将下载的x86-system.tar.bz2复制到该文件夹下,并解压缩。

(3)在http://www.m5sim.org/Download下载alpha对应的全系统文件,我用的下载地址是http://www.m5sim.org/dist/current/m5_system_2.0b3.tar.bz2

下载后,解压缩,将其中disks目录下的linux-bigswap2.img复制到/root/gem5/gem5-stable-50ff05095970/fs-image/x86-system/disks目录下。

(4)修改/root/.bashrc,其中添加环境变量,如下:

export M5_PATH=$M5_PATH:/root/gem5/gem5-stable-50ff05095970/fs-image/x86-system

使用source /root/.bashrc,使得修改后的环境变量生效。

(5)在终端中进入/root/gem5/gem5-stable-50ff05095970目录,是如如下命令可以启动x86虚拟机:

build/X86/gem5.opt configs/example/fs.py --kernel=x86_64-vmlinux-2.6.22.9 --disk-image=linux-x86.img

会出现如下启动结果:

gem5 Simulator System.  http://gem5.org
gem5 is copyrighted software; use the --copyright option for details.

gem5 compiled Jan 26 2015 13:54:19
gem5 started Jan 26 2015 18:19:14
gem5 executing on localhost.localdomain
command line: build/X86/gem5.opt configs/example/fs.py --kernel=x86_64-vmlinux-2.6.22.9 --disk-image=linux-x86.img
Global frequency set at 1000000000000 ticks per second
info: kernel located at: /root/gem5/gem5-stable-50ff05095970/fs-image/x86-system/binaries/x86_64-vmlinux-2.6.22.9
      0: rtc: Real-time clock set to Sun Jan  1 00:00:00 2012
Listening for com_1 connection on port 3456
warn: Reading current count from inactive timer.
0: system.remote_gdb.listener: listening for remote gdb #0 on port 7000
**** REAL SIMULATION ****
info: Entering event queue @ 0.  Starting simulation...
warn: Don't know what interrupt to clear for console.
53268325000: system.pc.com_1.terminal: attach terminal 0
warn: x86 cpuid: unknown family 0x8086

其中提示的监听端口是3456,这也是默认的监听端口。

接下来可以编译m5term,以便连接到上面的监听端口,m5term的源码在gem5源代码的util/term目录下,进入该目录,输入熟悉命令进行编译:

        % cd m5/util/term
	% make
	gcc  -o m5term term.c
	% make install
	sudo install -o root -m 555 m5term /usr/local/bin

然后使用如下命令连接虚拟机:

./m5term 127.0.0.1 3456

会出现如下启动文字:

[[email protected] term]# ./m5term 127.0.0.1 3456
==== m5 slave terminal: Terminal 0 ====
Linux version 2.6.22.9 ([email protected]) (gcc version 4.1.2 (Gentoo 4.1.2)) #2 Mon Oct 8 13:13:00 PDT 2007
Command line: earlyprintk=ttyS0 console=ttyS0 lpj=7999923 root=/dev/hda1
BIOS-provided physical RAM map:
 BIOS-e820: 0000000000000000 - 000000000009fc00 (usable)
 BIOS-e820: 000000000009fc00 - 0000000000100000 (reserved)
 BIOS-e820: 0000000000100000 - 0000000020000000 (usable)
 BIOS-e820: 00000000ffff0000 - 0000000100000000 (reserved)
end_pfn_map = 1048576
kernel direct mapping tables up to 100000000 @ 8000-d000
DMI 2.5 present.
Zone PFN ranges:
  DMA             0 ->     4096
  DMA32        4096 ->  1048576
  Normal    1048576 ->  1048576
early_node_map[2] active PFN ranges
    0:        0 ->      159
    0:      256 ->   131072
Intel MultiProcessor Specification v1.4
MPTABLE: OEM ID:  MPTABLE: Product ID:  MPTABLE: APIC at: 0xFEE00000
Processor #0 (Bootup-CPU)
I/O APIC #1 at 0xFEC00000.
Setting APIC routing to flat
Processors: 1
swsusp: Registered nosave memory region: 000000000009f000 - 00000000000a0000
swsusp: Registered nosave memory region: 00000000000a0000 - 0000000000100000
Allocating PCI resources starting at 30000000 (gap: 20000000:dfff0000)
Built 1 zonelists.  Total pages: 127572
Kernel command line: earlyprintk=ttyS0 console=ttyS0 lpj=7999923 root=/dev/hda1
Initializing CPU#0
PID hash table entries: 2048 (order: 11, 16384 bytes)
time.c: Detected 1999.998 MHz processor.
Console: colour dummy device 80x25
console handover: boot [earlyser0] -> real [ttyS0]
Dentry cache hash table entries: 65536 (order: 7, 524288 bytes)
Inode-cache hash table entries: 32768 (order: 6, 262144 bytes)
Checking aperture...
Memory: 509256k/524288k available (3742k kernel code, 14436k reserved, 1874k data, 232k init)
Calibrating delay loop (skipped)... 3999.96 BogoMIPS preset
Mount-cache hash table entries: 256
CPU: L1 I Cache: 64K (64 bytes/line), D cache 64K (64 bytes/line)
CPU: L2 Cache: 1024K (64 bytes/line)
CPU: Fake M5 x86_64 CPU stepping 01
ACPI: Core revision 20070126
ACPI Exception (tbxface-0618): AE_NO_ACPI_TABLES, While loading namespace from ACPI tables [20070126]
ACPI: Unable to load the System Description Tables
Using local APIC timer interrupts.
result 7812510
Detected 7.812 MHz APIC timer.
NET: Registered protocol family 16
PCI: Using configuration type 1
ACPI: Interpreter disabled.
Linux Plug and Play Support v0.97 (c) Adam Belay
pnp: PnP ACPI: disabled
SCSI subsystem initialized
usbcore: registered new interface driver usbfs
usbcore: registered new interface driver hub
usbcore: registered new device driver usb
PCI: Probing PCI hardware
PCI-GART: No AMD northbridge found.
Time: tsc clocksource has been installed.
NET: Registered protocol family 2
IP route cache hash table entries: 16384 (order: 5, 131072 bytes)
TCP established hash table entries: 65536 (order: 8, 1048576 bytes)
TCP bind hash table entries: 65536 (order: 7, 524288 bytes)
TCP: Hash tables configured (established 65536 bind 65536)
TCP reno registered
Total HugeTLB memory allocated, 0
Installing knfsd (copyright (C) 1996 [email protected]).
io scheduler noop registered
io scheduler deadline registered
io scheduler cfq registered (default)
Real Time Clock Driver v1.12ac
Linux agpgart interface v0.102 (c) Dave Jones
Serial: 8250/16550 driver $Revision: 1.90 $ 4 ports, IRQ sharing disabled
serial8250: ttyS0 at I/O 0x3f8 (irq = 4) is a 8250
floppy0: no floppy controllers found
RAMDISK driver initialized: 16 RAM disks of 4096K size 1024 blocksize
loop: module loaded
Intel(R) PRO/1000 Network Driver - version 7.3.20-k2
Copyright (c) 1999-2006 Intel Corporation.
e100: Intel(R) PRO/100 Network Driver, 3.5.17-k4-NAPI
e100: Copyright(c) 1999-2006 Intel Corporation
forcedeth.c: Reverse Engineered nForce ethernet driver. Version 0.60.
tun: Universal TUN/TAP device driver, 1.6
tun: (C) 1999-2004 Max Krasnyansky <[email protected]>
netconsole: not configured, aborting
Uniform Multi-Platform E-IDE driver Revision: 7.00alpha2
ide: Assuming 33MHz system bus speed for PIO modes; override with idebus=xx
PIIX4: IDE controller at PCI slot 0000:00:04.0
PCI: Enabling device 0000:00:04.0 (0000 -> 0001)
PIIX4: chipset revision 0
PIIX4: not 100% native mode: will probe irqs later
    ide0: BM-DMA at 0x1000-0x1007, BIOS settings: hda:DMA, hdb:DMA
    ide1: BM-DMA at 0x1008-0x100f, BIOS settings: hdc:DMA, hdd:DMA
hda: M5 IDE Disk, ATA DISK drive
hdb: M5 IDE Disk, ATA DISK drive
ide0 at 0x1f0-0x1f7,0x3f6 on irq 14
hda: max request size: 128KiB
hda: 1048320 sectors (536 MB), CHS=1040/16/63, UDMA(33)
 hda: hda1
hdb: max request size: 128KiB
hdb: 4177920 sectors (2139 MB), CHS=4144/16/63, UDMA(33)
 hdb: unknown partition table
megaraid cmm: 2.20.2.7 (Release Date: Sun Jul 16 00:01:03 EST 2006)
megaraid: 2.20.5.1 (Release Date: Thu Nov 16 15:32:35 EST 2006)
megasas: 00.00.03.10-rc5 Thu May 17 10:09:32 PDT 2007
Fusion MPT base driver 3.04.04
Copyright (c) 1999-2007 LSI Logic Corporation
Fusion MPT SPI Host driver 3.04.04
Fusion MPT SAS Host driver 3.04.04
ieee1394: raw1394: /dev/raw1394 device initialized
USB Universal Host Controller Interface driver v3.0
usbcore: registered new interface driver usblp
drivers/usb/class/usblp.c: v0.13: USB Printer Device Class driver
Initializing USB Mass Storage driver...
usbcore: registered new interface driver usb-storage
USB Mass Storage support registered.
PNP: No PS/2 controller found. Probing ports directly.
serio: i8042 KBD port at 0x60,0x64 irq 1
serio: i8042 AUX port at 0x60,0x64 irq 12
mice: PS/2 mouse device common for all mice
input: AT Translated Set 2 keyboard as /class/input/input0
device-mapper: ioctl: 4.11.0-ioctl (2006-10-12) initialised: [email protected]
input: PS/2 Generic Mouse as /class/input/input1
usbcore: registered new interface driver usbhid
drivers/hid/usbhid/hid-core.c: v2.6:USB HID core driver
oprofile: using timer interrupt.
TCP cubic registered
NET: Registered protocol family 1
NET: Registered protocol family 10
IPv6 over IPv4 tunneling driver
NET: Registered protocol family 17
EXT2-fs warning: mounting unchecked fs, running e2fsck is recommended
VFS: Mounted root (ext2 filesystem).
Freeing unused kernel memory: 232k freed
INIT: version 2.86 booting
mounting filesystems...
loading script...
Script from M5 readfile is empty, starting bash shell...
(none) / #

最后启动shell了,可以输入命令,如下:

(none) / # ls
bin   dev  home  lib32  lost+found  opt   root  sys  usr
boot  etc  lib   lib64  mnt         proc  sbin  tmp  var
时间: 2024-08-22 20:40:15

gem5全系统模拟的相关文章

gem5-gpu 全系统模拟更改disk和Linux kernel image

修改gem5/configs/common/SysConfig.py,后面的路径为binaries和disks的目录: path = [ '/dist/m5/system', '/home/chen/gem5-gpu/system' ] 修改gem5/configs/common/Benchmarks.py,x86root-parsec.img为disks目录下的磁盘文件: elif buildEnv['TARGET_ISA'] == 'x86': return env.get('LINUX_I

6.828学习笔记2 - QEMU和x86汇编语言

6.828的工具都装好了,在正式开始实验之前,要先熟悉每个工具的使用.对于我这种小白用户,需要熟悉的更多. 1.x86汇编语言 果然,课程首先让我熟悉汇编语言,并提供了两份参考文献.虽然我对汇编语言离熟悉还差十万八千里,不过好歹是用过的.我感到如果想要保持学习的兴趣,目前采取"如无必要,绝不深究"的态度非常重要.所以对汇编语言就先这样.我把参考文献下载到本地,然后跳到下一步. 2.模拟x86 课程给出了QEMU的作用.特性和辅助调试工具(GDB),不过这些细节我现在还统统不感兴趣.程序

全功能HTRI 7.0换热器计算软件

全功能HTRI 7.0换热器计算软件 HTRI.Xchanger.suite.V6.00换热器计算    能够对圆筒炉和方箱炉的性能进行模拟计算. Xfh 使用Hottel的区域法来计算加热炉各部位的热辐射和工艺侧的性能.与内含的燃烧室和对流室模型一起能够对燃烧式加热炉进行全面的性能评价.能够对板框式换热器进行设计, 核算和模拟计算, 可以使用自定义板型或者内置的制造厂数据库内的板型:Xist 支持包括所有的标准TEMA类型的计算,并且集成了流动导致的震动计算, 管子排布工具等等.进行空冷器和经

最新破解版Coade CADWorx 2012 1CD(全模块)

Synergee gas V4.50 Schlumberger PIPESIM v2010.1 (v2009.1) Coade caesar V5.30.3 (V5.30.1,v5.2,v5.1) Coade PVelite v2012(v2010) Flaresim v3.04 SIMSCI pipephase v9.5(v9.4) SIMSCI visualflow v5.4(v5.4) SIMSCI PROII v9.1 SIMSCI inplant v4.2 Pvtsim V20.0(v

Schlumberger Petrel 2011.1 WIN7 64位 英文版全模块送4G资料

Schlumberger Petrel 2011.1 WIN7 64位 英文版全模块送4G资料Petrel是一套目前国际上占主导地位的基于Windows 平台的三维可视化建模软件,它集地震解释.构造建模.岩相建模.油藏属性建模和油藏数值模拟显示及虚拟现实于一体,为地质学家.地球物理学家,岩石物理学 家,油藏工程人员提供了一个共享的信息平台.同时,Petrel应用了各种先进技术:强大的构造建模技术.高精度的三维网格化技术.确定性和随机性沉积相 模型建立技术.科学的岩石物理建模技术.先进的三维计算机

Spt Olga v7.1(v6.3, V6.2) 全动态多相流模拟计算程序

Code V.v10.4.SP1 LightTools.v7.3 Stoner Pipeline Simulator v9.9.0(v9.7.2, v9.6, v9.5) (SPS)建立了鄯乌管道离线电子管道系统,借助Visual Basic(VB)程序开发语言,开发了具有与现场一致的SCADA系统操作界面,应用SPS软件与VB语言接口,建立了前台操作界面与后台电子管道之间的实时连接独家所有,功能完整,可远程测试.Synergee gas V4.52 储气田和集气井仿真建模和分析 Schlumb

全功能好用管道应力CAESAR II 2014 v7.00 WinXP_7-ISO 1DVD管道设计应力分析软件

全功能好用管道应力CAESAR II 2014 v7.00 WinXP_7-ISO 1DVD管道设计应力分析软件CAESAR II 2013 R1 v6.10 管道设计应力分析 新增功能CAESAR Ⅱ 2011 v5.30.2 WinXP_7-ISO 1DVD(最新完全破解版,适用于Win7 32位和64位系统.管道应力分析软件)COADE CAESAR II V5.3 2011 管道设计应力分析软件CAESAR II 2013 R1 v6.10Code V.v10.4.SP1 LightTo

gem5: stats.txt中ReadReq_accesses、ReadExReq_accesses、overall_accesses及demand_accesses间关系

参考:questions on M5 stats.difference between demand and overall accesses 当用gem5中classic memory mode运行测试集后,查看stats.txt,可看到如下结果: system.l2.ReadExReq_accesses::total 12365514 # number of ReadExReq accesses(hits+misses) system.l2.ReadReq_accesses::total 7

gem5验证cache的不同映像方式对cache命中率的影响

陆续写些关于新书<自己动手写CPU>的博客,本篇主要是讲解 gem5验证cache的不同映像方式对cache命中率的影响. cache的基本在http://blog.csdn.net/leishangwen/article/details/30049469中已有介绍,此处不再重复,只是简单介绍一下. 主要由三大部分组成: Cache存储体:存放由主存调入的指令与数据块. 地址转换部件:建立目录表以实现主存地址到缓存地址的转换. 替换部件:在缓存已满时按一定策略进行数据块替换,并修改地址转换部件