----- Original Message -----
Hello Dave,
The patch has been changed into an extension module. And the option and
its related output is changed as well. Please check.
Thanks for doing that, as it makes it easier to build/test/debug.
This version looks to cover earlier 2.6 kernels, at a minimum
all RHEL4 2.6.9-era kernels now work OK. Thanks for making that
work as well.
I should note that I only have one 2.6.5-era SLES9 dumpfile -- but it
may be a hybrid that is patched by another company, and it requires a
System.map file, so it may be suspect. Anyway, it fails the shared
memory display because the (first) shmid_kernel address contains
bogus data:
crash> ipcs -m
------ Shared Memory Segments ------
SHM_KERNEL KEY SHMID UID PERMS BYTES NATTCH STATUS
ipcs: invalid kernel virtual address: 400108010 type: "file.f_dentry"
crash>
The semaphore command shows suspect data as well:
crash> ipcs -s
------ Semaphore Arrays --------
SEM_ARRAY KEY SEMID UID PERMS NSEMS
10302b127a0 0x00000000 1 0 2 62388694941697
crash>
And the message queue seems to work, but it doesn't show "(none
allocated)":
crash> ipcs -q
------ Message Queues --------
MSG_QUEUE KEY MSQID UID PERMS USED-BYTES MESSAGES
crash>
In any case, because it's a somewhat strange/modified SLES9 kernel, I don't
want to say that the command doesn't work with that kernel version. If
any SUSE kernel users on this list can verify it, that would be helpful.
(just go the top-level directory of any crash source tree, copy the ipcs.c
file into the extensions sub-directory, enter "make extensions".)
Anyway, here are my comments with this version.
The basic "ipcs" output looks pretty good -- except for:
(1) Please change the "SHM_KERNEL" header string to "SHMID_KERNEL" so
that it reflects the name of the actual kernel data structure, i.e.,
the same way that "MSG_QUEUE" and "SEM_ARRAY" reflect the
kernel's
"msg_queue" and "sem_array" structure names.
(2) Please remove the "0x" from the KEY columns. Continue to display
the key value with a zero-filled 4-byte (integer) hexadecimal value,
which is enough to make it obvious that it's not decimal.
However, I really don't like the "-u" option, either used alone
or in conjunction with "-i". It's confusing, redundant, and in most
cases pretty much useless.
For example:
crash> ipcs -s
------ Semaphore Status --------
emaphore Arrays --------
SEM_ARRAY KEY SEMID UID PERMS NSEMS
1007bc33d90 0x11016565 0 0 644 2
1007bc33b90 0x71014002 32769 0 666 1
100f3348990 0xc9e03647 163842 0 644 3
crash> ipcs -su
------ Semaphore Status --------
used arrays = 3
allocated semaphores = 6
crash>
Is the "-u" option really even necessary for semaphores? I can
easily count the number of arrays and count the NSEMS column if
I actually wanted to know how many allocated semaphores there are.
But who cares?
The same thing applies to the message queues:
crash> ipcs -m
------ Message Queues --------
MSG_QUEUE KEY MSQID UID PERMS USED-BYTES MESSAGES
107f8ef72d0 0x23064010 0 0 600 0 0
107f80113d0 0x5106000d 32769 0 700 1068 1
105f0c43e90 0x000004d2 98306 0 666 0 0
crash> ipcs -mu
------ Messages Status --------
allocated queues = 3
used headers = 1
used space = 1068 bytes
crash>
I can see the USED-BYTES column, or add the USED-BYTES, and can
obviously see the number of queues. But who cares?
So I see nothing gained by implementing "-u" for message queues or
semaphores. And when combined with "-i id", they are even more
useless.
However, perhaps there may be some useful extra information
associated with shared memory:
crash> ipcs -m
------ Shared Memory Segments ------
SHM_KERNEL KEY SHMID UID PERMS BYTES NATTCH STATUS
10007b88d90 0x01000007 688128 0 600 512000 2
10007df89d0 0x00000000 360449 0 600 393216 2 dest
10007bad7d0 0x00000000 131074 0 600 393216 2 dest
10007b832d0 0x00000000 163843 0 600 393216 2 dest
1000f6b1dd0 0x00000000 196612 0 600 393216 2 dest
10007baca90 0x00000000 229381 0 600 393216 2 dest
10007b831d0 0x00000000 262150 0 600 393216 2 dest
10007b874d0 0x00000000 294919 0 600 393216 2 dest
10007ba8690 0x00000000 327688 0 600 393216 2 dest
10007df87d0 0x00000000 393225 0 600 393216 2 dest
10007bacc90 0x00000000 425994 0 600 393216 2 dest
10007dfc6d0 0x00000000 458763 0 600 393216 2 dest
1000fbfb9d0 0x00000000 491532 0 600 393216 2 dest
10007b88b90 0x00000000 524301 0 600 393216 2 dest
10007b84990 0xf900c00c 720910 0 600 189 1
crash> ipcs -mu
----- Shared Memroy Status --------
segments allocated 15
pages allocatd 1374
pages resident 1106
pages swapped 994
swap performance attemts 0
swap performance successes 0
crash>
But I note that you insist on dumping the shared memory inode
somewhere, but it certainly looks out of place here:
crash> ipcs -mi 688128
SHMID: 688128
------ Shared Memroy Status --------
segments allocated 15
pages allocatd 125
pages resident 13
pages swapped 35
swap performance attemts 0
swap performance successes 0
vfs_inode 0x10010029da0
crash>
But if you had taken my suggestion, and followed the tradition
of "kmem -s" and "kmem -S" or "kmem -f" and "kmem
-F", you could
dump the statistics of each shared memory segment after the
one-liner, i.e., like this:
crash> ipcs -m
SHM_KERNEL KEY SHMID UID PERMS BYTES NATTCH STATUS
ffff810036f67490 0x00000000 65536 3369 600 393216 2 dest
ffff810036f67390 0x00000000 98305 3369 600 393216 2 dest
ffff810036f67690 0x00000000 131074 3369 600 393216 2 dest
ffff810036f67190 0x00000000 163843 3369 600 393216 2 dest
ffff8100329184d0 0x00000000 196612 3369 600 393216 2 dest
ffff81003f01d790 0x00000000 229381 3369 600 393216 2 dest
crash>
where -M would do the same thing, but separate and follow each one-liner
above with the statistics associated with it:
crash> ipcs -M
SHM_KERNEL KEY SHMID UID PERMS BYTES NATTCH STATUS
ffff810036f67490 0x00000000 65536 3369 600 393216 2 dest
(display segment statistics here)
SHM_KERNEL KEY SHMID UID PERMS BYTES NATTCH STATUS
ffff810036f67390 0x00000000 98305 3369 600 393216 2 dest
(display segment statistics here)
SHM_KERNEL KEY SHMID UID PERMS BYTES NATTCH STATUS
ffff810036f67690 0x00000000 131074 3369 600 393216 2 dest
(display segment statistics here)
SHM_KERNEL KEY SHMID UID PERMS BYTES NATTCH STATUS
ffff810036f67190 0x00000000 163843 3369 600 393216 2 dest
(display segment statistics here)
SHM_KERNEL KEY SHMID UID PERMS BYTES NATTCH STATUS
ffff8100329184d0 0x00000000 196612 3369 600 393216 2 dest
(display segment statistics here)
SHM_KERNEL KEY SHMID UID PERMS BYTES NATTCH STATUS
ffff81003f01d790 0x00000000 229381 3369 600 393216 2 dest
(display segment statistics here)
(display cumulative shared memory statistics here)
crash>
But as I mentioned before, it's hard to conceive of a compelling reason to
have an additional "ipcs -S" or "ipcs -Q" options.
So you could simplify the invocation to allow these options:
ipcs [-s | q | -[mM] ] [-i id | unique-address-of-first-column]
And if by chance the "id" value is used by more than one facility,
then you could dump them both.
Thanks,
Dave