会打代码的扫地王大爷

CS Uncle


  • Home

  • Categories

  • Archives

  • Tags

  • About

体系结构建模

Posted on 2019-04-12 | In 模型检验

A Formal Approach to Secure Speculation

Transient Execution Attacks
瞬态执行攻击包含两个部分,可信(Victim)和不可信(Attacker)。两者通过一些通信接口进行互动。攻击者通过错误预测(分支预测,乱序执行)从Victim中获得机密信息。

Analysis of Secure Caches and Timing-Based Side-Channel Attacks

Side Channels Versus Covert Channels
This work focuses on side channel. However, there are also covert channels. Covert channels
use the same methods as side channels, but the attacker controls both the sender and the
receiver side of the channel. All types of side-channel attacks are equally applicable to
covert channels. But for brevity, we just use the term “side channels”

Instruction-Level Abstraction (ILA)

风行者Cache(一)

Posted on 2019-03-19 | In Computer Architecture


风行者Cache(一)之初入江湖
==================

        风,看不见摸不着,却拥有着巨大的力量。对于江湖上时常出现的不明身份的武功高手,我们通常称之为风行者

​ Cache就是其中之一,现代计算机的处理速度能达到如此之高,Cache是功不可没的。但是这么一个重要的部件,对于普通人,甚至是程序员而言,是根本感受不到它的存在的。

        高速缓存在计算机体系结构中的地位宛若风一般,程序员无法感受到它的存在,但是它却为系统新歌能的提升做出了巨大的贡献。

为什么需要Cache

        最早的计算机中并不存在Cache结构,因为当时CPU和内存的速度都不是十分快,但是随着摩尔定律的不断应验,CPU一直处于高度发展当中,反过来,内存却进步很小。它们之间的速度差距越来越大,意味着,CPU处理各种计算的时候,等待IO将数据从内存取回来的时间将显得十分明显,如图1所示,很明显,内存大大拖累了处理器的处理速度,业界常称这种速度差距为剪刀差。

图1之初入江湖/CPU-DRAM.png)


图1 CPU与内存的速度随时间的差异图

​ 为了弥补处理器和内存之间的这些差距,Cache就诞生了,Cache又叫高速缓存,顾名思义它会将内存中一些常用的数据存起来,当处理器后续访问这些数据时就可以直接返回结果,而不需要再劳神费力地去访问内存了。有人可能会说,既然Cache的速度如此之快,那为什么还需要内存呢,将缓存做的大不就可以了吗?理论上确实如此,但是Cache的成本实在太高,如果完全得将Cache做的像内存那样大,恐怕计算机会十分贵。这一点参考前些年固态硬盘和机械硬盘的价格就可以理解了,固态硬盘虽然比机械硬盘快很多,但是固态硬盘又贵又小,满足不了日常需求,计算机的价格却因此大大提升。关于Cache和内存为什么会有速度差距,请参看另一篇文章,DRAM&SRAM之争。

Cache的三种结构

直接映射

全相连

组相连

替换法则

时间空间局部性原理

举个循环的例子

举个数组的例子

替换法则

LTL OR CTL

Posted on 2019-03-19 | In Formal Method


LTL OR CTL
==================

有个很大的争论 LTL更容易刻画安全属性,但是CTL更容易验证,因此哪个更合适呢?

  • CTL限制了自己的表达能力和很多重要的行为,例如强fairness
  • 但是另一方面CTL在验证时间上是线性增长的,而LTL会出现指数级增长的,因此在工业上用的比较多的还是CTL
  • 但是CTL实在是有很多限制,例如它不兼容半形式化,可是LTL却可以,而且LTL可以很容易修改以便混合枚举和符号搜索算法
  • LTL的复杂度是PSPACE-complete的

HEXO搭建

Posted on 2018-11-12 | In HEXO


HEXO搭建
==================

安装nodejs

1
2
sudo apt-get install nodejs
sudo apt-get install nodejs-legacy

安装HEXO

1
npm install hexo-cli -g

安装Deployer

1
npm install hexo-deployer-git --save

####创建博客

1
2
hexo init blog
cd blog

####安装依赖

1
npm install

问题

问题1: Error: Cannot find module ‘hexo-util’
回答1:npm install – save-dev hexo-util

问题2: sh: 1: cannot create highlight_alias.json: Permission denied
回答2: 尝试执行npm config set unsafe-perm true,依然不行按照官方解决方案尝试https://docs.npmjs.com/getting-started/fixing-npm-permissions

