08010211李国龙vm67.docx

上传人:b****5 文档编号:8327924 上传时间:2023-01-30 格式:DOCX 页数:11 大小:972.40KB
下载 相关 举报
08010211李国龙vm67.docx_第1页
第1页 / 共11页
08010211李国龙vm67.docx_第2页
第2页 / 共11页
08010211李国龙vm67.docx_第3页
第3页 / 共11页
08010211李国龙vm67.docx_第4页
第4页 / 共11页
08010211李国龙vm67.docx_第5页
第5页 / 共11页
点击查看更多>>
下载资源
资源描述

08010211李国龙vm67.docx

《08010211李国龙vm67.docx》由会员分享,可在线阅读,更多相关《08010211李国龙vm67.docx(11页珍藏版)》请在冰豆网上搜索。

08010211李国龙vm67.docx

08010211李国龙vm67

VM6:

1.Withalinearpagetable,youneedasingleregistertolocatethepagetable,assumingthathardwaredoesthelookupuponaTLBmiss.Howmanyregistersdoyouneedtolocateatwo-levelpagetable?

Athree-leveltable?

答:

 无论是多少级的页表,只需一个寄存器。

当为线性页表时,寄存器中VPN的长度比较长,当为二级或多级页表时,总的VPN长度是不变的。

不同的只是为每一级页表分派了PDI,而随着页表级数增加,每一级的PDI的长度在减小。

总的PDI的长度加上PTI的长度与线性页表中VPN的长度是相同的(如下图)。

所以不论页表的级数有多少,始终只需要一个寄存器。

2.Usethesimulatortoperformtranslationsgivenrandomseeds0,1,and2,andcheckyouranswersusingthe-cflag.Howmanymemoryreferencesareneededtoperformeachlookup?

答:

取种子Seed为1时为例:

python paging-multilevel-translate.py -c 1 

16进制

pde

pte

value

物理地址

index

valid

pfn

index

valid

pfn

0x611c

0x18

1

0x21

0x08

1

0x35

08

0x06bc

0x3da8

0x0f

1

0x56

0x0d

0

0x7f

fault

fault

0x17f5

0x05

1

0x54

0x1f

1

0x4e

1c

0x09d5

0x7f6c

0x1f

1

0x7f

0x1b

0

0x7f

fault

fault

0x0bad

0x02

1

0x60

0x1d

0

0x7f

fault

fault

0x6d60

0x1b

1

0x42

0x0b

0

0x7f

fault

fault

0x2a5b

0x0a

1

0x55

0x12

0

0x7f

fault

fault

0x4c5e

0x13

1

0x78

0x02

0

0x7f

1b

0x07b2

0x2592

0x09

1

0x1e

0x0c

1

0x3d

fault

fault

0x3e99

0x0f

1

0x56

0x14

1

0x4a

1e

0x0959

3.Givenyourunderstandingofhowcachememoryworks,howdoyouthinkmemoryreferencestothepagetablewillbehaveinthecache?

Willtheyleadtolotsofcachehits(andthusfastaccesses?

)Orlotsofmisses(andthusslowaccesses)?

答:

catch memory 缓存。

用来存储近期或者常用的指令或者数据,在多级页表的内存管理中,catch memory和TLB的作用很相似。

我们知道从内存中去数据比从缓存中取数据话费的时间要多得多,那么如果对于近期HIT命中的或者使用频率高页表,我们很可能在接下来会申请。

把这些页表存放在TLB即缓存(catch memory)中,可以大大减少再次访问内存的次数,从而降低时间。

VM7:

1.Now,wewillruntheprogrammem.cbutwithverylittlememoryusage.Thiscanbeaccomplishedbytyping./mem1(whichusesonly1MBofmemory).HowdotheCPUusagestatisticschangewhenrunningmem?

Dothenumbersintheusertimecolumnmakesense?

Howdoesthischangewhenrunningmorethanoneinstanceofmematonce?

答:

vmstat输出的字段说明:

Procs(进程):

r:

运行队列中进程数量

b:

等待IO的进程数量

Memory(内存):

swpd:

使用虚拟内存大小

free:

可用内存大小

buff:

用作缓冲的内存大小

cache:

用作缓存的内存大小

Swap:

si:

每秒从交换区写到内存的大小

so:

每秒写入交换区的内存大小

IO:

(现在的Linux版本块的大小为1024bytes)

bi:

每秒读取的块数

bo:

每秒写入的块数

系统:

in:

每秒中断数,包括时钟中断。

cs:

每秒上下文切换数。

CPU(以百分比表示):

us:

用户进程执行时间(usertime)

sy:

系统进程执行时间(systemtime)

id:

空闲时间(包括IO等待时间)

wa:

等待IO时间

启动vmstat后输出:

将mem.c编译成可执行文件:

当再启动./mem1后,vmstat输出:

运行mem后与未运行对比发现:

1)Procs(进程)中r:

运行队列中进程数量增加;

Memory(内存)中free:

可用内存大小与之前相比减小大约1M,因为输入的指令./mem1(其仅使用1MB的内存);

2)CPU使用率:

us:

用户进程执行时间明显增大,id:

空闲时间降为0;

其中usertime是有意义的,代表处于用户模式的时间百分比。

3)当打开的mem超过一个后发现CPU使用率:

us:

用户进程执行时间(usertime)与之前只开一个相比有些许下降,从运行结果可看出,开一个时us可以达到97%,开两个后只有94%附近,这是因为系统要进行进程间的切换,相应的用户进程执行时间减少。

