08010211李国龙vm67文档格式.docx
- 文档编号:21464193
- 上传时间:2023-01-30
- 格式:DOCX
- 页数:11
- 大小:972.40KB
08010211李国龙vm67文档格式.docx
《08010211李国龙vm67文档格式.docx》由会员分享,可在线阅读,更多相关《08010211李国龙vm67文档格式.docx(11页珍藏版)》请在冰豆网上搜索。
pte
value
物理地址
index
valid
pfn
0x611c
0x18
1
0x21
0x08
0x35
08
0x06bc
0x3da8
0x0f
0x56
0x0d
0x7f
fault
0x17f5
0x05
0x54
0x1f
0x4e
1c
0x09d5
0x7f6c
0x1b
0x0bad
0x02
0x60
0x1d
0x6d60
0x42
0x0b
0x2a5b
0x0a
0x55
0x12
0x4c5e
0x13
0x78
1b
0x07b2
0x2592
0x09
0x1e
0x0c
0x3d
0x3e99
0x14
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使用率:
用户进程执行时间明显增大,id:
空闲时间降为0;
其中usertime是有意义的,代表处于用户模式的时间百分比。
3)当打开的mem超过一个后发现CPU使用率:
用户进程执行时间(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:
每秒从交换区写到内存的大小;
每秒写入交换区的内存大小。
在内存只是用一半时,只有刚开始的循环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最快,之后都要慢得多。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 08010211 李国龙 vm67