安装最新版本的Nodejs

Posted on 2018-11-12 | In Nodejs


安装最新版本的Nodejs
==================

1
2
3
4
5
6
7
sudo apt-get install npm
sudo npm install npm@latest -g
sudo npm cache clean -f
sudo npm install -g n
sudo n latest

sudo ln -sf /usr/local/n/versions/node/<VERSION>/bin/node /usr/bin/nodejs

ref: https://segmentfault.com/a/1190000007542620
如果遇到以下问题

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
sudo npm install -g n 
/usr/local/lib/node_modules/npm/bin/npm-cli.js:79
let notifier = require('update-notifier')({pkg})
^^^

SyntaxError: Block-scoped declarations (let, const, function, class)
not yet supported outside strict mode
at exports.runInThisContext (vm.js:53:16)
at Module._compile (module.js:374:25)
at Object.Module._extensions..js (module.js:417:10)
at Module.load (module.js:344:32)
at Function.Module._load (module.js:301:12)
at Function.Module.runMain (module.js:442:10)
at startup (node.js:136:18)
at node.js:966:3

则只需要删除安装的npm

1
2
cd /usr/local/lib/node_modules
mv npm/ /tmp/usr_local_lib_node_modules_npm

然后重新执行

1
2
sudo npm install -g n 
sudo n stable

源码安装shadowsocks

Posted on 2018-11-12 | In shadowsocks


源码安装shadowsocks
==================

  1. 安装依赖包
1
sudo apt-get install qt5-qmake qtbase5-dev libqrencode-dev libappindicator-dev libzbar-dev libbotan1.10-dev
  1. 安装库
1
2
3
4
5
6
git clone https://github.com/shadowsocks/libQtShadowsocks.git
cd libQtShadowsocks
cmake .
make
make install
sudo cp /usr/local/lib/libQtShadowsocks.so.2 /usr/lib/libQtShadowsocks.so.2
  1. 安装shadowsocks
1
2
3
4
5
git clone https://github.com/shadowsocks/shadowsocks-qt5.git
cd shadowsocks-qt5
cmake .
make
make install

GEM5中添加一个简单的IO模块(ORAM)

Posted on 2018-08-27 | In gem5


GEM5中添加一个简单的IO模块
==================

        近期想要在Gem5中模拟ORAM(Oblivious RAM)的算法,因此开始折腾起了Gem5。

ORAM简介

        为了保护数据安全,我们经常对数据进行加密再进行存储。但是令人遗憾的是,很多时候,黑客可以通过大量统计CPU访存来总结出规律,从而推测出敏感信息。ORAM就是为了解决这个问题而诞生的。因此ORAM通常会需要在内存控制器之前对我们的访存地址或内容进行一些操作,来隐藏我们的访问模式。

新增一个简单的IO模块

        为了实现上述目的,我们需要在gem5中添加一个IO传输模块,用于实现ORAM算法。在这里我们暂时先在gem5中新增一个简单的IO传输模块,目前这一模块的功能十分单一,它在内存总线和内存控制器之间,用于接收内存控制器的数据,并将这一数据原封不动地传输给内存控制器。之后ORAM算法将被添加到这一模块中,ORAM算法会将从内存总线接收到的数据包进行处理再传送给内存控制器。

        如图1所示的gem5配置图,在新增模块之前,CPU发出的消息经过L1_DCache->L2XBar->L2Cache->SystemXBar->DRAMSim2。我们计划在SystemXBar(membus)和DRAMSim2(mem_ctrls)之间添加一个ORAM新模块。

图1


图1 gem5输出的默认系统配置图

1
2
3
4
5
6
7
8
9
10
11
12
1. 在src目录下新建ORAM目录
2. 复制src/learning_gem5/part2/目录下的simple_memobj.cc,simple_memobj.hh,SimpleMemobject.py以及SConscript到ORAM目录下。并且改名字为ORAMobj.cc,ORAMobj.hh,ORAMobj.py。
3. 修改ORAM目录下的SConscript
新增以下ORAM配置
+ SimObject('ORAMobj.py')
+ Source('ORAMobj.cc')
+ DebugFlag('ORAMobj', "For Learning gem5 Part 2.")
剩下的无关配置都可删除
4. 此时还不行,由于内存中的一些多余的操作会导致接收包和发送包出现一些问题使得运行结果不正确,因此此时我们最好的方法是去除一些多余的函数,只留下接收数据包和发送数据包的函数即可。