2.Let’snowstartlookingatsomeofthememorystatisticswhilerunningmem.We’llfocusontwocolumns:

swpd(theamountofvirtualmemoryused)andfree(theamountofidlememory).Run./mem1024(whichallocates1024MB)andwatchhowthesevalueschange.Thenkilltherunningprogram(bytypingcontrol-c)andwatchagainhowthevalueschange.Whatdoyounoticeaboutthevalues?

Inparticular,howdoesthefreecolumnchangewhentheprogramexits?

Doestheamountoffreememoryincreasebytheexpectedamountwhenmemexits?

答:

下面是运行结果,其中圈出来部分之前是刚开始启动vmstat输出,圈出来部分是再启动一个程序./mem512(分配512MB)后输出,圈出来部分后面是杀死启动的程序之后输出情况,我们通过前后对比内存中swpd(使用的虚拟内存量)和free(空闲内存量)这两列的情况。

a)在没有运行时,swpd大约为0(KB),free大约为259496(KB),在运行mem后,swpd迅速增加最后大约保持在555640(KB),free迅速减少最后保持在71000(KB)左右。

从这变化可见,在运行mem后,虚拟内存的使用明显增加,可用的空闲内存明显减少。

b)在杀死mem程序后,swpd突然减少到212460左右(减少了一半),free突然增加到788296左右(增加了约11倍)。

c)退出后空闲内存的大小比原来没运行时的还增大了。

3.We’llnextlookattheswapcolumns(siandso),whichindicatehowmuchswappingistakingplacetoandfromthedisk.Ofcourse,toactivatethese,you’llneedtorunmemwithlargeamountsofmemory.First,examinehowmuchfreememoryisonyourLinuxsystem(forexample,bytypingcat/proc/meminfo;typemanprocfordetailsonthe/procfilesystemandthetypesofinformationyoucanfindthere).Oneofthefirstentriesin/proc/meminfoisthetotalamountofmemoryinyoursystem.Let’sassumeit’ssomethinglike8GBofmemory;ifso,startbyrunningmem4000(about4GB)andwatchingtheswapin/outcolumns.Dotheyevergivenon-zerovalues?

Then,trywith5000,6000,etc.Whathappenstothesevaluesastheprogramentersthesecondloop(andbeyond),ascomparedtothefirstloop?

Howmuchdata(total)areswappedinandoutduringthesecond,third,andsubsequentloops?

(dothenumbersmakesense?

答:

通过查看知道Linux上内存总量大约1G,所以我们依次测试./mem512600700。

其中si:

每秒从交换区写到内存的大小;so:

每秒写入交换区的内存大小。

在内存只是用一半时,只有刚开始的循环si不为0表示有数据从交换区写到内存,后面几乎都为0。

在测试测试./mem600时和测试./mem512几乎一样,只有刚开始的si大于0有数据从交换区写到内存,后面全为0。

在测试测试./mem700时发现si没有小于0的情况,说明数据忙于在交换区写到内存.

4.Dothesameexperimentsasabove,butnowwatchtheotherstatistics(suchasCPUutilization,andblockI/Ostatistics).Howdotheychangewhenmemisrunning?

答:

我们从CPU利用率上来进行相似的分析。

可以看出当运行mem(内存是600时)后us:

用户进程执行时间(usertime)从之前的6%瞬间上升到98%,id:

空闲时间(包括IO等待时间)也瞬间降到0,由此可见此时CPU主要用于用户进程。

但是当运行mem(内存是1024时)由上图可以看出CPUwa:

等待IO时间达到90%以上,此时CPU主要用在了等待I/O。

5.Nowlet’sexamineperformance.Pickaninputformemthatcomfortablyfitsinmemory(say4000iftheamountofmemoryonthesystemis8GB).Howlongdoesloop0take(andsubsequentloops1,2,etc.)?

Nowpickasizecomfortablybeyondthesizeofmemory(say12000againassuming8GBofmemory).Howlongdotheloopstakehere?

Howdothebandwidthnumberscompare?

Howdifferentisperformancewhenconstantlyswappingversusfittingeverythingcomfortablyinmemory?

Canyoumakeagraph,withthesizeofmemoryusedbymemonthex-axis,andthebandwidthofaccessingsaidmemoryonthey-axis?

Finally,howdoestheperformanceofthefirstloopcomparetothatofsubsequentloops,forboththecasewhereeverythingfitsinmemoryandwhereitdoesn’t?

答:

因为在Linux下内存是1G,所以用./mem512来测试适合情况。

使用./mem1024来测试超出内存情况。

a)从上面两次情况我们对比可以发现,当内存为512M时比1024M时的bandwidth快的多。

并且在512M时,第一次循环速度最慢也有738.78MB/S,之后都能达到1200多MB/S,而当内存为1024时,第一次循环速度最快也只有93.07MB/S,之后更小达不到10MB/S。

b)为了绘制图形,我们分别取500,600,700,800,900,1000来测数据,取前三次循环平均值。

分配内存大小(MB)

Bandwidth(MB/s)

500

1156.58

600

1024.08

700

74.36

800

45.98

900

41.38

1000

29.12

c)当分配数组大小适合内存时,第0次循环的bandwidth最慢,之后逐渐提升。

当分配数组大小超出内存时,第0次循环的bandwidth最快,之后都要慢得多。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 医药卫生 > 预防医学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1