vmtouch - the Virtual Memory Toucher

https://hoytech.com/vmtouch/

 

[root@localhost ~]# git clone git://github.com/hoytech/vmtouch.git  
正克隆到 'vmtouch'...
remote: Counting objects: 296, done.
remote: Total 296 (delta 0), reused 0 (delta 0), pack-reused 296
接收对象中: 100% (296/296), 285.79 KiB | 24.00 KiB/s, 完成.
处理 delta 中: 100% (144/144), 完成.
检查连接... 完成。
[root@localhost ~]# cd vmtouch
[root@localhost vmtouch]# make cc -Wall -O2 -g -o vmtouch vmtouch.c pod2man --section 8 --center "System Manager's Manual" --release " " vmtouch.pod > vmtouch.8 [root@localhost vmtouch]# make install mkdir -p /usr/local/bin /usr/local/man/man8 install -m 0755 vmtouch /usr/local/bin/vmtouch install -m 0644 vmtouch.8 /usr/local/man/man8/vmtouch.8 [root@localhost vmtouch]# /usr/local/bin/vmtouch /usr/local/bin/vmtouch: no files or directories specified vmtouch v1.0.2 - the Virtual Memory Toucher by Doug Hoyte Portable file system cache diagnostics and control Usage: vmtouch [OPTIONS] ... FILES OR DIRECTORIES ... Options: -t touch pages into memory -e evict pages from memory -l lock pages in physical memory with mlock(2) -L lock pages in physical memory with mlockall(2) -d daemon mode -m <size> max file size to touch -p <range> use the specified portion instead of the entire file -f follow symbolic links -h also count hardlinked copies -w wait until all pages are locked (only useful together with -d) -v verbose -q quiet
vmtouch v1.0.2 - the Virtual Memory Toucher by Doug Hoyte Portable file system cache diagnostics and control Usage: vmtouch [OPTIONS] ... FILES OR DIRECTORIES ... Options: -t touch pages into memory -e evict pages from memory -l lock pages in physical memory with mlock(2) -L lock pages in physical memory with mlockall(2) -d daemon mode -m <size> max file size to touch -p <range> use the specified portion instead of the entire file -f follow symbolic links -h also count hardlinked copies -w wait until all pages are locked (only useful together with -d) -v verbose -q quiet
[root@localhost vmtouch]# vmtouch -t /data Files: 193 Directories: 7 Touched Pages: 46138 (180M) Elapsed: 6.6931 seconds [root@localhost vmtouch]# vmtouch -t /data/test/t.MYD Files: 1 Directories: 0 Touched Pages: 1 (4K) Elapsed: 0.000242 seconds [root@localhost vmtouch]# vmtouch -e /data/test/t.MYD Files: 1 Directories: 0 Evicted Pages: 1 (4K) Elapsed: 7.7e-05 seconds [root@localhost vmtouch]# vmtouch -e /data Files: 193 Directories: 7 Evicted Pages: 46138 (180M) Elapsed: 0.027778 seconds

[root@localhost vmtouch]# vmtouch -e /data/test/t.MYD -v
  Evicting /data/test/t.MYD

  Files: 1
  Directories: 0
  Evicted Pages: 1 (4K)
  Elapsed: 0.000181 seconds

 

Portable file system cache diagnostics and control

vmtouch is a tool for learning about and controlling the file system cache of unix and unix-like systems. It is BSD licensed so you can basically do whatever you want with it.

Quick install guide:

$ git clone https://github.com/hoytech/vmtouch.git
$ cd vmtouch
$ make
$ sudo make install

What is it good for?

  • Discovering which files your OS is caching
  • Telling the OS to cache or evict certain files or regions of files
  • Locking files into memory so the OS won't evict them
  • Preserving virtual memory profile when failing over servers
  • Keeping a "hot-standby" file-server
  • Plotting filesystem cache usage over time
  • Maintaining "soft quotas" of cache usage
  • Speeding up batch/cron jobs
  • And much more...

Examples

Example 1

How much of the /bin/ directory is currently in cache?

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

Example 2

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

None of it. Now let's bring part of it into memory with tail:

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

Now how much?

$ 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

vmtouch tells us that 4950 pages at the end of the file are now resident in memory.

Example 3

Let's touch the rest of /big-dataset.txt/ and bring it into memory (pressing enter a few times to illustrate the animated progress bar you will see on your terminal):

$ vmtouch -vt big-dataset.txt
big-dataset.txt
[OOo                                                 oOOOOOOO] 6887/42116
[OOOOOOOOo                                           oOOOOOOO] 10631/42116
[OOOOOOOOOOOOOOo                                     oOOOOOOO] 15351/42116
[OOOOOOOOOOOOOOOOOOOOOo                              oOOOOOOO] 19719/42116
[OOOOOOOOOOOOOOOOOOOOOOOOOOOo                        oOOOOOOO] 24183/42116
[OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOo                  oOOOOOOO] 28615/42116
[OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOo              oOOOOOOO] 31415/42116
[OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOo      oOOOOOOO] 36775/42116
[OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOo  oOOOOOOO] 39431/42116
[OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO] 42116/42116

           Files: 1
     Directories: 0
   Touched Pages: 42116 (164M)
         Elapsed: 12.107 seconds

Example 4

We have 3 big datasets, a.txtb.txt, and c.txt but only 2 of them will fit in memory at once. If we have a.txtand b.txt in memory but would now like to work with b.txt and c.txt, we could just start loading up c.txt but then our system would evict pages from both a.txt (which we want) and b.txt (which we don't want).

So let's give the system a hint and evict a.txt from memory, making room for c.txt:

$ vmtouch -ve a.txt
Evicting a.txt

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

Example 5

Daemonise and lock all files in a directory into physical memory:

vmtouch -dl /var/www/htdocs/critical/

What other people are saying

People have found lots of uses for vmtouch over the years. Here are a few links in no particular order:

Articles

Real-world sightings

Instagram

Discussion about instagram's usage of vmtouch:

Stack-overflow and friends

OS packages/ports

Non-english

  • Spanish: 1
  • French: 1 2
  • Chinese: 1 2 3 4 5 6
  • Russian: 1 2 3
  • Polish: 1

Misc

Other tools

There are also lots of mentions on twitter using the #vmtouch hash-tag

Have another link? Please let me know!

Author

vmtouch is copyright (c) 2009-2016 Doug Hoyte and contributors.

Contributors are listed in CHANGES.

posted @ 2016-07-02 23:12  zengkefu  阅读(924)  评论(0编辑  收藏  举报