具体代码可参考github
https://github.com/wlmnzf/gem5_add_a_new_module.git

        接下来我们需要修改se.py来将我们新增的这个模块加入到我们的系统配置中去。首先我们在cofigs/commom/MemConfig.py中修改

1
2
3
4
5
6
7
8
9
# Connect the controllers to the membus
for i in xrange(len(subsystem.mem_ctrls)):
if opt_mem_type == "HMC_2500_1x32":
subsystem.mem_ctrls[i].port = xbar[i/4].master
# Set memory device size. There is an independent controller for
# each vault. All vaults are same size.
subsystem.mem_ctrls[i].device_size = options.hmc_dev_vault_size
else:
subsystem.mem_ctrls[i].port = xbar.master

为

1
2
3
4
5
6
7
8
9
# Connect the controllers to the membus
for i in xrange(len(subsystem.mem_ctrls)):
if opt_mem_type == "HMC_2500_1x32":
subsystem.mem_ctrls[i].port = xbar[i/4].master
# Set memory device size. There is an independent controller for
# each vault. All vaults are same size.
subsystem.mem_ctrls[i].device_size = options.hmc_dev_vault_size
# else:
# subsystem.mem_ctrls[i].port = xbar.master

        这是因为我们需要在后面手工设置内存控制器连接我们新增的模块,而它默认会连接到内存控制器上,因此需要将其默认的连接取消掉,否则重复连接会导致错误。

接下来修改configs/example/se.py,在文件中找到如下代码行

1
MemConfig.config_mem(options, system)

将其修改为

1
2
3
4
MemConfig.config_mem(options, system)
system.hello=ORAMobj()
system.mem_ctrls[0].port=system.hello.mem_side
system.hello.cache_side=system.membus.master

        此外所需要注意的上面的例子中的cache_side和mem_side分别为模块的master端和slave端。
        完成之后再次进行编译即可看到最终的效果了。而我们的m5out则会变成如图2所示的结构。可以看到相比于之前的系统配置,我们在里面新增了一个ORAM模块

图2


图2 新增一个IO模块后的配置图

GEM5中利用Pydot输出系统配置图

Posted on 2018-08-26 | In gem5


GEM5中利用Pydot输出系统配置图
==================

安装python的Pydot包之后,当运行gem5进行模拟仿真之后,即可在m5out目录下找到config.pdf之类的配置图,如图1所示。

还可以通过dot命令将config.dot文件转换成自己需要的格式

1
2
3
pip install pydot
cd m5out
dot -Tpng -o config.png config.dot

图1


图1 gem5输出的系统配置图

GEM5中使用DRAMSim2

Posted on 2018-08-25 | In gem5


GEM5中使用DRAMSim2
==================

DRAMSim2

        DRAMSim2是一个较为精确的DDR2/3内存模拟器,因为其仿真效果相当不错,因此在学术界接受度较高[1]。

GEM5中集成DRAMSim2

        目前GEM5中已经给出了官方的集成方式。进入ext/dramsim2目录,参照readme中的方法下载DRAMSim2。

1
2
3
4
5
1. cd ext/dramsim2
2. git clone git://github.com/dramninjasUMD/DRAMSim2.git
3. cd ../../
4. scons build/X86/gem5.opt -j9 #重新编译gem5,这里给出默认的编译方式
5. sudo build/X86/gem5.opt configs/example/se.py -c tests/test-progs/hello/bin/x86/linux/hello --cpu-type='TimingSimpleCPU' --caches --l2cache --mem-type='DRAMSim2' #像这样指定内存类型的参数为DRAMSim2即可,--mem-type='DRAMSim2'。别的配置可按照自己的需求进行修改。

注: 为了正确运行gem5,还需要将DRAMSim2中的配置system.ini.example和ini/DDR3_micron_32M_8B_x8_sg15.ini 中的空行删除掉

参考:

  1. Rosenfeld, Paul, Elliott Cooper-Balis, and Bruce Jacob. “DRAMSim2: A cycle accurate memory system simulator.” IEEE Computer Architecture Letters 10.1 (2011): 16-19.
123
Limin Wang

Limin Wang

26 posts
17 categories
58 tags
GitHub Twitter Scholar Linkedin
Links
  • Junyangz
  • Dch's Blog
  • Myth Blog
© 2020 Limin Wang
Powered by Hexo
Hosted by Coding Pages
Theme - NexT.Pisces