免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1227 | 回复: 0
打印 上一主题 下一主题

NePSim2的安装与使用 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-10-14 16:05 |只看该作者 |倒序浏览

作者:ggse
非商业转载请注明作者及文章出处ggse.cublog.cn
商业转载请联系作者本人,谢谢!
下文主要是翻译Dr_ Yan Luo`s Wiki  NePSim - Documentation,如有侵权或错误之处,请不吝指出。
-----------------------------------------------------------------------------------
NePSim2能够模拟Intel's IXP2400/2800体系结构,对于研究高级网络处理器的体系结构很有帮助。

NePSim2是在RedHat 9.0或Fedora Core 1使用gcc3.4.4开发和测试的,有简单的基于GTK+-2.0的图形界面(默认不开起图形界面)。
安装过程如下:
安装RedHat 9.0或Fedora Core 1,及自带的gcc开发工具

http://www.cs.ucr.edu/~yluo/nepsim
下载nepsim2.tgz
tar nepsim2.tgz
cd nepsim2
vi Makefile    //将第70行的改为 TOPDIR= ,如在root解压可改为TOPDIR=/root/nepsim2
make           //暂时忽略warning
NePSim2有c源代码、Perl脚本及必要的makefile组成:
../nepsim2/ bus.[ch] buses的定义与实现,如数据线
            cmdfifo.[ch] command FIFO的定义与实现,command FIFO将命令从流水传给其他单元(如SRAM控制器)
            constant.h opcode(操作码?)及其他常量(为NePSim2定义的), 由m2bin2.pl自动生成
            device.[ch] 网络接口模拟
            dlite.[ch] a lite debugger, ported from SimpleScalar
            dram.[ch] definition and implementation of SDRAM functions(enqueue, service, dequeue etc)
            eval.[ch] expression evluator, ported from SimpleScalar
            event.[ch] event manager for discrete event simulation
            fbi.h defines FBI units in IXP1200, becoming obsolete
            gui.[ch] basic gui interface based on GTK+
            gui_main.c main file for GUI based simulation, not used by default
            host.h host related typedefs
            libpower.a archive of power related functions, created by make
            m2bin2.pl Perl script translating intermediate file (*.m) to binary encoded input files (*.bin)
            mac.[ch] simuation of MAC layer buffer, becoming obsolete
            misc.[ch] miscellenous functions (debug, warning etc)
            msf.[ch] simulation of media switching fabric
            nepsim.[ch] main simulator framework
            op2str.c opcode to string mapping, generated by m2bin2.pl
            options.[ch] options routines (add, register etc) from SimpleScalar
            parser2.pl Perl script to parse *.list file to intermediate file *.m
            pipeline.c six stage pipeline
            range.[ch] program execution range, becoming obsolete
            shac.[ch] defines SHaC unit, including CSRs, scratchpad, hash etc
            sram.[ch] SRAM的定义与实现
            stats.[ch] statistics package, ported from SimpleScalar
            version.h 发布版本
            docs/ NePSim2DesignStatus.pdf NePSim2的当前状态(NePSim2还没有完全开发完毕)
                  README_NePSim1.txt
                  README_NePSim2.txt
                  usermanual.pdf NePSim的用户手册,不是NePSim2的,是版本1的
           power/  power related functions, please see Xcacti, Orion, Wattch simulator documents
           sample/ microC 用microC编写的测试案例
                   microcode 用microcode编写的测试案例
           testcases/ crypto cryptographic benchmarks
                      microbench simple benchmarks, for testing purposes
使用方法:
1、初次用户:
你可以使用nepsim2模拟 基准程序在IXP2400模拟器的执行 。最简单的方法就是运行已经建好的基准程序,下面是一个例子:
cd nepsim2/sample/microcode
make test
会出现很多warning,可以忽略。模拟结束后会出现以下统计信息
sim: ** simulation statistics **
sim_cycle                       101 # total number of simulated cycles
sim_time                     0.1683 # simulated absolute time in microseconds
sim_num_insn                     83 # total number of instructions committed
num_insn_aborted                  0 # total number of instructions aborted
sim_pkts                          0 # total number of packets taken by the system
sram_reads                        0 # total number of SRAM read instructions
sram_reads_words              55744 # total number of words read from SRAM
同样,你可以进入其他目录,进行一些其他的模拟。

2、中级用户:
大多数用户都不满足于仅仅是运行现成的基准程序,而希望做一些sophisticated的事情。让我们先看看测试案例或基准程序在nepsim2是怎么被预处理和执行的。
以下是sample/microcode/目录下的Makefile文件:

TOPDIR=../..
NEPSIM=$(TOPDIR)/nepsim2
NEPSIM_GUI=$(TOPDIR)/gui_nepsim2
PARSER=$(TOPDIR)/parser2.pl
M2BIN=$(TOPDIR)/m2bin2.pl

tc=alubench_dep
tcbin=$(tc).bin

%.m: %.list
        $(PARSER) $^ > $@

%.bin: %.m
        $(M2BIN) $^ > $@

test: $(tcbin)
        echo $(tcbin)
        $(NEPSIM) -max:cycle 100 -me0 $(tcbin)

clean:
        rm -f *.bin *.m *.initm *.initbin *~

在输入make test时,以下命令在nepsim2中被触发:
../../nepsim2 -max:cycle 100 -me0 alubench_dep.bin
上面这条命令有两个参数-max:cycle,-me0
-max:cycle 用于指定模拟时间为多少个周期,如果不指定,模拟器将不停执行
-me0    用于指定16进制编码的image文件(在本命令中是 alubench_dep.bin),加载到microengine 0。NePSim2以IXP2400/2800为模型,因此相应的可以分别加载16个image文件到16个ME中去。

那么alubench_dep.bin是从哪里获取的呢?
它是从alubench_dep.list产生的。*.list文件是由Intel SDK生成的。*.list先由parser2.pl和m2bin2.pl脚本预处理,然后Makefile发出以下指令将alubench_dep.list转化为alubench_dep.m,然后变成alubench_dep.bin
../../parser2pl alubench_dep.list > alubench_dep.m
../../m2bin2.pl alubench_dep.m > alubench_dep.bin

处理以上两个参数外,你还可以修改其他参数来定制模拟,所有的参数都在模拟器输出前被打印出来了。各个参数的具体意义和用法可参考
http://faculty.uml.edu/yluo/pmwiki/index.php?n=NePSim.Parameters
(我今天2006.10.15看的时候就四个字母“TODO”。。。)
3、高级用户
高级用户愿意做各种具有创造性的关于NP设计的研究工作,如:引入/评估新的基准程序、添加定制的性能观测器、设计新的指令和功能部件等等。
以下任务是高级用户经常问到的典型问题
1、引入新的基准程序
2、添加新的统计数据计数器
3、添加新指令
4、添加新的功能部件

1、引入新的基准程序:
运行已有的基准程序令人觉得没意思。试试新的不同的基准程序比较有意思,但是,你必须知道引入新的基准程序需要完成以下几个不平凡的步骤:
    第一步也许是最具有挑战性的一步。NePSim2能用的基准程序必须用Intel microc或microcode编写,只有那样才能被Intel SDK编译。其中最重要的一条原因是Intel SDK是目前唯一能够理解Intel IXA microengine指令的编译器,而Intel SDK只能编译由microc或microcode编写的程序。NePSim2不含有一个可以解释C/C++/Java程序,模拟器依赖于Intel SDK编译生成的*.list文件。因此,用户应该至少知道IXP microc或microcode中的一种,这样才能重写一个基准程序。令人鼓舞的是,在Intel IXA网站上有很好的资料让你熟悉。以我们的经验来看,一个有经验的c程序员,用一两天时间就可以捡起microc。
    第二步是在SDK中生成.list文件,这一步很简单,just check a check-box in Project->Settings under Assembler tab. A .list file will be created for each microengine that you ask the SDK to load code into (also set in "Settings"). Copy all *.list file into a new directory you create in NePSim source tree.
    第三步是定制Makefile。你可以从一个基准程序目录拷贝一个Makefile然后修改它,这样所有必需的*.bin文件都能生成。当然,有些模拟参数需要被修改,以替代默认值。
    第四步是创建*.bin文件。这一步是为了确保*.list是正确的并且*.bin文件可以有Perl脚本无误的生成。理想情况是,parser2.pl和m2bin2.pl将创建两个或四个文件如下:
parser2.pl newbench.list > newbench.m
在某些情况下,一个newbench.initm文件将会被创建用于初始化ME的计数器,在模拟之前。
m2bin2.pl newbench.m > newbench.bin
如果有newbench.initm的话,newbench.initbin将会被创建。
有些时候,第四步需要一些而外的努力,由于这两个脚本的不成熟(parser2.pl, m2bin2.pl)。这两个脚本并没有实现所有MEv2的指令集。如果你的新基准程序用了一条没有实现的指令,脚本将弹出出错提示。请参考NePSim2 ISA Status获取实现的指令列表。
最后,一旦你获得了*.bin文件,你就可以将它加载到相应的ME中,运行nepsim2了。

如果在导入基准程序时有问题,你可以咨询Dr. Yan Luo(
yan_luo@uml.edu
),请以NePSim2作为标题,说出你的问题细节。
2、添加新的统计数据计数器
    你可以任意的添加统计数据计数器去捕获感兴趣的事件。添加新的计数器比较简单:声明一个新的计数器,注册计数器,更新计数器,在适当的位置。以一个已有的计数器sram_reads作为例子。
    首先,你需要在a.h文件里定义计数器的类型,在a.c文件里声明实例。测试点定义的公共地址在nepsim.h文件。nepsim.h文件的124行有
extern counter_t sram_reads;
然后,这个计数器应该在仅有的唯一的.c文件中被声明。在nepsim.c的120行,
    其次,你需要注册新的计数器这样当模拟结束时观测值可以被显示出来。你可以在nepsim.c中注册计数器sram_reads,如下所示(1922行)
  stat_reg_counter(sdb, "sram_reads",
                   "total number of SRAM read instructions",
                   &sram_reads, sram_reads, NULL);
    最后,你需要在源代码适当的位置增加计数器的值在捕获了感兴趣的事件时。例如,sram_reads在sram.c的790行被增加了
              sram_reads++;
3、添加新指令
    首先,让我们来了解下指令在nepsim2是怎么样被识别和执行的。我们还是通过一个例子来解释这一现象。开始,parser2.pl脚本分析原始*.list文件,将IXA microcode指令转换为nepsim内部格式。
在文件alubench_dep.list的103行,有
alu[l0001!i, l0001!i, +, 1]
parser2.pl将上面一行翻译为
ALU_ADD B00     B00     1       NA      NA      NA      NA
这样的转换包含计数器配置检查和内部指令符号检查,为m2bin2.pl准备a.m文件。
指令的16进制的操作码是由m2bin2.pl生成的,这个过程依赖于一个预先定义好的内部表,将一个内部指令符号(如ALU_ADD)映射为它的操作码(0x1)。因此那条指令的16进制的编码生成后如下:
1     30000000      30000000      10000001      0     0     0     0     0     0     0
这些编码后的指令装载到nepsim2中去,可以极大的减少由于在模拟过程中需要解释,而引起的分析/解码工作负载。
当nepsim2开始运行了,基准程序的指令被读到ME控制存储器中。指令执行的模拟在每个流水层自动的开始。对于AlU_ADD,最重要的阶段是p5(回写),p4(执行),p2(读操作数)。你需要决定你的新指令在每个流水层干什么。
    总之,为了增加新指令,你需要修改parser2.pl和m2bin2.pl以增加新的操作码,同时至少还需要修改pipeline.c来处理新的指令。(如果你没有阅读过nepsim的源代码,在给你讲更多的细节是没有意义的。用户应当在添加任何扩展前去读懂脚本和pipeline.c)
警告:直接在*.bin中添加一条空的?新的指令是很危险的,因为这样可能会搅乱分支指令?(如果有的话)。分支指令的目标地址由parser2.pl和m2bin2.pl计算和生成的。添加一条新指令可能导致目标地址指向一个错误的地址。
4、添加新的功能部件
    添加新的功能部件与添加新的指令有着直接的联系。要合集成一个新的功能单元(比如说一个新的加密单元),你必须添加一个新的指令并在流水阶段(通常是p4和p5)触发这个功能单元。

正在开发和将要开发的:
完整的指令集complete the instruction set
ME间信号
一个完整的多ME应用程序,如转发IP包
大范围测试
一个更好的(用java?)



本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/21953/showart_184633.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP