New version, new man. Continuing the Memory info rollout started in 3.3.27.

--------------------------------------------------------------------------------
SPECIAL THANKS:

1. Thanks to linuxquestions.org Slackware forums for poking around a bit at the
new Memory total logic.

--------------------------------------------------------------------------------
KNOWN ISSUES:

1a. MEMORY: The memory total: has to be synthesized in some cases, based on some
math and educated guessing. When these guesses fall outside of predetermined
ranges, inxi will show note: est. to let the user know the total was synthesized
and possibly incorrect. For detected virtual machines, inxi does not try to
synthesize the total because a VM can have any amount of RAM assigned.

If superuser, and -m used, shows the real total from dmidecode if any RAM was
found. Not all systems have DMI RAM data however, or have dmidecode installed.
Will fallback to sythetic method in that case, which is usually right.

1b. MEMORY: With the superuser /proc/iomem method, if on a VM and not using even
GiB sized RAM ollocation, and -M is not triggered (which usually lets inxi know
it's a VM), the total will get rounded up or down based on a set of rules. For
example, 2.5 GiB real would become 3 GiB. I don't see any solution to this,
either assume the /proc/iomem is right but needs rounding up, or assume the /sys
block counts are right, or remove the feature.

Shows note: est. in cases where the rounded total is greater than a dynamic
factor difference from the internal total amount.

2. GENERAL/GRAPHICS: The problem of users showing up, requesting a feature, then
not doing any work, research, supplying energy, interest, and dare I say,
passion - nothing, expecting 'someone else' to do the work for them, continues,
sadly, with the recent request for vulkan data for Graphics. This appears to be
a problem more with the modern generation of free software users, I don't
remember this type of attitude 20 years ago, but I did watch it as it started
getting more common. Demotivating to be honest, but maybe one day someone will
show up who actually cares enough to help get the features they want developed.

While I am leaving that up as a low priority feature request, I am not
personally interested in that feature, nor is anyone else I asked, and given how
much raw data there is, and how difficult it is to parse, I'll just leave it as
an existing issue which might get work in a few years time, or not, basically
will require someone showing up who actually actively cares.

--------------------------------------------------------------------------------
BUGS:

1. DISK: total: used: report could have had wrong results for used:, like used
being > total: because the filter lists were missing some file systems for
exclusion. More of a fix than a bug, but users might see it as a bug.

--------------------------------------------------------------------------------
FIXES:

1. INFO: get_gcc_data(): was showing same GCC version as main and alternate.
Failed to filter out the discovered primary, that is. This is because usually
name is gcc-11 but sometimes it's the whole version, like gcc-11.2.0, the full
version string. This is the case in Slackware for example.

2. SHORT: MEMORY: BSD: did not show '%' for memory used percent, just the
number.

3. DRIVES/PARTITIONS: PartitionItem::set_filters() added many more exclude
types, that will help avoid both creating wrong disk used totals, and also not
show label:/uuid: fields for filesystem types that don't have uuid/labels. There
were a lot missing: encrypted, distributed, stackable, remote. Should clean up
wrong disk used values in some cases.

4a. PARTITIONS: PartitionItem::set_filters(). Added a lot of file systems, many
fuse, distributed, stackable types.

4b. PARTITIONS: Extended remote file system ID by fs, and added fuse fs for
local mounts, like gvfs, mtp, ptp and many other variants, that's things like
mounting apple partition, android, iphone, archives, etc. This should correct an
entire class of source: ERR-102 outputs.

--------------------------------------------------------------------------------
ENHANCEMENTS:

1. BATTERY: Added 'power' to battery report. That's the amount of watts its
using at that moment, so not super useful since it's running inxi at that
moment. But the data was there, so might as well show it. Only for -Bxx since it
will be so variable. Shows after the charge/condition item.

2. SYSTEM: DistroData: added Oracle id and system base. Added Springdale/PUIAS
system base support. Note, unusually, Eurolinux, ScientificLinux 'just worked'
re id and system base even though that had never been explicitly added. This is
because their os-release file contains 'centos' string.

3. SYSTEM: DistroData: Added ubuntu mantic minotaur to ubuntu id matching table.
This only really is used by Mint, but there you have it. Also added Debian 14
codename Forky.

4a. MEMORY: Add total RAM from one of following:

* /sys/devices/system/memory (if it's available). This directory has to be
compiled into kernel, so is not always present. This source has advantage of
being user readable. If out of set bounds, shows note: est. to let user know
it's an estimate.

* If superuser and /proc/iomme, gets the total from /proc/iomem using some
tricks and synthetic methods, which in general is pretty accurate, but when out
of the bounds set, shows note: est. to let user know results are only estimates.
This overrides /sys total.

* If -m and dmidecode data found, uses the real RAM module total. For Linux and
superuser. This overrides iomem and /sys totals.

4b. MEMORY: add iGPU RAM from /proc/iomem when detected. Requires sudo/root.

4c. MEMORY: using the real -m/RAM total for memory total when available, since
that is the actual value we want, not the estimated stuff from /proc/iomem or
/sys/devices/system.

5. RAM: added a long time oversight, lack of per array RAM installed size and
occupied slots (modules). Those are now part of the Array line for each set of
modules. Since total already shows in System RAM line above, the granular per
array installed size total only shows if > 1 array is present, ie, almost never.

6. DRIVES: disk vendors, added more matches and vendors. We'll know the world is
changing in a significant way when no new vendors appear for a while, but that's
unlikely in the near term.

7. CPU: cpu_arch(), a few new ids added.

8. GRAPHICS: new amd, intel, nvidia ids, updates to driver version etc.

--------------------------------------------------------------------------------
CHANGES:

1. SHORT: for Memory:, switched to using MiB/GiB/TiB, these numbers are just
getting too big to be readable. This is also dynamic, if both used and available
are the same unit, shows x/y [unit], otherwise shows x [unit]/y [unit].

2. MEMORY: changed gpu: to igpu: to avoid confusing it with standalone gpu.
Since only raspberry pi had gpu ram data before, almost nobody would have seen
this in general anyway.

--------------------------------------------------------------------------------
DOCUMENTATION:

1. MAN/OPTIONS: Updated for -Bxx, battery power now.

2. MAN: updated to better define where the System RAM: total:.. available etc
come from, and what they refer to. Also added explanation in -m section about
what the stuff is, and what the field names refer to.

2a. DOCS: docs/inxi-ram.txt added, and more info moved from inxi-data.txt and
inxi-resources.txt. Goal is to remove both those files and move all their data,
and any new data, into granular inxi-xxx.txt files. Also moved some RAM data
from inx-unit-handling.txt to inxi-ram.txt.

2b. DOCS: docs/inxi-unit-handling.txt: updated with more ram / memory units,
code, etc, to better fit with the concept of the inxi-unit-handling.txt doc.

2c. DOCS: docs/inxi-partitions.txt: updated, added more sources for partition
file system types, cleaned up, more useful as a reference now.

2d. DOCS: docs/inxi-distros.txt: NEW, merged data from inxi-data.txt,
inxi-resources.txt. Updated and added more info.

2e. DOCS: docs/inxi-tools-mapping.txt split off from inxi-tools.txt, makes it
easier to find the mapping functions and features, which are hard to remember.
Also updated and improved its usability. This is kind of a key document because
it's hard to remember all the mapping tools internally, and this also connects
those tools to their relevant granular inxi-xxx.txt docs. Not that it will help
get helpers for these tedious tasks, but one can always dream, can't one?

3. DATA: data/graphics/ added for first vulkaninfo output file.

--------------------------------------------------------------------------------
CODE:

1a. RAM: Fixed an irregularity, for RamItem, it used MiB as internal unit, this
was silly because inxi uses KiB everywhere else. This correction was relatively
easy to do, and allows the values to be used by other parts of inxi, like
MemoryData.

1b. RAM: Added return of ram total for memory.

2a. INFO/RAM/PROCESSES: When MEMORY active, now uses row reference to create the
fields. For INFO, now uses MemoryData::row() to generate the row fields instead
of doing the logic in the info line generator. This simplifies the processing
and allows for more granular control of output.

2b. INFO/RAM/PROCESSES: Added debugger switches --dbg 53 (show raw KiB/count
values for /sys/devices/system/memory and /proc/iomem. Added --dbg 54, which
shows per line size for iomem, in human readable units, and a final summary
report of iomem and /sys data, this speeds up debugging.

2c. INFO/RAM/PROCESSES: Added --fake iomem, --fake sys-mem for debugging and
testing.

3. MEMORY: MemoryData::short_data(): added so one tool generates output for all
sources for short data. Easier to track and make consistent, and to make more
granular and robust.

4. DRIVES/PARTITIONS: PartitionItem::partition_filters(),
PartitionItem::fs_excludes(): refactored into PartitionItem::get_filters(),
PartitionItem::set_filters(). Cleaned up, organized better, made comments much
more useful. Goes with DOCS 2c updates. Now there's just one sub that does this
filter/exclude work, which makes it easier to maintain long term.

5. GLOBAL: Used a trick I just learned, declaring variables in the bracket scope
of a class, but not inside the package/class declaration. This makes it work
like a static variable, which Perl 5.008 doesn't support. You have to use a sub
inside the bracket scope to return the data outside that scope, but that is easy
to do.

6. MACHINE: Added return of b_vm for VM detection in MEMORY.

7. SYSTEM: CompilerVersion: Failed to properly use references when passing
$compiler around, not actually sure why it worked, but now is consistent.
This commit is contained in:
Harald Hope 2023-07-10 14:18:45 -07:00
parent ed7049fcc1
commit 2434d89d0c
3 changed files with 1000 additions and 224 deletions

925
inxi

File diff suppressed because it is too large Load diff

62
inxi.1
View file

@ -15,7 +15,7 @@
.\" with this program; if not, write to the Free Software Foundation, Inc.,
.\" 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
.\"
.TH INXI 1 "2023\-05\-07" "inxi" "inxi manual"
.TH INXI 1 "2023\-07\-10" "inxi" "inxi manual"
.SH NAME
inxi \- Command line system information script for console and IRC
@ -390,11 +390,7 @@ for extra information (init type/version, runlevel/target, packages).
Note: if \fB\-m\fR or \fB\-tm\fR are active, the memory item will show in the
main Memory: report of \fB\-m\fR/\fB\-tm\fR/, not in \fB\Info:\fR.
See \fB\-m\fR for explanation of \fBMemory: available:\fR.
Raspberry Pi only: uses \fBvcgencmd get_mem gpu\fR to get gpu RAM amount, if
user is in video group and \fBvcgencmd\fR is installed. Uses this result to
increase the \fBMemory:\fR amount and \fBused:\fR amounts.
See \fB\-m\fR for explanation of \fBMemory:\fR fields and values..
.TP
.B \-j\fR, \fB\-\-swap\fR
@ -548,7 +544,8 @@ If the detected speed is logically absurd, like 1 MT/s or 69910 MT/s, adds:
.nf
\fBMemory:
System RAM: available: 31.38 GiB used: 20.65 GiB (65.8%)
System RAM: total: 32 GiB note: est. available: 31.38 GiB
used: 20.65 GiB (65.8%)
Array\-1: capacity: N/A slots: 4 note: check EC: N/A
Device\-1: DIMM_A1 type: DDR3 size: 8 GiB speed: 1600 MT/s (800 MHz)
Device\-2: DIMM_A2 type: DDR3 size: 8 GiB speed: spec: 1600 MT/s (800 MHz)
@ -561,10 +558,49 @@ If the detected speed is logically absurd, like 1 MT/s or 69910 MT/s, adds:
See \fB\-\-memory\-modules\fR and \fB\-\-memory\-short\fR if you want a
shorter report.
Note: the \fBSystem Ram: available:\fR is actually the total installed RAM minus
some reserved and kernel code RAM (and in some cases GPU assigned main system
RAM) that is allocated on system boot, and thus is generally less than the
actual physical RAM installed.
Notes on \fBSystem RAM:\fR / \fBMemory:\fR report item:
* \fBtotal:\fR and \fBigpu:\fR do not show for short form.
* The \fBtotal:\fR can come from several possible sources:
\- If not superuser, and if \fI/sys/devices/system/memory\fR exists, it will
estimate the total RAM based on how many RAM blocks and their size. Sometimes
the block count is not an exact match to installed RAM, and inxi will attempt to
guess the actual RAM amount, except for virtual machines. When it synthesizes
the actual physical RAM total, it will show \fBnote: est.\fR.
Note that not all kernels are compiled to support generating this /sys
directory (kernel needs to be compiled with \fBCONFIG_MEMORY_HOTPLUG\fR).
\- For OpenBSD and not superuser, the total comes from the detected RAM in
dboot, if available.
\- If superuser, and if \fB\-m\fR used, it comes from the dmidecode RAM totals
if available, and if not, it comes from counting up the System RAM ranges in
\fI/proc/iomem\fR (Linux only), then rounding up, since that total is usually
slightly under the actual physical RAM total. If inxi is unsure about the total,
it will show \fBnote: est.\fB.
If no total data found, shows \fBtotal: N/A\fB.
* The \fBavailable:\fR item is the total installed RAM minus some reserved and
kernel code RAM (and in some cases iGPU assigned main system RAM) that is
allocated on system boot, and thus is generally less than the actual physical
RAM installed. This is called MemTotal in free/meminfo even though it isn't,
though it is the total available the kernel has to work with.
* The \fBused:\fR is the percent of the available RAM used, NOT of the total
physical RAM.
* The \fBigpu:\fR item either comes from Raspberry Pi gpu RAM, or from
\fI/proc/iomem\fR. The latter source is Linux + superuser only, and is not
guaranteed to be accurate, but sometimes is. That is for iGPU system RAM used,
not for standalone GPUs with their own internal RAM. Not all types of internal
VRAM are detectable, it depends on how the hardware assigns RAM to iGPU.
Raspberry Pi uses \fBvcgencmd get_mem gpu\fR to get gpu RAM amount, if
user is in video group and \fBvcgencmd\fR is installed.
.TP
.B \-\-memory\-modules\fR, \fB\-\-mm\fR
@ -784,7 +820,7 @@ Make sure that there is no space between letters and numbers (e.g. write as
If the \fB\-I\fR or \fB\-m\fR lines are not triggered, will also show the
system RAM used/total information.
See \fB\-m\fR for explanation of \fBRAM: total\-available:\fR.
See \fB\-m\fR for explanation of \fBSystem RAM:\fR fields and values.
.TP
.B \-t cm\fR
@ -1486,6 +1522,8 @@ the sound API/server.
.TP
.B \-xx \-B\fR
\- Adds current power use, in watts.
\- Adds serial number.
.TP

View file

@ -1,3 +1,230 @@
================================================================================
Version: 3.3.28
Patch: 00
Date: 2023-07-10
--------------------------------------------------------------------------------
RELEASE NOTES:
--------------------------------------------------------------------------------
New version, new man. Continuing the Memory info rollout started in 3.3.27.
--------------------------------------------------------------------------------
SPECIAL THANKS:
1. Thanks to linuxquestions.org Slackware forums for poking around a bit at the
new Memory total logic.
--------------------------------------------------------------------------------
KNOWN ISSUES:
1a. MEMORY: The memory total: has to be synthesized in some cases, based on some
math and educated guessing. When these guesses fall outside of predetermined
ranges, inxi will show note: est. to let the user know the total was synthesized
and possibly incorrect. For detected virtual machines, inxi does not try to
synthesize the total because a VM can have any amount of RAM assigned.
If superuser, and -m used, shows the real total from dmidecode if any RAM was
found. Not all systems have DMI RAM data however, or have dmidecode installed.
Will fallback to sythetic method in that case, which is usually right.
1b. MEMORY: With the superuser /proc/iomem method, if on a VM and not using even
GiB sized RAM ollocation, and -M is not triggered (which usually lets inxi know
it's a VM), the total will get rounded up or down based on a set of rules. For
example, 2.5 GiB real would become 3 GiB. I don't see any solution to this,
either assume the /proc/iomem is right but needs rounding up, or assume the /sys
block counts are right, or remove the feature.
Shows note: est. in cases where the rounded total is greater than a dynamic
factor difference from the internal total amount.
2. GENERAL/GRAPHICS: The problem of users showing up, requesting a feature, then
not doing any work, research, supplying energy, interest, and dare I say,
passion - nothing, expecting 'someone else' to do the work for them, continues,
sadly, with the recent request for vulkan data for Graphics. This appears to be
a problem more with the modern generation of free software users, I don't
remember this type of attitude 20 years ago, but I did watch it as it started
getting more common. Demotivating to be honest, but maybe one day someone will
show up who actually cares enough to help get the features they want developed.
While I am leaving that up as a low priority feature request, I am not
personally interested in that feature, nor is anyone else I asked, and given how
much raw data there is, and how difficult it is to parse, I'll just leave it as
an existing issue which might get work in a few years time, or not, basically
will require someone showing up who actually actively cares.
--------------------------------------------------------------------------------
BUGS:
1. DISK: total: used: report could have had wrong results for used:, like used
being > total: because the filter lists were missing some file systems for
exclusion. More of a fix than a bug, but users might see it as a bug.
--------------------------------------------------------------------------------
FIXES:
1. INFO: get_gcc_data(): was showing same GCC version as main and alternate.
Failed to filter out the discovered primary, that is. This is because usually
name is gcc-11 but sometimes it's the whole version, like gcc-11.2.0, the full
version string. This is the case in Slackware for example.
2. SHORT: MEMORY: BSD: did not show '%' for memory used percent, just the
number.
3. DRIVES/PARTITIONS: PartitionItem::set_filters() added many more exclude
types, that will help avoid both creating wrong disk used totals, and also not
show label:/uuid: fields for filesystem types that don't have uuid/labels. There
were a lot missing: encrypted, distributed, stackable, remote. Should clean up
wrong disk used values in some cases.
4a. PARTITIONS: PartitionItem::set_filters(). Added a lot of file systems, many
fuse, distributed, stackable types.
4b. PARTITIONS: Extended remote file system ID by fs, and added fuse fs for
local mounts, like gvfs, mtp, ptp and many other variants, that's things like
mounting apple partition, android, iphone, archives, etc. This should correct an
entire class of source: ERR-102 outputs.
--------------------------------------------------------------------------------
ENHANCEMENTS:
1. BATTERY: Added 'power' to battery report. That's the amount of watts its
using at that moment, so not super useful since it's running inxi at that
moment. But the data was there, so might as well show it. Only for -Bxx since it
will be so variable. Shows after the charge/condition item.
2. SYSTEM: DistroData: added Oracle id and system base. Added Springdale/PUIAS
system base support. Note, unusually, Eurolinux, ScientificLinux 'just worked'
re id and system base even though that had never been explicitly added. This is
because their os-release file contains 'centos' string.
3. SYSTEM: DistroData: Added ubuntu mantic minotaur to ubuntu id matching table.
This only really is used by Mint, but there you have it. Also added Debian 14
codename Forky.
4a. MEMORY: Add total RAM from one of following:
* /sys/devices/system/memory (if it's available). This directory has to be
compiled into kernel, so is not always present. This source has advantage of
being user readable. If out of set bounds, shows note: est. to let user know
it's an estimate.
* If superuser and /proc/iomme, gets the total from /proc/iomem using some
tricks and synthetic methods, which in general is pretty accurate, but when out
of the bounds set, shows note: est. to let user know results are only estimates.
This overrides /sys total.
* If -m and dmidecode data found, uses the real RAM module total. For Linux and
superuser. This overrides iomem and /sys totals.
4b. MEMORY: add iGPU RAM from /proc/iomem when detected. Requires sudo/root.
4c. MEMORY: using the real -m/RAM total for memory total when available, since
that is the actual value we want, not the estimated stuff from /proc/iomem or
/sys/devices/system.
5. RAM: added a long time oversight, lack of per array RAM installed size and
occupied slots (modules). Those are now part of the Array line for each set of
modules. Since total already shows in System RAM line above, the granular per
array installed size total only shows if > 1 array is present, ie, almost never.
6. DRIVES: disk vendors, added more matches and vendors. We'll know the world is
changing in a significant way when no new vendors appear for a while, but that's
unlikely in the near term.
7. CPU: cpu_arch(), a few new ids added.
8. GRAPHICS: new amd, intel, nvidia ids, updates to driver version etc.
--------------------------------------------------------------------------------
CHANGES:
1. SHORT: for Memory:, switched to using MiB/GiB/TiB, these numbers are just
getting too big to be readable. This is also dynamic, if both used and available
are the same unit, shows x/y [unit], otherwise shows x [unit]/y [unit].
2. MEMORY: changed gpu: to igpu: to avoid confusing it with standalone gpu.
Since only raspberry pi had gpu ram data before, almost nobody would have seen
this in general anyway.
--------------------------------------------------------------------------------
DOCUMENTATION:
1. MAN/OPTIONS: Updated for -Bxx, battery power now.
2. MAN: updated to better define where the System RAM: total:.. available etc
come from, and what they refer to. Also added explanation in -m section about
what the stuff is, and what the field names refer to.
2a. DOCS: docs/inxi-ram.txt added, and more info moved from inxi-data.txt and
inxi-resources.txt. Goal is to remove both those files and move all their data,
and any new data, into granular inxi-xxx.txt files. Also moved some RAM data
from inx-unit-handling.txt to inxi-ram.txt.
2b. DOCS: docs/inxi-unit-handling.txt: updated with more ram / memory units,
code, etc, to better fit with the concept of the inxi-unit-handling.txt doc.
2c. DOCS: docs/inxi-partitions.txt: updated, added more sources for partition
file system types, cleaned up, more useful as a reference now.
2d. DOCS: docs/inxi-distros.txt: NEW, merged data from inxi-data.txt,
inxi-resources.txt. Updated and added more info.
2e. DOCS: docs/inxi-tools-mapping.txt split off from inxi-tools.txt, makes it
easier to find the mapping functions and features, which are hard to remember.
Also updated and improved its usability. This is kind of a key document because
it's hard to remember all the mapping tools internally, and this also connects
those tools to their relevant granular inxi-xxx.txt docs. Not that it will help
get helpers for these tedious tasks, but one can always dream, can't one?
3. DATA: data/graphics/ added for first vulkaninfo output file.
--------------------------------------------------------------------------------
CODE:
1a. RAM: Fixed an irregularity, for RamItem, it used MiB as internal unit, this
was silly because inxi uses KiB everywhere else. This correction was relatively
easy to do, and allows the values to be used by other parts of inxi, like
MemoryData.
1b. RAM: Added return of ram total for memory.
2a. INFO/RAM/PROCESSES: When MEMORY active, now uses row reference to create the
fields. For INFO, now uses MemoryData::row() to generate the row fields instead
of doing the logic in the info line generator. This simplifies the processing
and allows for more granular control of output.
2b. INFO/RAM/PROCESSES: Added debugger switches --dbg 53 (show raw KiB/count
values for /sys/devices/system/memory and /proc/iomem. Added --dbg 54, which
shows per line size for iomem, in human readable units, and a final summary
report of iomem and /sys data, this speeds up debugging.
2c. INFO/RAM/PROCESSES: Added --fake iomem, --fake sys-mem for debugging and
testing.
3. MEMORY: MemoryData::short_data(): added so one tool generates output for all
sources for short data. Easier to track and make consistent, and to make more
granular and robust.
4. DRIVES/PARTITIONS: PartitionItem::partition_filters(),
PartitionItem::fs_excludes(): refactored into PartitionItem::get_filters(),
PartitionItem::set_filters(). Cleaned up, organized better, made comments much
more useful. Goes with DOCS 2c updates. Now there's just one sub that does this
filter/exclude work, which makes it easier to maintain long term.
5. GLOBAL: Used a trick I just learned, declaring variables in the bracket scope
of a class, but not inside the package/class declaration. This makes it work
like a static variable, which Perl 5.008 doesn't support. You have to use a sub
inside the bracket scope to return the data outside that scope, but that is easy
to do.
6. MACHINE: Added return of b_vm for VM detection in MEMORY.
7. SYSTEM: CompilerVersion: Failed to properly use references when passing
$compiler around, not actually sure why it worked, but now is consistent.
--------------------------------------------------------------------------------
-- Harald Hope - Mon, 10 July 2023 14:00:04 -0700
================================================================================
Version: 3.3.27
Patch: 00