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 acache 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:
Operator Name Description | Union/Addition All pages present in either or both input snapshots. + Union/Addition Identical to the | operator. & Intersection Only pages that are present in both of the input snapshots. - Subtraction All pages present in the first (left-side) input snapshot, as long as they don't appear in the second (right-hand) input snapshot. ^ Delta All 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!