The Official Vmprobe Blog

vmprobe 0.3 series released

2016-06-03

We've taken a step back with this release in order to consolidate and simplify the virtual memory interface. The REST API and vmprobed packages weren't as flexible as we were hoping so they've been removed for now. We've got another API-like interface in the works — it's going to be really cool!

In the mean-time, 0.3 has a bunch of neat features you might like to play with. See the filesystem cache documentation for more details.

  • Wide snapshot display: Arbitrarily detailed insight into your snapshots:

    $ vmprobe cache show big-file -w 1000
    ==== mincore ====
    
    
    31M/359M (8.8%)    ███▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ ▁▁▁▁ ▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▅██████████▆▁▁▄█████▂▁▃█████▂▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ ▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ ▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ ▁▁▁ ▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ ▁▁▁▁ ▁▁▁▁ ▁▁▁ ▁▁▁▁▁▁▁▁▁▁ ▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ ▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ ▁▁▁▁▁▁▁▁▁▁▁▁▁▁ ▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▃███████████████████████▅▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ ▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▆███████████████▅▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ ▂▄      ▁█    ▅ ▁█▂                                            
    
    
      Total: 31M/359M (8.8%)
    
  • pagemap flags: Inspect any linux pagemap flags, not just mincore:

    $ vmprobe cache show -f active,mincore,referenced -n 3 /lib
    ==== active ====
    
    
    1M/1M (91.9%)      █████████████████▃▂        /x86_64-linux-gnu/libc-2.21.so
    1M/2M (70.8%)      ████▇ ▅██▅████████▃█       /x86_64-linux-gnu/libcrypto.so.1.0.0
    768K/1M (72.5%)    ████▄▁█████▂ ▅█▇▂          /x86_64-linux-gnu/libm-2.21.so
    
    
      Total: 8M/1G (0.5%)
    
    
    ==== mincore ====
    
    
    2M/2M (91.1%)      ██████████████████▆█ ▄██   /x86_64-linux-gnu/libcrypto.so.1.0.0
    1M/1M (96.3%)      █████████████████▃█▁       /x86_64-linux-gnu/libc-2.21.so
    820K/1M (58.9%)     ▂▁██████▆▃█▅███▅▆▄        /systemd/systemd
    
    
      Total: 10M/1G (0.6%)
    
    
    ==== referenced ====
    
    
    1M/2M (76.2%)      █████▃████████████▅█       /x86_64-linux-gnu/libcrypto.so.1.0.0
    1M/1M (95.4%)      █████████████████▃▇▁       /x86_64-linux-gnu/libc-2.21.so
    748K/1M (70.6%)    ████▄▁█████▂ ▅█▆           /x86_64-linux-gnu/libm-2.21.so
    
    
      Total: 8M/1G (0.5%)
    
  • Command tracing: Any additional arguments to cache show are interpeted as a command to run.

    $ vmprobe cache show -r 0.25 manual.pdf -- md5sum manual.pdf         
    61M/359M (17.2%)   ████▃                      
    134M/359M (37.4%)  █████████▃                 
    199M/359M (55.7%)  ██████████████             
    264M/359M (73.8%)  ██████████████████▄        
    330M/359M (92.1%)  ███████████████████████▁   
    359M/359M (100.0%) █████████████████████████  
    
  • Database and computed snapshot expressions: Snapshots and traces can be saved to a database, and can be arbitrarily combined through a powerful expression language:

    First init the database:

    $ vmprobe db init
    vmprobe db initialized: /home/doug/.vmprobe
    

    Then add the -s option to a cache show command and it will be saved to the database:

    $ vmprobe cache show -s /path/goes/here/
    Probe id: xCnP5x8j4Bik3j2wN0risK
      Entry: 1464967629026370
    

    Now you can combine the saved snapshots with expressions:

    $ vmprobe db show '(YY7WCbbJi6civjnBgqzmFd.last - 1464895801826439) & 0D1sGvlcEgjy2nT9Z0Cimi.first.flag(active)'
    

    Here is a table of the supported operators:

    OperatorNameDescription
    |Union/AdditionAll pages present in either or both input snapshots.
    +Union/AdditionIdentical to the | operator.
    &IntersectionOnly pages that are present in both of the input snapshots.
    -SubtractionAll pages present in the first (left-side) input snapshot, as long as they don't appear in the second (right-hand) input snapshot.
    ^DeltaAll pages that are different in the two input snapshots.

If you'd like to give it a try, please head over to the vmprobe install page!