欢迎来到优知文库! | 帮助中心 分享价值,成长自我!
优知文库
全部分类
  • 幼儿/小学教育>
  • 中学教育>
  • 高等教育>
  • 研究生考试>
  • 外语学习>
  • 资格/认证考试>
  • 论文>
  • IT计算机>
  • 法律/法学>
  • 建筑/环境>
  • 通信/电子>
  • 医学/心理学>
  • ImageVerifierCode 换一换
    首页 优知文库 > 资源分类 > DOCX文档下载
    分享到微信 分享到微博 分享到QQ空间

    Linux 内存中的缓冲区(Buffer)与缓存(Cache) 区别与认知.docx

    • 资源ID:1091869       资源大小:113.83KB        全文页数:10页
    • 资源格式: DOCX        下载积分:5金币
    快捷下载 游客一键下载
    账号登录下载
    微信登录下载
    三方登录下载: QQ登录
    二维码
    扫码关注公众号登录
    下载资源需要5金币
    邮箱/手机:
    温馨提示:
    快捷下载时,如果您不填写信息,系统将为您自动创建临时账号,适用于临时下载。
    如果您填写信息,用户名和密码都是您填写的【邮箱或者手机号】(系统自动生成),方便查询和重复下载。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP,免费下载
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    Linux 内存中的缓冲区(Buffer)与缓存(Cache) 区别与认知.docx

    Linux内存中的缓冲区(BUffer)与缓存(CaChe)区别与认知Buffer和Cache的定义:Buffer:是原始磁盘块的临时存储,即将缓存数据写入磁盘。它通常不会很大(大约20MB)o这样,内核就可以将分散的写入集中起来,从而对磁盘写入进行统一优化。例如,多个小的写入可以合并为一个大的写入等。Cache:是用于从磁盘读取文件的页面缓存,用于缓存从文件中读取的数据。这样,下次访问这些文件数据时,可以直接从内存中快速取回,而无需再次访问缓慢的磁盘。但是让我问你,由于BUfTer只是将写入磁盘的数据的缓存。反过来,它还会缓存从磁盘读取的数据吗?或者Cache是从文件中读取数据的缓存,那么它是否也为写入文件缓存数据呢?如果你能回答以上两个问题,你可以跳过这篇文章,我想你已经对Buffer和CaChe有了很好的理解。但如果你不能,请留下来看看我的进一步解释。free命令要检查系统内存使用情况,您想到的第一个命令可能是free,例如:$free-htotalusedfreesharedbuff7cacheavailableMem:1.9G1.0G394M2.6M491M728MSwapiOBOBOB很明显,该输出包括了物理内存Mem和SWaP的具体使用情况(如总内存、已用内存、缓存、可用内存等)。缓存是BUffer和CaChe两部分的总和。让我们看一下free的手册页中的Buffer和Cache定义:BuffersMemoryusedbykemelbuffers(BuffersinZprocZmeminfo)cacheMemoryusedbythepagecacheandslabs(CachedandSReclaimableinprocmeminfo)buff7cacheSumofbuffersandcache我们可以看到free命令的源数据实际上存储在proc/meminfo文件中。正如我前面提到的,Zproc是Linux内核提供的一个特殊的文件系统,它就像一个用户与内核交互的接口。/proc文件系统也是许多性能工具的最终数据源。在manproc中,BUfferS和Cached的定义如下:Buffers%luRelativelytemporarystoragefbrrawdiskblocksthatshouldn,tgettremendouslylarge(20MBorso).Cached%luIn-memorycacheforfilesreadfromthedisk(thepagecache).Doesn'tincludeSwapCached.SReclaimable%lu(sinceLinux2.6.19)PartofSlab,thatmightbereclaimed,Suchascaches.SUnreclaim%lu(sinceLinux2.6.19)PartofSlab,thatcannotbereclaimedonmemorypressure.至此,您可能认为您已经找到了我的问题的答案,“Buffer”只是用于将数据写入磁盘的缓存,“Cache”只是用于从文件中读取数据的缓存。但事实上,“Buffer”也可以用于读取,“Cache”也可以用于写入。实验我们将在这里做两个实验,写缓存和读缓存。写入Cache让我们登录到我们的LinUX主机并准备好两个终端。在终端1,让我们先清理缓存:roottest#free-htotalusedfreesharedbuff/cacheavailableMem:7.7G196M6.3G492K1.2G7.3GSwap:BBBroot0test#echo3>procsysvmdrop-cachesroottestfree-htotalusedfreesharedbuff/cacheavailableMem:7.7G195M7.3G492K154M7.3GSwap:BBB这里procsysVm/drop_caches是一个通过proc文件系统修改内核行为的例子。写入3意味着清理各耳缓存,例如文件页、目录条目和InOde。仍然在终端1,让我们开启vmstat2命令:S b freebuffcache45492605144404548764514484548972514488455572507708# vmstat 2 memoryd Wp S O 1-swap- si so to-bi8 43bo725-system-in cs us33253 4343 571482 428cpu- sy id wa1 981 1 99 1 98 32 61buff和cache就是我们前面看到的Buffer和Cache,单位是KBobi和bo分别表示块设备读取和写入的大小,以块/s为单位。由于Linux中的块大小为1KB,因此这个单位相当于KB/so接下来,转移到终端2并运行以下命令:roottest#ddif=devurandomof=tmpfilebs=lMcount=5O0500+0recordsin50+recordsout5242880Obytes(524MB)copied,3.25553s,161MB/s现在切换回终端1,并观察buff和cache的变化:Irootfltest # vmstat 2-memory free buff45492604548764O45489720455572Q4239456O4239472O4239588O423968Ocache 51444 514480 514488 57708 82358082358 82358 82358 823908-o bi8 O437 : O O : 124 ,bo725 3899 e 1280 97280-systemin3 253 343 482 688 259 249CS US 3 400 571 I 428 '185 420 396 I857 20 758 17283247I 989998! 61'49,99I 992 76 6 4 19 2通过观察VmStat的输出,我们发现运行dd命令时,CaChe一直在增长,而BUffer基本没有变化。读取Buffer现在,让我们做第二个实验。再次清除终端1中的缓存:roottest#free-husedfreesharedbuff/cacheavailabletotalMem:Swap:roottestroottest7.7GB#echo3>free-h266M5.4GOB0Bprocsysvmdrop-caches452K2.IG7.2Gtotalusedfreesharedbuff/cacheavailableMem:Swap:7.7GB190MOB7.4GB452K154M7.3G同样在终端1中,再次启动vmstat2命令:roottest#vmstat2procsemoryswapiosystemcpurbswpdfreebuffcachesisobiboincsussyidwast76885561714442349976882171441111790997688217144O117199990您可以看到此时buff为0。现在在终端2中,运行以下命令:root0testdata#ddif=devnvmelnlof=cicvullbs=lMcount=1024124+recordsin124+Orecordsout1073741824bytes(1.1GB)copied,7.18224s,149MB/s然后,回到终端1观察:J# vmstat 2 memoryfree 7704020 773400 773516 773524 7628284buff cache 739847287788 41369673392 67286773772 9267206652104 1048832 1614443728 169864128256128256616415952159521595215952159212 159941654 161148OO 0OO-10- bi-systemcpubo in cs us sy id wa st8235O990110190990115191991 17 184 G l 2754721944107961492354616231191O25471O6261187Q35471037466727522观察VmStat的输出,你会发现在读盘的时候(也就是bi>0的时候),Buffer和Cache都在增长,但是显然Buffer的增长要快很多。这意味着当从磁盘读取时,数据被缓存在Buffer中。现在我们几乎可以得出结论:读取文件时数据会缓存在Cache中,读取磁盘时数据会缓存在Buffer中。结论在这里您应该会发现,虽然本文对BUffer和CaChe进行了描述,但仍然无法涵盖所有细节。我们如今学到了以下两点:Buffer:既可以用作“要写入磁盘的数据缓存”,也可以用作“读取磁盘读的数据缓存Cache:既可以用作“从读取文件的页面缓存”,也可以用作“写入文件的页面缓存LCache和Buffer是两个不同的概念,简单的说,Cache是加速“读",而buffer是缓冲“写”,前者解决读的问题,保存从磁盘上读出的数据,后者是解决写的问题,保存即将要写入到磁盘上的数据。在很多情况下,这两个名词并没有严格区分,常常把读写混合类型称为buffercache,本文后续的论述中,统一称为CaChe。Oracle中的IOgbUffer是解决redo写入的问题,而databuffercache则解决datablock的读写问题。对于OraCIe来说,如果IO没有在SGA中命中,都会发生物理IO,Oracle并

    注意事项

    本文(Linux 内存中的缓冲区(Buffer)与缓存(Cache) 区别与认知.docx)为本站会员(王**)主动上传,优知文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知优知文库(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

    copyright@ 2008-2023 yzwku网站版权所有

    经营许可证编号:宁ICP备2022001189号-2

    本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。优知文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知优知文库网,我们立即给予删除!

    收起
    展开