zoukankan      html  css  js  c++  java
  • vmtouch命令

    前段时间在dbanotes上看到一篇讲Instagram后台架构的文章,文中提到了Instagram使用的一个小命令vmtouch,觉得挺有意思的,特此推荐一下。

    先看一下vmtouch作者给的介绍:

    vmtouch is a tool for learning about and controlling the file system cache of unix and unix-like systems.

    从介绍可以看出vmtouch是一个管理和控制Unix和类Unix文件系统缓存的工具。

    vmtouch的主要功能如下:

    • 查看一个文件(或者目录)哪些部分在内存中;
    • 把文件调入内存;
    • 把文件清除出内存;
    • 把文件锁住在内存中而不被换出到磁盘上;

    由于vmtouch是个比较小众的命令,很多Linux发行版不带这个命令,所以如果要使用这个命令要自己先编译一个。

    抄了几个vmtouch的用法:

    1. 看看/bin目录有多少内容在内存中

    $ vmtouch /bin/
    Files: 92
    Directories: 1
    Resident Pages: 348/1307 1M/5M 26.6%
    Elapsed: 0.003426 seconds

    2. 看看某文件(big-dataset.txt)有多少在内存中

    How much of big-dataset.txt is currently in memory?

    $ vmtouch -v big-dataset.txt
    big-dataset.txt
    [ ] 0/42116

    Files: 1
    Directories: 0
    Resident Pages: 0/42116 0/164M 0%
    Elapsed: 0.005182 seconds

    然后读入部分文件,

    $ tail -n 10000 big-dataset.txt > /dev/null

    然后在用vmtouch查看一下:

    $ vmtouch -v big-dataset.txt
    big-dataset.txt
    [ oOOOOOOO] 4950/42116

    Files: 1
    Directories: 0
    Resident Pages: 4950/42116 19M/164M 11.8%
    Elapsed: 0.006706 seconds

    我们可以看出big-datset.txt开始时没有数据在内存中,在用tail命令读入了部分数据后,有19MB的数据进入了内存。

    3. 把文件(a.txt)清除出内存

    $ vmtouch -ve a.txt
    Evicting a.txt

    Files: 1
    Directories: 0
    Evicted Pages: 42116 (164M)
    Elapsed: 0.076824 seconds

    vmtouch主要作用是做数据的warmup,即对于将要用到的数据,通过vmtouch把它们事先读入内存,而不是在需要时再从硬盘上读入,这样可以提高系统效率。

    对于vmtouch的实现,一个核心的函数是mincore(), 看一下它的manual:

    mincore - determine whether pages are resident in memory

           #include <unistd.h>
           #include <sys/mman.h>

           int mincore(void *addr, size_t length, unsigned char *vec)

    mincore()需要调用者传入文件的地址(通常由mmap()返回),它会把文件在内存中的情况写在vec中。

  • 相关阅读:
    免费报表工具 积木报表(JiMuReport)的安装
    jeecgboot积木报表(jimuReport)SQL Server切换
    Machine Learning目录
    Pytorch05_torch安装(GPU版)
    Pytorch04_RNN结构
    Pytorch03_张量变化
    Pytorch02_GPU加速
    Pytorch01_通用结构
    怎么将本地文件上传到远程git仓库
    SpringCloud-微服务架构编码构建
  • 原文地址:https://www.cnblogs.com/coldplayerest/p/2371881.html
Copyright © 2011-2022 走看看