blob: ddd25a96c823d2234a9d229b48c736535eef761f [file] [log] [blame]
Memtoy - a toy [tool] for performing various memory
operations [mapping, protection, faulting] for investigating
vm behavior.
N.B., migrate command depends on Ray Bryant's "Manual Page Migration"
patches, atop the Memory Hotplug page migration patches.
May be run interactively or from a script [see ./test*].
Use 'help' command interactively, or, e.g.,
echo help | ./memtoy
Supported commands [augmented help]:
quit - just what you think
EOF on stdin has the same effect
help - show this help
help <command> - display help for just <command>
pid - show process id of this session
pause - pause program until signal -- e.g., INT, USR1
numa - display numa info as seen by this program.
shows nodes from which program may allocate memory
with total and free memory.
migrate <to-node-id[s]> [<from-node-id[s]>] -
migrate this process' memory from <from-node-id[s]>
to <to-node-id[s]>. Specify multiple node ids as a
comma-separated list. If both to and from nodes are
specified, the sets must have the same # of nodes,
and must not intersect. If <from-node-id[s]> is
omitted, <to-node-id[s]> must specify a single node.
show [<name>] - show info for segment[s]; default all
anon <seg-name> <seg-size>[k|m|g|p] [<seg-share>] -
define a MAP_ANONYMOUS segment of specified size
<seg-share> := private|shared - default = private
file <pathname> [<offset>[k|m|g|p] <length>[k|m|g|p]] [<seg-share>] -
define a mapped file segment of specified length starting at the
specified offset into the file. <offset> and <length> may be
omitted and specified on the map command.
<seg-share> := private|shared - default = private
shm <seg-name> <seg-size>[k|m|g|p] -
define a shared memory segment of specified size.
You may need to increase limits [/proc/sys/kernel/shmmax].
Use map/unmap to attach/detach
remove <seg-name> [<seg-name> ...] - remove the named segment[s]
map <seg-name> [<offset>[k|m|g|p] <length>[k|m|g|p]] [<seg-share>] -
mmap()/shmat() a previously defined, currently unmapped() segment.
<offset> and <length> apply only to mapped files.
Use <length> of '*' or '0' to map to the end of the file.
Offset and length specified here override those specified on
the file command.
unmap <seg-name> - unmap specified segment, but remember name/size/...
touch <seg-name> [<offset>[k|m|g|p] <length>[k|m|g|p]] [read|write] -
read [default] or write the named segment from <offset> through
<offset>+<length>. If <offset> and <length> omitted, touches all
of mapped segment.
mbind <seg-name> [<offset>[k|m|g|p] <length>[k|m|g|p]]
<policy> [<node/list>] -
set the numa policy for the specified range of the name segment
to policy -- one of {default, bind, preferred, interleaved}.
<node/list> specifies a node id or a comma separated list of
node ids. <node> is ignored for 'default' policy, and only
the first node is used for 'preferred' policy
where <seg-name> [<offset>[k|m|g|p] <length>[k|m|g|p]] -
show the node location of pages in the specified range
of the specified segment. <offset> defaults to start of
segment; <length> defaults to 64 pages.
Use SIGINT to interrupt a long display.
Note: to recognize the optional offset and length args, they must
start with a digit. This is required anyway because the strings are
converted using strtoul() with a zero 'base' argument. So, hex args
must always start with '0x'...