zoukankan      html  css  js  c++  java
  • flashcache 介绍

    rpm:

      flashcache-utils-0.0-4.1.el6.x86_64

      kmod-flashcache-0.0-3.el6.x86_64

    基本介绍:

      Flashcache是Facebook技术团队开发的一个内核模块,通过在文件系统(VFS)和设备驱动之间新增一次缓存层,可以用SSD作为介质的缓存,通过将传统硬盘上的热门数据缓存到SSD上,加速服务器磁盘读写性能。最初是为加速MySQL设计

       Flashcache是基于dm框架实现的,很自然的,是把一个SSD盘和一个机械硬盘聚合成一个虚拟设备供用户使用。

      基本原理图:

      

      Flashcache在内核的层次:

        

      

    基本命令行:

      /sbin/flashcache_create
      /sbin/flashcache_destroy
      /sbin/flashcache_load
      /sbin/flashcache_scan
      /sbin/flashcache_setioctl
      /sbin/flashstat
      /sbin/get_agsize
      /usr/lib/ocf/resource.d/flashcache
      /usr/share/doc/flashcache-utils-0.0/GPL-v2.0.txt

    root@vClass-tekKw queue]# rpm -ql kmod-flashcache-0.0-3.el6.x86_64
    /etc/depmod.d/kmod-flashcache.conf
    /lib/modules/2.6.32-220.17.6.el6.x86_64
    /lib/modules/2.6.32-220.17.6.el6.x86_64/extra
    /lib/modules/2.6.32-220.17.6.el6.x86_64/extra/flashcache
    /lib/modules/2.6.32-220.17.6.el6.x86_64/extra/flashcache/flashcache.ko
    /usr/share/doc/kmod-flashcache-0.0
    /usr/share/doc/kmod-flashcache-0.0/GPL-v2.0.txt
    /usr/share/doc/kmod-flashcache-0.0/README
    /usr/share/doc/kmod-flashcache-0.0/flashcache-doc.txt
    /usr/share/doc/kmod-flashcache-0.0/flashcache-sa-guide.txt

    flashcache_create 命令

    [root@vClass-tekKw rc.d]# flashcache_create
    Usage: flashcache_create [-v] [-p back|thru|around] [-b block size] [-m md block size] [-s cache size] [-a associativity] cachedev ssd_devname disk_devname
    Usage : flashcache_create Cache Mode back|thru|around is required argument
    Usage : flashcache_create Default units for -b, -m, -s are sectors, or specify in k/M/G. Default associativity is 512.
    git commit: 

    flashcache_create相关参数说明:

    -p:缓存模式     writeback(数据先写到SSD,随后写到普通硬盘),
                        writethrough(数据同时写到SSD和普通硬盘),
                        writearound(数据绕过SSD,直接写到普通硬盘)三种,三种模式的所有读都会被缓存到flashcache可以通过dev.flashcache.<cachedev>.cache_all参数调整
    -s:缓存大小,可选项,如果未指定则整个SSD设备被用于缓存,默认的计数单位是扇区(sectors),但是可以接受k/m/g单位。
    -b:指定块大小,可选项,默认为4KB,必须为2的指数。默认单位为扇区。也可以用K作为单位,一般选4KB。
    -f:强制创建,不进行检查
    -m:设备元数据块大小,只有writeback需要存储metadata块,默认4K

    创建Flashcache

    SSD:/dev/sdc
    SAS:/dev/sdb2
    创建设备名为cachedev的flashcache
    flashcache_create -p back -b 4k cachedev /dev/sdc /dev/sdb2

    生成/dev/mapper/cachedev设备
    指定flashcache的block大小与Percona的page大小相同,一般默认 

    加载缓存设备

    flashcache_load /dev/sdc  cachedev (系统重启时使用来加载已经创建过的缓存设备cachedev)

    加载已存在的flashcache操作仅用于writeback模式,writethrough和writearound模式重启机器后需要重新使用flashcache_create创建

    使用Flashcache

    创建好的flashcache设备是块设备,可格式文件系统后挂在使用,也可以继续对其分区等

    mount /dev/mapper/cachedev /data

    销毁Flashcache

    flashcache_destroy /dev/sdc  

    这种方式删除writeback模式的flashcache时会将SSD上的所有数据删除包括脏数据

    建议使用dmsetup命令(device-mapper软件包)删除,会自动将脏数据写入磁盘

    dmsetup remove cachedev

    Flashcache参数优化

     1 [root@localhost ]#sysctl dev.flashcache
     2 dev.flashcache.sdc+sdb2.io_latency_hist = 0
     3 dev.flashcache.sdc+sdb2.do_sync = 0
     4 dev.flashcache.sdc+sdb2.stop_sync = 0
     5 dev.flashcache.sdc+sdb2.dirty_thresh_pct = 20
     6 dev.flashcache.sdc+sdb2.max_clean_ios_total = 4
     7 dev.flashcache.sdc+sdb2.max_clean_ios_set = 2
     8 dev.flashcache.sdc+sdb2.do_pid_expiry = 0
     9 dev.flashcache.sdc+sdb2.max_pids = 100
    10 dev.flashcache.sdc+sdb2.pid_expiry_secs = 60
    11 dev.flashcache.sdc+sdb2.reclaim_policy = 0
    12 dev.flashcache.sdc+sdb2.zero_stats = 0
    13 dev.flashcache.sdc+sdb2.fast_remove = 0
    14 dev.flashcache.sdc+sdb2.cache_all = 1
    15 dev.flashcache.sdc+sdb2.fallow_clean_speed = 2
    16 dev.flashcache.sdc+sdb2.fallow_delay = 900
    17 dev.flashcache.sdc+sdb2.skip_seq_thresh_kb = 0
    18 dev.flashcache.sdc+sdb2.clean_on_read_miss = 0
    19 dev.flashcache.sdc+sdb2.clean_on_write_miss = 0
    20 dev.flashcache.sdc+sdb2.lru_promote_thresh = 2
    21 dev.flashcache.sdc+sdb2.lru_hot_pct = 75
    22 dev.flashcache.sdc+sdb2.new_style_write_merge = 0
     1 dev.flashcache.fast_remove:      删除flashcache卷时不同步脏缓存块。这个选项用来快速删除。
     2 dev.flashcache.zero_stats:       统计信息归零。
     3 dev.flashcache.reclaim_policy:    缓存回收规则。有两种算法:先进先出FIFO(0),最近最少用LRU(1).默认是FIFO。
     4 dev.flashcache.write_merge:      启用写入合并,默认是开启的。
     5 dev.flashcache.dirty_thresh_pct:flachcache    尝试保持每个单元的脏块在这个n%以下。设置低增加磁盘写入和降低块重写,但是增加了块读取缓存的可用性。
     6 dev.flashcache.do_sync:               调度清除缓存中的所有脏块。
     7 dev.flashcache.stop_sync:              停止同步操作。
     8 dev.flashcache.cache_all:              全局缓存模式:缓存所有和全部不缓存。默认是缓存所有。
     9 dev.flashcache.fallow_delay:            清除脏块的间隔。默认60s。设置为0禁止空闲,彻底清除。
    10 dev.flashcache.io_latency_hist:          计算IO等待时间,并绘制直方图。
    11 dev.flashcache.max_clean_ios_set:          在清除块时,每单元最大写入出错。
    12 dev.flashcache.max_clean_ios_total:        在同步所有块时,最大写入问题。
    13 dev.flashcache.debug:                开启debug。
    14 dev.flashcache.do_pid_expiry:            在白/黑名单上启用逾期的pid列表。
    15 dev.flashcache.pid_expiry_secs:          设置pid白/黑名单的逾期。
    16 dev.flashcache.max_pids:              最大数量的pid白/黑名单。

      参数介绍参考:https://github.com/facebook/flashcache/blob/master/doc/flashcache-sa-guide.txt

    针对MySQL作此优化:

    1 dev.flashcache.sdc+sdb2.cache_all = 1         默认值1表示缓存所有,0都不缓存,另外通过进程黑白名单控制
    2 dev.flashcache.sdc+sdb2.reclaim_policy = 1       缓存回收策略,0:FIFO,1:LRU,可动态调整
    3 dev.flashcache.sdbc+sdb2.fast_remove = 1       0  表示不同步脏块到磁盘,1表示同步脏块到磁盘
    4 dev.flashcache.sdc+sdb2.dirty_thresh_pct = 90     每组脏块占有的百分比,过低会减少块覆盖,增加磁盘写操作和读缓存
    5 dev.flashcache.sdc+sdb2.new_style_write_merge = 1  打开写入合并,提升写磁盘的性能(旧版本dev.flashcache.sdc+sdb2.write_merge)
    6 dev.flashcache.sdb1+sda6.skip_seq_thresh_kb = 256  表示不缓存超过256kb的顺序IO(由于SSD的随机读写比SAS好,但顺序读写相差不大,故作此优化)

    Flashcache开机启动

    flashcache模块自动加载–flashcache设备自动加载flashcache_load /dev/sdc  cachedev

    A.模块自动加载请参考安装部分

    B.开机自动加载已创建的缓存设备及挂载

     1 cd /usr/src/flashcache-3.1.2/utils
     2 cp flashcache /etc/init.d/
     3 chmod +x /etc/init.d/flashcache 
     4 修改/etc/init.d/flashcache
     5 SSD_DISK= /dev/sdc
     6 BACKEND_DISK= /dev/sdb2
     7 CACHEDEV_NAME= cachedev
     8 MOUNTPOINT= /data
     9 FLASHCACHE_NAME=sdc+sdb2
    10 chkconfig flashcache on

    Flashcache状态监控

     1 dmsetup status cachedev
     2 dmsetup table  cachedev
     3  
     4 错误日志报告 
     5 /proc/flashcache/sdc+sdb2/flashcache_errors
     6  
     7 状态报告
     8 /proc/flashcache/sdc+sdb2/flashcache_stats
     9  
    10 亦可使用flashstat命令实时查看

    注意事项:

    1.100G SSD + 2T SATA是一个具有现实参考意义的案例。

    2.把Mysql的随机读写与顺序读写分离(即把log直接放在后端的磁盘上,而不能放在mapper盘上),这样性能会提高很多。

    3.用来跳过顺序IO的一个参数。

     dev.flashcache..skip_seq_thresh_kb 
    

    4.带有flashcache的机器,在关机时需要耗费大量时间整理脏块。

    5.服务器掉电有导致分区损坏的可能,且通过fsck无法修复。

    6.flashcache_create创建了缓存设备之后挂载即可使用,如创建之后使用flashcache_load /dev/sdc  cachedev会提示Invalid Flashcache superblock的错误

    参考:

      SSD+Flashcache 的理解 RAID了解          http://blog.csdn.net/caoshuming_500/article/details/7495323
      Flashcache基本使用及注意事项             http://blog.csdn.net/werm520/article/details/42638897
      命中率80%,磁盘I/O减半,Flashcache的发展史     http://www.csdn.net/article/2013-10-31/2817357-facebook-flashcache-2010-2013
      flashcache的实现与分析                http://blog.csdn.net/kidd_3/article/details/6984822
      flashcache原理                    http://www.udpwork.com/item/8437.html 
      Flashcache基本使用及注意事项             http://www.simlinux.com/archives/398.html
      Flashcache初探                    http://blog.chinaunix.net/uid-26950862-id-3948198.html
      如何使用FlashCache技术加速                 https://zhidao.baidu.com/question/1768060642827049340.html
      FlashCache初探(二)                  http://www.cnblogs.com/remimin/archive/2012/04/16/2451002.html
      Centos安装Flashcache使用SSD缓存                         http://www.haiyun.me/archives/centos-flashcache.html
      linux内核源码阅读之facebook硬盘加速利器flashcache之初                      http://blog.csdn.net/liumangxiong/article/details/11643473

  • 相关阅读:
    环境部署(二):Linux下安装jenkins
    环境部署(一):Linux下安装JDK
    jenkins简单安装及配置(Windows环境)
    python相关资料链接
    性能测试相关资料链接
    管理篇:测试Leader应该做哪些事
    进阶篇:软件测试工程师的岗位职责
    基础篇:如何做一名专业的软件测试工程师
    python:面向对象编程之Zope.interface安装使用
    Django:Python3.6.2+Django2.0配置MySQL
  • 原文地址:https://www.cnblogs.com/doscho/p/6924376.html
Copyright © 2011-2022 走看看