• glance cache


    用在多个glance API server 中,对相同的image文件提供服务。该cache对用户透明。
    配置文件有一个image_cache_max_size,超过的话image cache会被修剪pruner.
    然而,当GET /images/<IMAGE_ID>成功返回一个image时,不管是否超cache,该image都会写入到cache中。
    实践中,一般都cron来运行glance-cache-pruner。
     
    glance cache工具有:
    1. glance-cache-cleaner    
    随着时间推移,image cache中会有一些Stalled和Invalid image。
    Stalled image是image没有完全写入到cache,invalid是没有正确的写入到disk中。
    可以cron 运行 glance-cache-cleaner。
     
    2. glance-cache-manage     
    3. glance-cache-prefetcher 
    先把热点image queued起来,放到queue中。
    • 如果enable了  cache_manage middleware 可以PUT /queued-images/<IMAGE_ID>
    • 或者可以使用glance-cache-manage,该命令还可以其他host来运行
    $> glance-cache-manage --host=<HOST> queue-image <IMAGE_ID>
    Queue image 6ee64b2e-48e3-4dc9-8c43-bc5a4ccc12a9 for caching? [y/N] y
    queue/
    └── 6ee64b2e-48e3-4dc9-8c43-bc5a4ccc12a9
    仅仅是在queue目录下touch一个文件
    一旦queued images,就可以prefetch,运行glance-cache-prefetcher,其可以并行的prefetch所有的queued images
     
    class Prefetcher:
    def run(self):
    查看queue中的image
    每个image启动一个eventlet运行self.fetch_image_into_cache 分chunk读入到/opt/stack/data/glance/cache/incomplete
    完成后,移入到/opt/stack/data/glance/cache/ 并且删除queue/
    ll -sh incomplete/6ee64b2e-48e3-4dc9-8c43-bc5a4ccc12a9
    1.6G -rw-rw-r-- 1 yuntong yuntong 1.6G 10月 14 15:21 incomplete/6ee64b2e-48e3-4dc9-8c43-bc5a4ccc12a9
    4. glance-cache-pruner
    3方法list image cache中的images:

    1. 如果enable了  cache_manage middleware,可以 GET/cached-images

    2. 使用glance-cache-manage

     $> glance-cache-manage --host=<HOST> list-cached

    3.直接查看cache目录

    $> ls -lhR $IMAGE_CACHE_DIR

    在devstack中,image_cache_dir = /opt/stack/data/glance/cache/

    手动移除cache中的image
    1. 如果enable了  cache_manage middlewareDELETE /cached-images/<IMAGE_ID> 
    2.使用 glance-cache-manage 
    $> glance-cache-manage --host=<HOST> delete-cached-image <IMAGE_ID>

    http://docs.openstack.org/developer/glance/cache.html

    cache的driver有2种:

    1. sqlite,  cache信息存在DB中:

                cur = db.execute("""SELECT
                                 image_id, hits, last_accessed, last_modified, size
                                 FROM cached_images
                                 ORDER BY image_id""")

    def get_cache_size(self):
    计算目录大小/opt/stack/data/glance/cache/
    def get_hit_count 从DB
    def get_cached_images DB
    def is_cached 查看文件是否存在
    def is_queued 是否在/opt/stack/data/glance/cache/queue目录中
    def is_being_cached 是否在/opt/stack/data/glance/cache/incomplete目录中
    delete_all_cached_images 删除文件和DB信息
    def queue_image 在/opt/stack/data/glance/cache/queue touch一个文件
    和incomplete一起工作,实现commit/rollback

    2.xattr: cache信息从文件中获取

    def get_hit_count
    return int(get_xattr(path, 'hits', default=0))

                entry['last_modified'] = file_info[stat.ST_MTIME]
                entry['last_accessed'] = file_info[stat.ST_ATIME]
                entry['size'] = file_info[stat.ST_SIZE]
                entry['hits'] = self.get_hit_count(image_id)

  • 相关阅读:
    东芝开发板驱动OLED模块显示LOGO图片
    东芝MCU实现位带操作
    使用系统定时器SysTick实现精确延时微秒和毫秒函数
    VC++调试错误的解决方案
    #pragma once与 #ifndef的区别
    strcmp()字符串比较函数用法
    C、C++中的static和extern关键字
    error LNK1169 找到一个或多个多重定义的符号的解决方法
    vs2013编译obs源码
    Qt线程—QThread的使用--run和movetoThread的用法
  • 原文地址:https://www.cnblogs.com/allcloud/p/4882476.html
Copyright © 2020-2023  润新知