缓存技术了解,缓存处理机制

  缓存技术了解,缓存处理机制

  1.目的

  用PHP读取缓存,测试PHP读取缓存时服务器磁盘的I/O读取速度,根据结果预估瓶颈,根据不同的缓存类型进行测试。

  2:缓存

  2.1概念:

  缓存是指临时文件交换区。电脑把最常用的文件从内存里拿出来,暂时放在缓存里,就像把工具和材料搬到工作台上一样,比用的时候去仓库取要方便。因为缓存经常使用RAM(断电时掉落的非永久存储),所以文件在繁忙后仍然会被发送到硬盘和其他内存中永久存储。电脑中最大的缓存是记忆棒,最快的是嵌入CPU的L1和L2缓存,显卡的显存是GPU的缓存,硬盘也有16M或32M的缓存。千万不要把缓存理解成一个东西,它是一种处理方法的总称!

  2.2缓存的类型:

  2.2.1高速缓存:在计算机存储系统的层次结构中,介于CPU和主存之间的一种高速小容量存储器。与主存储器一起构成一级存储器。高速缓冲存储器和主存储器之间的信息调度和传输是由硬件自动执行的。有些机器甚至有二级和三级缓存,每个缓存都比前一个缓存更慢更大。这时,最初的高速小容量存储器称为一级缓存。

  2.2.1.1 CPU一级缓存:l 1缓存是CPU的一级缓存。内置L1缓存的容量和结构对CPU的性能有很大影响。但是缓存全部由静态RAM组成,结构复杂,所以如果CPU管芯面积不太大的话,L1缓存的容量不能做得太大。一般来说,L1缓存的容量通常为32-256kb。

  2.2.1.2 CPU L2缓存:L2缓存(L2缓存)是CPU的二级缓存,分为内部和外部芯片。内部芯片L2缓存运行速度与主频相同,而外部L2缓存只有主频的一半。L2缓存容量也会影响CPU的性能。原则是越大越好。普通台式机CPU的L2缓存一般为128KB至2MB或更高,笔记本、服务器、工作站CPU的缓存最高可达1 MB至3 MB。

  2.2.1.3 CPU三级缓存:l 3缓存(三级缓存),分为两种。早期的都是外在的,现在都是内在的。其实际作用是L3缓存的应用可以进一步降低内存延迟,提高处理器在大数据计算中的性能。降低内存延迟,提高大数据量的计算能力,对游戏很有帮助。但是,在服务器领域添加L3缓存仍然可以显著提高性能。例如,具有大型L3缓存的配置可以更有效地使用物理内存,因此它可以比较慢的磁盘I/O子系统处理更多的数据请求。具有更大L3缓存的处理器提供了更高效的文件系统缓存行为以及更短的消息和处理器队列长度。

  2.2.2磁盘缓存:磁盘缓存分为读缓存和写缓存。读缓存是指操作系统是已经被读取的文件数据,当内存空闲时,它会停留在内存空间中(这个内存空间称为“内存池”)。当软件或用户再次读取同一文件时,他们不必再次从磁盘读取,从而提高了速度。实际上,写缓存就是将要写入磁盘的数据先保存在系统为写缓存分配的内存空间中。当内存池中保存的数据达到一定程度时,数据会被保存到硬盘中。这样可以减少实际的磁盘操作,有效保护磁盘免受反复读写操作带来的损坏,同时也减少了写入所需的时间。

  磁盘缓存的目的是减少CPU通过I/O读取磁盘驱动器的次数,提高磁盘I/O的效率,用一块内存来存储频繁访问的磁盘内容;因为内存访问是电子动作,而磁盘访问是I/O动作,我感觉磁盘I/O变快了。

  2.2.3缓存:cache,即高速缓存,计算机速度的瓶颈主要在于机械硬盘的读写速度,而缓存就是利用高速内存来缓存硬盘的读写,是大内存机器提速的首选,也是服务器的必备武器。

  2.2.4浏览器缓存:为了提高访问网页的速度,浏览器会使用累积加速的方法来存储网页的内容(包括图片和cookie文件等。)在电脑里被访问过的。这个存储空间称为浏览器缓存。以后你每次访问一个网站,访问者都会先搜索这个目录,里面已经有访问过的内容了,所以访问者不需要从网上下载,直接从缓存中调取,提高了访问网站的速度。

  2.2.5内存缓存:Memcache类似于分布式内存对象缓存系统。通过在内存中维护一个统一的巨大哈希表,可以用来存储各种格式的数据,包括图像、视频、文件和数据库检索结果。简单来说就是将数据调入内存,然后从内存中读取,这样就大大提高了读取速度。

  2.2.6文件缓存:这里的文件缓存和文件没什么区别,就是用文件的方式保存一些数据,减轻数据库的压力。

  3.测试环境介绍

  3.1:操作系统:CentOS 6.3 64位。

  3.2:网络服务器:Nginx

  3.3:测试语言:PHP

  3.4:3.4以下的硬盘I/O监控软件:CentOS: nmon

  3.5:缓存大小:所有的缓存大约是一篇短文的长度,如下图。

  3.6:缓存数量:所有缓存都以10000为基数。

  3.7:缓存代码实现:

  分别使用两种缓存,一种是在Memcache的辅助下将缓存放入内存,另一种F代表文件缓存,放入目录/运行时/缓存。缓存的名称是cache(0-9999),分别有10,000条记录。$data数组中有四段数据,都是1.4中提到的短文。

  3.8:内存缓存读取代码:

  内存中使用了Memcache,由于使用了ThinkPHP框架,所以采用了ThinkPHP自己的一些编写方法。

  3.9:文件缓存读取代码:

  同理:这也是ThinkPHP自带的文件缓存方式。

  同理:这也是ThinkPHP自带的文件缓存方式。

  4.测试记录

  4.1:单页测试记录

  4 . 1 . 1:memcache的执行时间为6.6 ms。

  图1.1 Memcache单页响应时间

  当Memcache用作缓存时(即缓存放入内存中),执行的页面大约是6.6 ms .

  4.1.2:使用文件缓存的执行时间为4.7毫秒。

  使用文件缓存的执行时间显示为大约4.7毫秒.

  图1.2文件缓存的单页响应时间

  4.1.3:总结

  文件缓存响应时间更短:从单个页面的角度来看,文件缓存时间似乎更短,但后台一些程序的执行也可能会影响变化,单个页面的执行时间相差只有毫秒,所以单个页面的响应时间不可靠。

  4.2: 10,000条并发页面测试记录

  4 . 2 . 1:memcache的平均响应时间为4.351毫秒

  图1.3 10,000并发下Memcache的平均响应时间

  图1.4 10,000并发下memcache的I/O磁盘情况

  4.2.3.1:文件缓存仍然比内存快

  我测试了几次,结果都如上。看起来文件缓存更快。我在网上找到了一些这方面的资料。原话是:为了提高读写文件的速度,linux系统采用了页面缓存机制。当一个应用调用read、write等函数读写文件时,系统不会立即对硬盘进行操作,而是检查要读取的数据是否已经在页面缓存中,如果没有,就从硬盘中读取。写的时候数据只写到页面缓存,然后按照一定的算法使用系统进程pdflush写到硬盘。如上所述,在CPU和内存之间仍然有一个缓存。这个缓存和PHP写的文件缓存是两个概念,它有自己的算法,由操作系统决定。虽然这种缓存没有CPU快,但是,它比内存快得多。因此,如果读取的文件仍在缓存中,读取速度会更快。但按照百度百科上的原话,缓存的工作原理是,CPU要读取一个数据时,先从缓存中查找,然后立即读取并发送给CPU处理;如果没有找到,可以以相对较慢的速度从内存中读取,并发送给CPU进行处理。同时可以将这个数据所在的数据块转移到缓存中,这样以后就可以从缓存中读取整个数据,不需要再调用内存。也就是说,如果数据放入内存,你也会先在缓存中检查,找到了就不去内存了。都是用缓存,但是实际结果显示文件缓存更快。可能的原因如下:

  1.预读:当硬盘受CPU指令控制开始读取数据时,硬盘上的控制芯片会控制磁头读取正在读入缓存的下一簇或几簇中的数据(由于硬盘上的数据是连续存储的,读取命中率高)。当需要读取下一个簇或多个簇中的数据时,硬盘不需要再次读取数据,直接将缓存中的数据转移到内存中就足够了,因为缓存速度远高于磁头。

  二、CPU缓存算法,这种算法是由操作系统决定的,但一般采用最近使用时间最长的调度算法。当然,也可以将几个调度算法组合成一个更复杂的算法。

  第三,磁盘缓存的工作,比如2.2.2磁盘缓存的概念。

  磁盘I/O分析:

  Memcache(缓存在内存中的数据)是从内存中读取的,所以磁盘上的读取并不多,但有时会有,写入占大多数。这两者之间有着巨大的差异。最高的情况下,写入约1200kb/s,但大部分保持在300kb左右。

  文件缓存在整个I/O监控中很奇怪。首先,读取突发到1200kb/s,然后慢慢消失,然后写入开始慢慢上升。在中间部分,读取保持在300 KB/s,写入保持在360 KB/s。与理论类似,文件缓存需要从磁盘读取文件,因此导致了读取。

  根据之前介绍的缓存的概念,也可能大致判断是一开始I/O读取激增,因为需要从文件中读取,后来因为一部分来自缓存而下降,所以没有再读取文件缓存。

  5.总结分析

  5.1 Linux硬盘I/O瓶颈:

  最快的I/O速度在3000 KB/s左右,远远低于一般硬盘I/O的读取速度,原因就是小缓存多。读取10000个1kb大小的文件和读取1个10000kb的文件差距很大。虽然大小都是一样的,但是小而多的文件除了I/O读取速度之外,还有时间在硬盘上寻找路径。如果是大文件,就要用磁头找路径。

  5.2 WEB缓存应用程序

  缓存有很多种,但并不是所有的都可以在WEB上使用。比如缓存和磁盘缓存都和操作系统有关。WEB语言作为一种高级语言,无法控制底层。所以只有三种缓存可以在网络上使用:

  首先,缓存放在内存中。

  第二,缓存作为文件放在硬盘中。

  第三,缓存在客户端浏览器上。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: