zoukankan      html  css  js  c++  java
  • linux系统读写缓存

    1.  操作系统缓存
    在linux世界里,一切可读写设备都可看作是文件。文件cache设计的好坏直接影响着文件系统和磁盘的性能。最直观的是使用free命令看到的cached列。
    这里面的cached列就是操作系统缓存,操作系统会把空闲的内存拿来做缓存,提高系统性能。当然这里的cached不仅仅缓存文件的数据。操作系统的cache是通过page的方式管理的,内从管理系统分配和回收cache的最小单位是page。这个cache由多个page cache组成,每个page cache又包含多个buffer cache。VF(虚拟文件系统)和内从管理系统只与page cache交互,具体的文件系统和buffer cache交互。
     
    2. 操作系统缓存读写方式
    操作系统默认的读写都是有缓存的,如果想使用直接io,需要设置direct_io为true。缓存可以提高系统的读取速度,当第一次读取一个文件的时候,操作系统会把文件内从读入cache中,然后返回给用户;第二次读取的时候首先会从cache中检查,命中后返回给用户。
    操作系统IO有通写和回写两种写方式:
    write through (通写)
    可以理解IO通过的地方都写入。这种方式在写数据时,先写cache再写磁盘,写磁盘成功后通知磁盘控制器返告知操作系统本次IO成功,操作系统再通知上层应用IO成功。
    write back (回写)
    操作系统把数据写入cache后便告知上层应用IO成功,其实此时并没有把数据持久化到磁盘介质。何时把cache刷入磁盘由操作系统的实现策略:比如cache空间满、调用sync显示的把cache刷入磁盘等。
    注意:回写和异步写不同,异步写在写成功后会通知调用层,而回写在写入磁盘后不会通知调用层。所以回写成功只意味着写入操作系统缓存成功了,在返回io返回成功的情况下依然可能丢数据;而异步写告诉调用层io成功意味着数据已经被持久化到存储介质中了。
    通写和回写优缺点:
    write through
    优点:无丢数据风险:由于返回IO成功即表示持久化成功,那么掉电也不会丢失任何数据,
    缺点:写入速度慢:要写内存和磁盘两份数据
    write back
    优点:写入速度快:只要写入cache成功即可返回
    缺点:有丢数据风险:如果cache中的数据没有刷入磁盘时断电,cache中的数据会丢失。
     
    两种方式应用场景:
    write through 一般应用在数据一致性要求高的场合
    write back 写方式一般应用在对一致性要求不高且需要很好读写性能场景
     
    下面以cp命令做个例子
     
     
     
    a. 初始时系统cache为60M
    b. 使用dd命令生成一个10M的块设备,此时iotest.dat数据被缓存到cache中,cache变为70M
    c. cp iotest.dat iotest.dat.1 会直接从内存中读取iotest.dat文件,然后写入到cache中。难道cache此时缓存了两份iotest.dat的数据?
    d. 继续调用cp iotest.dat iotest.dat.2,cache变为了90M。可见cache中写时缓存不会对内容去重,缓存了3分相同内容的文件(iotest.dat iotest.dat.1 iotest.dat.2)。
    e. 继续调用cp iotest.dat iotest.dat.1,由于在cache中iotest.dat 和iotest.dat.1都已被缓存,所以此处cache不在发生变化。(此处猜测cache支持文件级别去重,不支持内容去重)
  • 相关阅读:
    数字货币量化分析[2018-06-04]
    主流币空转多。数字货币量化分析[2018-05-31]
    草莓糖CMT依旧强势,数字货币量化分析[2018-05-29]
    数字货币量化分析[2018-05-28]
    Python3中json的encode和decode
    如何选择数字货币交易所?
    数字货币量化分析[2018-05-27]
    数字货币量化分析[2018-05-26]
    Python3中的urlencode和urldecode
    Zipline Development Guidelines
  • 原文地址:https://www.cnblogs.com/zengkefu/p/5759335.html
Copyright © 2011-2022 走看看