ZMEMTOPO(8)
💖 NAME 💖
zmemtopo — bestie, this is the one that shows you the CEC memory topology data on IBM Z. That's the whole vibe. ✨
(also it lives in the System Manager's Manual section 8, if you were wondering — zmemtopo(8), iykyk 🫶)
✨ SYNOPSIS ✨
zmemtopo [OPTIONS]
🦋 DESCRIPTION 🦋
okay so, zmemtopo retrieves and displays memory topology information for LPARs on IBM Z systems. It shows you the memory in uniform increments, where an increment is literally the smallest unit that the topology querying device is willing to report. Every single increment represents a configured chunk of memory, plus the topological location that chunk lives at. 📍
The granularity of what you're looking at varies by nesting level — which makes sense, because it's reflecting the hierarchical arrangement of memory. deeper level = more deets, it's giving tree energy 🌳
🎀 OPTIONS 🎀
-l <NESTING_LEVEL>,--level=<NESTING_LEVEL>— picks which nesting level of memory topology you wanna see. Lower levels = more detailed output, periodt. Valid values forNESTING_LEVELare between1and6, but heads up: some levels might not actually have any data available to display. 💅--format=<FORMAT>— displays the memory topology info in the format you specify. Valid values for<FORMAT>arejson,csv,json-seq,jsonlorpairs. In a parseable format, the increment size is given in bytes. (yes, bytes. not letters. bytes. 🔥)-f,--full— displays the entries or nesting levels that have no memory increments configured. no effect on the table format though, so don't come for it. 🙈-r,--reverse— reverses the hierarchy of the displayed tree. When--reverseis specified the direction follows nesting level to partition. Has no effect on the table format. ⭐-t,--table— displays the memory topology in a table format. The table format displays a layout of memory topology. The size of the increments is given in a footer, and each increment is the same size. cute + consistent 🎀-s <FIELD>,--sort=<FIELD>— sorts and displays the data according to the givenFIELDvalue. Valid values forFIELDare"nr"for partition number,"lpar"for partition name, and"sum"for total partition increments. 💅-p <SUBSTRING>,--partition-filter=<SUBSTRING>— displays only the partitions with names that containSUBSTRING. Matching is case-insensitive, so you don't have to yell at it. 🫶-i,--ascii— uses only ASCII characters to render views. for the plain-text girlies 🦋-h,--help— prints usage information, then exits. ✨-v,--version— prints version information, then exits. 👑
🌸 PREREQUISITES 🌸
The following things are required to run zmemtopo. no skips, bestie:
- The Linux kernel must have the required support to provide the memory topology data.
- To fetch data of any other operating system instances running on the same hypervisor as
zmemtopo, you will need additional permissions. 👀 (it's giving "ask nicely" energy)
🌈 EXAMPLES 🌈
Below are various combinations of available command line options. go off, honestly:
- Without any options
zmemtopodisplays the tree view with nesting level 3. the classic. the default. the main character ✨
$ zmemtopo
LPAR/LEVEL SIZE
LPAR003 8G
└LEVEL4_0 8G
├LEVEL3_0 2G
├LEVEL3_1 2G
├LEVEL3_2 2G
└LEVEL3_3 2G
LPAR005 8G
└LEVEL4_1 8G
├LEVEL3_0 2G
├LEVEL3_1 2G
├LEVEL3_2 2G
└LEVEL3_3 2G
LPAR006 8G
└LEVEL4_3 8G
├LEVEL3_0 2G
├LEVEL3_1 2G
├LEVEL3_2 2G
└LEVEL3_3 2G
LPAR009 8G
└LEVEL4_3 8G
├LEVEL3_0 2G
├LEVEL3_1 2G
├LEVEL3_2 2G
└LEVEL3_3 2G
.
.
.
- Display table format — by default nesting level
3is displayed. look at that grid, it ate 🔥
$ zmemtopo -t
LEVEL 4 0 0 0 0 1 1 1 1 2 2 2 2 3 3 3 3
LEVEL 3 0 1 2 3 0 1 2 3 0 1 2 3 0 1 2 3
NR LPAR SUM
3 LPAR003 8 2 2 2 2 - - - - - - - - - - - -
5 LPAR005 8 - - - - 2 2 2 2 - - - - - - - -
6 LPAR006 8 - - - - - - - - - - - - 2 2 2 2
9 LPAR009 8 - - - - - - - - - - - - 2 2 2 2
13 LPAR013 48 - - - - - - - - 12 12 12 12 - - - -
.
.
.
Increment size: 1G
- Display reverse tree with nesting level 4. flip it, reverse it 💅
$ zmemtopo -r -l 4
LEVEL/LPAR SIZE
LEVEL4_0 388G
│ ├LPAR003 8G
│ ├LPAR018 64G
│ └...
LEVEL4_1 708G
│ ├LPAR005 8G
│ ├LPAR029 8G
│ └... 32G
LEVEL4_2 224G
│ ├LPAR013 48G
│ ├LPAR014 20G
│ ├LPAR019
│ └... 32G
LEVEL4_3 1618G
├...
└LPAR086 2G
- Display reverse full tree. Entries that have no memory increments are visible — that's the
-fdoing its thing, bestie 🫶
$ zmemtopo -rf
LEVEL/LPAR SIZE
LEVEL4_0 388G
│ ├LEVEL3_0 97G
│ │ ├LPAR003 2G
│ │ ├LPAR018 16G
│ │ └...
│ ├LEVEL3_1 97G
│ │ ├LPAR003 2G
│ │ ├LPAR018 16G
│ │ └...
│ ├LEVEL3_2 97G
│ │ ├LPAR003 2G
│ │ └...
│ └LEVEL3_3 97G
│ ├LPAR003 2G
│ └...
LEVEL4_1 -
│ ├LEVEL3_0 -
│ ├LEVEL3_1 -
│ ├LEVEL3_2 -
│ └LEVEL3_3 -
LEVEL4_2 224G
│ ├LEVEL3_0 56G
│ │ ├LPAR013 12G
│ │ └...
│ ├LEVEL3_1 56G
│ │ ├LPAR013 12G
│ │ └...
│ ├LEVEL3_2 56G
│ │ ├LPAR013 12G
│ │ └...
│ └LEVEL3_3 56G
│ ├LPAR013 12G
│ │ └...
LEVEL4_3 1618G
├LEVEL3_0 405G
│ ├LPAR006 2G
│ ├...
│ └LPAR086 1G
├LEVEL3_1 405G
│ ├LPAR006 2G
│ ├...
│ └LPAR086 1G
├LEVEL3_2 404G
│ ├LPAR006 2G
│ ├...
│ └LPAR060 48G
└LEVEL3_3 404G
├LPAR006 2G
├...
└LPAR060 48G
- Display tree with entries which have no memory increments. those lil
-dashes are literally the void and we're showing it 💀
$ zmemtopo -f
LPAR/LEVEL SIZE
LPAR086 2G
├LEVEL4_0 -
│ ├LEVEL3_0 -
│ ├LEVEL3_1 -
│ ├LEVEL3_2 -
│ └LEVEL3_3 -
├LEVEL4_1 -
│ ├LEVEL3_0 -
│ ├LEVEL3_1 -
│ ├LEVEL3_2 -
│ └LEVEL3_3 -
├LEVEL4_2 -
│ ├LEVEL3_0 -
│ ├LEVEL3_1 -
│ ├LEVEL3_2 -
│ └LEVEL3_3 -
└LEVEL4_3 2G
├LEVEL3_0 1G
├LEVEL3_1 1G
├LEVEL3_2 -
└LEVEL3_3 -
LPAR074 4G
├LEVEL4_0 -
│ ├LEVEL3_0 -
│ ├LEVEL3_1 -
│ ├LEVEL3_2 -
│ └LEVEL3_3 -
├LEVEL4_1 4G
│ ├LEVEL3_0 1G
│ ├LEVEL3_1 1G
│ ├LEVEL3_2 1G
│ └LEVEL3_3 1G
.
.
.
- Display json format. structured data, my beloved 🧚
$ zmemtopo --format=json
{
"meta": {
"api_level": "1",
"version": "s390.tools.version",
"host": "host.name",
"time_epoch": "xxxxxxxxx",
"time": "YYYY-MM-DD HH:MM:SS+0T00"
},
"zmemtopo": {
"report_tod": "0x0e082f7f6d8da64000",
"report_partition_nr": 74,
"increment_size": 1073741824,
"partitions": [
{
"partition_nr": 3,
"partition_name": "LPAR003",
"topology": [
{
"level": 4,
"entry_idx": 0,
"increment_count": 8,
"topology": [
{
"level": 3,
"entry_idx": 0,
"increment_count": 2
},
{
"level": 3,
"entry_idx": 1,
"increment_count": 2
},
{
"level": 3,
"entry_idx": 2,
"increment_count": 2
},
{
"level": 3,
"entry_idx": 3,
"increment_count": 2
}
]
},
{
"level": 4,
"entry_idx": 1,
"increment_count": 0,
"topology": [
.
.
.
- Display csv format. spreadsheet core 🍓
$ zmemtopo --format=csv
...and it keeps going, bestie — the table just vibes its way down the screen. ✨ Here's the tail of the CSV report exactly as it lands, header row and all, so you can see what you're actually getting:
"report_tod","report_partition_nr","increment_size","partition_nr","partition_name","parent_level","parent_entry_idx","level","entry_idx","increment_count"
"0x0e082f818b066ce82000","74","1073741824","3","LPAR003","-","-","4","0","8"
"0x0e082f818b066ce82000","74","1073741824","3","LPAR003","4","0","3","0","2"
"0x0e082f818b066ce82000","74","1073741824","3","LPAR003","4","0","3","1","2"
"0x0e082f818b066ce82000","74","1073741824","3","LPAR003","4","0","3","2","2"
"0x0e082f818b066ce82000","74","1073741824","3","LPAR003","4","0","3","3","2"
"0x0e082f818b066ce82000","74","1073741824","3","LPAR003","-","-","4","1","0"
"0x0e082f818b066ce82000","74","1073741824","3","LPAR003","4","1","3","0","0"
"0x0e082f818b066ce82000","74","1073741824","3","LPAR003","4","1","3","1","0"
"0x0e082f818b066ce82000","74","1073741824","3","LPAR003","4","1","3","2","0"
"0x0e082f818b066ce82000","74","1073741824","3","LPAR003","4","1","3","3","0"
"0x0e082f818b066ce82000","74","1073741824","3","LPAR003","-","-","4","2","0"
"0x0e082f818b066ce82000","74","1073741824","3","LPAR003","4","2","3","0","0"
"0x0e082f818b066ce82000","74","1073741824","3","LPAR003","4","2","3","1","0"
"0x0e082f818b066ce82000","74","1073741824","3","LPAR003","4","2","3","2","0"
"0x0e082f818b066ce82000","74","1073741824","3","LPAR003","4","2","3","3","0"
"0x0e082f818b066ce82000","74","1073741824","3","LPAR003","-","-","4","3","0"
"0x0e082f818b066ce82000","74","1073741824","3","LPAR003","4","3","3","0","0"
"0x0e082f818b066ce82000","74","1073741824","3","LPAR003","4","3","3","1","0"
"0x0e082f818b066ce82000","74","1073741824","3","LPAR003","4","3","3","2","0"
"0x0e082f818b066ce82000","74","1073741824","3","LPAR003","4","3","3","3","0"
"0x0e082f818b066ce82000","74","1073741824","5","LPAR005","-","-","4","0","0"
"0x0e082f818b066ce82000","74","1073741824","5","LPAR005","4","0","3","0","0"
"0x0e082f818b066ce82000","74","1073741824","5","LPAR005","4","0","3","1","0"
"0x0e082f818b066ce82000","74","1073741824","5","LPAR005","4","0","3","2","0"
"0x0e082f818b066ce82000","74","1073741824","5","LPAR005","4","0","3","3","0"
"0x0e082f818b066ce82000","74","1073741824","5","LPAR005","-","-","4","1","8"
"0x0e082f818b066ce82000","74","1073741824","5","LPAR005","4","1","3","0","2"
"0x0e082f818b066ce82000","74","1073741824","5","LPAR005","4","1","3","1","2"
"0x0e082f818b066ce82000","74","1073741824","5","LPAR005","4","1","3","2","2"
"0x0e082f818b066ce82000","74","1073741824","5","LPAR005","4","1","3","3","2"
"0x0e082f818b066ce82000","74","1073741824","5","LPAR005","-","-","4","2","0"
"0x0e082f818b066ce82000","74","1073741824","5","LPAR005","4","2","3","0","0"
"0x0e082f818b066ce82000","74","1073741824","5","LPAR005","4","2","3","1","0"
"0x0e082f818b066ce82000","74","1073741824","5","LPAR005","4","2","3","2","0"
"0x0e082f818b066ce82000","74","1073741824","5","LPAR005","4","2","3","3","0"
"0x0e082f818b066ce82000","74","1073741824","5","LPAR005","-","-","4","3","0"
"0x0e082f818b066ce82000","74","1073741824","5","LPAR005","4","3","3","0","0"
"0x0e082f818b066ce82000","74","1073741824","5","LPAR005","4","3","3","1","0"
"0x0e082f818b066ce82000","74","1073741824","5","LPAR005","4","3","3","2","0"
"0x0e082f818b066ce82000","74","1073741824","5","LPAR005","4","3","3","3","0"
"0x0e082f818b066ce82000","74","1073741824","6","LPAR006","-","-","4","0","0"
.
.
.
Okay so a lil guided tour of what you're looking at, iykyk 🧚:
- First line — the column headers, quoted and comma-separated:
"report_tod","report_partition_nr","increment_size","partition_nr","partition_name","parent_level","parent_entry_idx","level","entry_idx","increment_count". Every single row after that fills those in the same order, no cap. - Every value is quoted, even the numbers — that's just the CSV aesthetic, don't come for it 💅
- The dashes (
"-","-") show up in theparent_level/parent_entry_idxslots on the rows where there's nothing to point at. Not a bug, just the CSV saying "n/a" in its own little way. - The
report_todstays the same hex string (0x0e082f818b066ce82000) all the way down, andreport_partition_nr,increment_size,partition_nr,partition_namehold steady per block — so you can group by eye. - It rolls through
LPAR003with levels0–3, thenLPAR005with its own set (spot theincrement_countof8and those2s sitting pretty 👀), then starts onLPAR006... - ...and then the
...— because the full table is long, and the man page is not about to print the whole thing at you. It truncates and lets your terminal scroll its heart out. 🌀
So yeah — it's one entry per row, columns locked in that exact order, repeating until the table runs out of things to say. Feed it to csv-ish tooling, awk on -F,, whatever your heart desires, and it'll behave.
That's the whole ride, bestie: zmemtopo showed up, dumped its topology as CSV, and dipped. 👑
Shipped in s390-tools, dated 2025, and filed under ZMEMTOPO(8) — go read it on a machine that actually has the s390 hardware under it, and may your report_tod always be steady, your parent_level never dash when you need it, and your terminal never scroll back further than you can handle. 🎀💖✨
📦 where this page comes from
- opensuse-leap 16.0: s390-tools 2.44.1-160000.1.1 · MIT
- Copyright 2025 IBM Corp
- 💖 girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms