home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
OS/2 Shareware BBS: 14 Text
/
14-Text.zip
/
memsum23.zip
/
memsum.doc
next >
Wrap
Text File
|
1999-08-09
|
64KB
|
1,187 lines
MEMSUM 2.3 Virtual Storage Analysis Report
Author: RIchard Moore
Date: 9th August 1999
MEMSUM is a utility for analysing application memory usage in the
shared and private arenas from Dump Formatter or Kernel Debugger
output.
Version 2.0 is a new and extended version of the MEMSUM utility. It
has been completely re-written. It includes new and updated reports
which are selectable from the command line. The syntax for MEMSUM is
as follows:
MEMSUM <options> <file> <options>
where options are:
/P Process usage report
/M Allocation by module
/H High memory reports with /P and /M
/D Detailed reports with /P and /M
/I Share index to be reported with /M
/Rn Region summary and LDT usage
where n = 2 for OS/2 V2.11
where n = 3 for OS/2 V3 up to FP 18
where n = 4 for OS/2 V3 FP 19+ and V4 - default
where n = S3 for OS/2 V3 SMP
where n = U45 for OS/2 V4.5 Warp Server for e-business, UNI
where n = S45 for OS/2 V4.5 Warp Server for e-business, SMP
/A Requests all reports, except Share index calculation.
/I and /R may be specified with /A
If no parameters are entered then syntax help is displayed.
The input file is a consolidated log file containing the output from
the kernel debugger or dump formatter .MA, .MO and .MC commands. From
the KDB or DF command line enter:
.MA;.MO;.MC
An easy way to obtain this information is to use the enhanced process
dump in Fix Pack 35 of Warp 3 and Fix Pack 10 of Warp 4. Specify the
following commands to dump the memory management control blocks:
PDUMPUSR SYSVM
PROCDUMP ON
PROCDUMP FORCE /PID:0
The resulting PDUMP.nnn file is somewhat less then 1Mb and is
non-disruptive to the system. To monitor storage usage a number of
process dumps can be taken at timed intervals or by using a REXX exec
and the SEGSHR utility when available memory has dropped to some
specific level. See SEGSHR PACKAGE on OS2TOOLS.
If you do this using a PM front-end such as PMDF, be sure to minimise
the window while output is being logged, otherwise the text will
overrun the application's display buffer and result in garbage being
displayed and logged.
There are 8 possible reports:
1) System Summary by Arena
This gives an overview of memory usage in each of the arena types.
2) Compatibility Region Process Usage Report.
This summarises memory acquired in the compatibility region
(0-512Mb) by each process by memory category.
Memory is owned by either the system or a process. Only when the
owner dies or explicitly frees the memory is it released. This
report will give an indication of which processes are responsible
for memory acquisition.
3) High Memory Region Process Usage Report.
This is the same as 2) but for High Private and High Shared arenas
only. High memory regions are >= 512Mb and are only available to
Warp 3.0 SMP and Warp E-Server.
4) Detailed Process Usage Report.
This shows for each process and each storage category the module
responsible for the allocation and the size of the allocation.
5) Compatibility Region Allocation Report.
This summarises the memory allocated by each module by storage
category. A particular module responsible for memory shortage will
show up here.
If the /I option is specified then for shared arena allocations,
an index showing percentage shared will be calculated and shown
below and to the left of the allocation size.
6) High Memory Region Allocation Report.
This is the same as 5) but for High Private and High Shared arenas.
7) Detailed Allocation Report.
This give a break-down of each allocation by each module, showing
the storage category and accessing process.
8) LDT Segment Availability Report
This shows the compatibility region from the perspective of 16-bit
programs and the effect of allocation on the Local Descriptor Table
- a H/W defined table, limited to 8192 entries. Each entry maps 64K
of virtual address space. The compatibility region shared arena is
further subdivided into regions for specific purposes. The usage of
these is shown in this report. The size and number of these depends
upon the version of OS2. This report will pin-point a process that
is responsible for pushing the private/shared boundary into the
shared arena.
Each of these report is described in detail:
System Summary by Arena
-----------------------
Example:
System Summary by Arena.
System Arena Upper Address Limit: fffc0000
System Arena Current Lower Limit: 80000000
System Arena Lower Address Limit: 80000000
High Shared Arena Upper Address Limit: 80000000
High Shared Arena Current Lower Limit: 5ffff000
High Shared Arena Lower Address Limit: 2c000000
High Private Arena Upper Address Limit: 2c000000
High Private Arena Lower Address Limit: 20000000
Shared Arena Upper Address Limit: 1fff0000
Shared Arena Current Lower Limit: 13a30000
Shared Arena Lower Address Limit: 04000000
Private Upper Address Limit: 04000000
Private Arena Lower Address Limit: 00010000
VDM Private Arena Lower Address Limit: 00000000
This report is always generated. It shows an overall summary of memory
usage by arena type. The things to note here are that the system and
shared arenas expand down, while private arenas expand up. Since
private arena address spaces occupy parallel address ranges and expand
towards the shared arenas then the largest private and high private
arenas are shown. This point is illustrated by the following diagram:
┌───────────────────┐
│ │
│ │
│ System Arena │
│ │
│ │
│ │
│ │
├───────────────────┤
│ High Shared │
│ │
│ │
├-------------------┤ <- current minimum mapped
│ │
├───────────────────┤ <- shared/private boundary
│ │ ┌──────────────────┐
│ High Private │ │ │
│ ├───────────────────┤ │
│ Process 1 │ Process 2 │ Process 3 │
├───────────────────┼───────────────────┴──────────────────┘
│ │
│ Shared Arena │
│ │
├-------------------┤ <- current minimum mapped
│ │
│ │
│ │
├───────────────────┤ <- shared private boundary
│ ├───────────────────┐
│ Private Arena │ │
│ │ │
│ Process 1 │ Process 2 ├──────────────────┐
│ │ │ Process 3 │
└───────────────────┴───────────────────┴──────────────────┘
The extent of the shared arenas is defined to occupy the address space
from the largest private arena through to highest boundary, which is
fixed. For each of the shared arenas the current minimum address mapped
is given. The difference between this and the private/shared boundary
indicates a guaranteed range of unused memory. There may be more, if
there are holes above the current minimum.
What to look for:
If the current minimum and private/shared boundaries meet then this is
an indication that memory has been severely constrained. The constraint
may have subsequently been relieved.
The initial upper limit of the high private arenas is 20000000 and
(low) private arenas is 04000000. If the current shared minimum has
moved down to the initial private upper limits then investigate the
shared arena(s). If the private upper limit has moved up to the shared
current limit then investigate the private arenas.
What to ignore:
High memory is only available to Warp 3 SMP and Warp E-Server Uni and
SMP.
The system arenas current minimum is fixed, so ignore the fact that it
meets the upper limit of the high shared arena. That's not an
indication of a problem.
Notes:
Upper limits are greater than the achievable address.
Lower limits are less than or equal to the achievable address.
The first 64K is disallowed in non-VDM processes.
Granularity of virtual address space allocation is 64K in non-VDM
private and shared arenas. It is 4K elsewhere.
Compatibility Region Process Usage Report:
------------------------------------------
Example:
give get giveget named global instance tot shr private p-shared tot prv hptda pid process
0 0 64 0 832 640 1536 192 64 256 03a2 0005 g:lanmsgex.exe
0 0 64 64 512 128 768 192 64 256 03aa 0006 g:cntrl.exe
0 0 64 0 960 704 1728 192 64 256 03b6 0007 g:landll.exe
0 0 64 0 512 128 704 192 64 256 03c7 0008 g:logdaem.exe
19456 5184 832 3072 6272 1088 35904 1600 64 1664 03fb 0009 g:epwrout.exe
19456 11584 2496 3520 11584 1280 49920 7680 64 7744 041a 000a g:pmshell.exe
19456 3584 832 3264 4480 320 31936 768 64 832 04e2 000c g:harderr.exe
64 0 64 0 576 448 1152 256 64 320 058a 000d g:epwmux.exe
19456 5184 1408 3200 7808 1600 38656 2624 64 2688 059c 000e g:epwmp.exe
19456 5184 1408 3136 7040 704 36928 1664 64 1728 05bd 000f g:pmspool.exe
19456 5184 2880 3200 12416 2112 45248 9792 64 9856 05cf 0011 g:pmshell.exe
19456 5184 832 3136 6208 1280 36096 1408 64 1472 05d0 0010 g:epwpsi.exe
64 0 64 0 576 448 1152 256 64 320 06a7 0012 g:epwmux.exe
19456 5312 896 3136 6272 512 35584 960 192 1152 06fc 0013 g:cmd.exe
19456 5312 832 3136 6272 512 35520 1344 64 1408 0721 0019 g:highmem.exe
There is one line per process and within each line the total memory
acquired in K-bytes is given per storage category. The categories are
as follows:
give: Giveable shared memory allocated using DosAllocSharedMem
with OBJ_GIVEABLE flag.
get: Gettable memory allocated using DosAllocaSharedMem with
the OBJ_GETTABLE flag.
giveget: Giveable and Gettable memory allocated using
DosAllocSharedMem with both OBJ_GIVEABLE and OBJ_GETTABLE
flags.
named: Named shared memory allocated using DosAllocSharedMem
where a name has been specified.
global: Global shared memory that is either code or part of a
global data segment of a DLL.
instance: DLL instance data. This occupies address space in the
shared arena, but is mapped to a per-process copy of the
data in physical memory.
tot shr: Total of shared arena allocations.
tot shr = give + get + giveget + named + global + instance
private: Private arena allocations made using DosAllocMem or R/W
segments of executable modules.
p-shared: Read-only Data and Code segments allocated in the private
arena. The physical storage for these are shared with
other processes running the same executable module.
tot prv: Total of private memory allocations.
tot prv = private + p-shared
hptda: The handle for the process - a unique identifier used by
OS2 Memory Management.
pid: The process identifier - a unique identified used by OS2
Task Management.
process: The name of the executable running in that process.
Pid 1 is the system process and is named *sysinit.
VDMs are show as *vdm.
What to look for:
Compare the columns looking for a category that stands out way above
any other.
Look particularly closely at the shared arena since, whether or not a
process accesses data in the shared arena, once allocated that address
range for a shared arena object is reserved for all processes.
Look closely at instance data. In general there is no good reason to
use more than 4 bytes!! Instance data can always be indirected to the
private arena using a single instance data pointer.
Notes:
Granularity of virtual address space allocation in the compatibility
region is 64Kb.
High Memory Region Process Usage Report:
----------------------------------------
Example:
High Memory Region Process Usage Report in K-bytes.
Break-down by accessing process and storage category.
give get giveget named global instance tot shr private p-shared tot prv hptda pid process
0 0 0 524292 0 0 524292 16 0 16 0721 0019 g:highmem.exe
This is identical in form to the Compatibility Region Process Usage
Report.
Notes:
Granularity of virtual address space allocation is 4Kb.
High memory is only available on Warp 3.0 SMP and Warp E-server.
There is currently no way of allocating Global, Instance and P-shared
categories. So these will always appear as 0.
The amount of address space available to the High Memory Region is
defined by the VIRTUALADDRESSLIMIT specification in CONFIG.SYS. In this
example VIRTUALADDRESSLIMIT=2048 was specified, defining a total of
2Gb for application usage (512Mb Compatibility Region and 1.5Gb High
Memory Region).
Detailed Process Usage Report:
------------------------------
Example:
Accessing process: hptda=06fc pid=0013 g:cmd.exe
High Memory Give allocators:
High Memory Get allocators:
High Memory GiveGet allocators:
High Memory Named Shared allocators:
High Memory Global allocators:
High Memory Instance allocators:
High Memory Private allocators:
High Memory Shared Private allocators:
Give allocators:
19456Kb hmte=042c g:pmmerge.dll
Get allocators:
128Kb hmte=0100 g:doscall1.dll
5120Kb hmte=042c g:pmmerge.dll
64Kb hmte=0437 g:pmgpi.dll
GiveGet allocators:
64Kb hmte=0100 g:doscall1.dll
768Kb hmte=042c g:pmmerge.dll
64Kb hmte=0447 g:pmspl.dll
Named Shared allocators:
64Kb hmte=0100 g:doscall1.dll
3072Kb hmte=042c g:pmmerge.dll
Global allocators:
512Kb hmte=0100 g:doscall1.dll
832Kb hmte=042c g:pmmerge.dll
640Kb hmte=0437 g:pmgpi.dll
960Kb hmte=043e g:softdraw.dll
512Kb hmte=0447 g:pmspl.dll
64Kb hmte=044d g:spl1b.dll
192Kb hmte=0464 g:pmviop.dll
128Kb hmte=048a g:bvhwndw.dll
448Kb hmte=0500 g:display.dll
192Kb hmte=050a g:ibmvga32.dll
320Kb hmte=050f g:ibmdev32.dll
768Kb hmte=0515 g:dspres.dll
512Kb hmte=0519 g:pmatm.dll
192Kb hmte=0526 g:uconv.dll
Instance allocators:
128Kb hmte=0100 g:doscall1.dll
64Kb hmte=042c g:pmmerge.dll
64Kb hmte=0447 g:pmspl.dll
64Kb hmte=044d g:spl1b.dll
192Kb hmte=0526 g:uconv.dll
Private allocators:
128Kb hmte=0100 g:doscall1.dll
640Kb hmte=042c g:pmmerge.dll
64Kb hmte=0500 g:display.dll
128Kb hmte=0703 g:cmd.exe
Shared Private allocators:
192Kb hmte=0703 g:cmd.exe
This report shows a detailed break-down by allocating module within
storage category for each process. The categories are as described in
the Compatibility Region Process Usage Report. Where no value is given
then no storage is allocated in that category. The allocating module is
identified by its unique handle (hmte) and name. Where no name is given
then the allocating module has been free, but the storage it allocated
is still in use by the process.
Compatibility Region Allocation Report:
---------------------------------------
Example:
give get giveget named global instance tot shr private p-shared tot prv s-system p-system hmte name
0 0 0 0 128 0 128 0 0 0 0 0 006f g:epwinit.dll
0 128 0 0 192 0 320 0 0 0 0 0 0081 g:bvhvga.dll
0 256 0 0 256 0 512 0 0 0 0 0 0088 g:bvhsvga.dll
0 0 0 0 0 0 0 0 0 0 1728 64 009e g:screen01.sys
0 3392 64 320 512 128 4416 3072 0 3072 0 0 0100 g:doscall1.dll
0 0 0 0 192 0 192 0 0 0 0 0 010b g:rexxinit.dll
0 0 0 0 128 128 256 2240 0 2240 0 0 010c g:snd.dll
0 0 0 0 0 0 0 0 0 0 0 64 011a !lanmsgdd
0 0 0 0 0 0 0 0 0 0 0 128 012d !landlldd
0 0 0 0 0 0 0 0 0 0 64 0 0157 !pmdd
0 0 0 0 128 0 128 0 0 0 0 0 0392 g:waveproc.dll
0 0 0 0 192 64 256 128 0 128 0 0 039c g:lanmsgdl.dll
0 0 0 0 0 0 0 64 64 128 0 0 03a0 g:lanmsgex.exe
0 0 0 64 0 0 64 192 64 256 0 0 03b1 g:cntrl.exe
0 0 0 0 0 0 0 64 64 128 0 0 03bd g:landll.exe
0 0 0 0 128 64 192 0 0 0 0 0 03c0 g:acslan.dll
0 0 0 0 0 0 0 192 64 256 0 0 03ce g:logdaem.exe
0 0 0 0 0 0 0 128 64 192 0 0 0402 g:epwrout.exe
0 0 0 0 64 128 192 0 0 0 0 0 0407 g:epwpsi16.dll
0 0 0 0 192 128 320 320 0 320 0 0 040b g:epwnl001.dll
128 0 0 0 64 320 512 448 0 448 0 0 0411 g:epwsvc16.dll
0 0 0 0 0 0 0 384 64 448 0 0 0421 g:pmshell.exe
0 0 1024 64 896 256 2240 192 0 192 0 0 0425 g:pmwp.dll
19456 5120 768 3072 832 64 29312 14976 0 14976 0 0 042c g:pmmerge.dll
0 64 0 0 640 0 704 0 0 0 0 0 0437 g:pmgpi.dll
0 0 0 0 960 0 960 0 0 0 0 0 043e g:softdraw.dll
0 0 64 0 512 64 640 0 0 0 0 0 0447 g:pmspl.dll
0 0 0 0 64 64 128 0 0 0 0 0 044d g:spl1b.dll
0 0 0 0 320 0 320 0 0 0 0 0 0450 g:imp.dll
0 0 768 64 960 64 1856 0 0 0 0 0 0456 g:pmctls.dll
0 0 0 0 192 0 192 0 0 0 0 0 045b g:seamless.dll
0 0 0 0 128 128 256 0 0 0 0 0 0460 g:som.dll
0 64 0 0 192 0 256 0 0 0 0 0 0464 g:pmviop.dll
0 0 0 0 128 0 128 0 0 0 0 0 048a g:bvhwndw.dll
0 2048 0 0 320 0 2368 0 0 0 0 0 048d g:videopmi.dll
0 0 0 0 192 0 192 512 0 512 0 0 0498 g:ibmgpmi.dll
0 512 0 0 320 0 832 512 0 512 0 0 04c5 g:videocfg.dll
0 0 0 0 320 64 384 640 0 640 0 0 04ca g:helpmgr.dll
0 0 0 64 0 0 64 128 64 192 0 64 04e9 g:harderr.exe
0 0 0 0 448 0 448 512 0 512 0 0 0500 g:display.dll
0 0 0 0 192 0 192 0 0 0 0 0 050a g:ibmvga32.dll
0 0 0 0 320 0 320 0 0 0 0 0 050f g:ibmdev32.dll
0 0 0 0 768 0 768 0 0 0 0 0 0515 g:dspres.dll
0 0 0 0 512 0 512 0 0 0 0 0 0519 g:pmatm.dll
0 0 0 0 64 0 64 0 0 0 0 0 051e g:sysmono.fon
0 0 0 0 64 0 64 0 0 0 0 0 0520 g:courier.fon
0 0 0 0 128 0 128 0 0 0 0 0 0522 g:helv.fon
0 0 0 0 64 0 64 0 0 0 0 0 0524 g:times.fon
0 0 0 0 192 192 384 0 0 0 0 0 0526 g:uconv.dll
0 0 0 0 128 0 128 0 0 0 0 0 0540 g:fka.dll
0 0 0 0 128 0 128 0 0 0 0 0 055e g:pmwpmri.dll
0 0 0 0 0 0 0 384 64 448 0 0 0591 g:epwmux.exe
0 0 0 64 0 0 64 128 64 192 0 0 05a3 g:epwmp.exe
0 0 0 0 128 256 384 64 0 64 0 0 05ab g:epwcua.dll
0 0 0 0 0 0 0 128 64 192 0 0 05c4 g:pmspool.exe
0 0 0 0 0 0 0 320 64 384 0 0 05d8 g:epwpsi.exe
0 0 0 0 128 320 448 128 0 128 0 0 05de g:epwpro.dll
0 0 0 0 128 0 128 0 0 0 0 0 062c g:mdm.dll
0 0 448 0 1024 128 1600 64 0 64 0 0 062f g:mmpm.dll
0 0 0 0 192 128 320 512 0 512 0 0 0635 g:mmpmcrts.dll
0 0 0 0 128 0 128 0 0 0 0 0 0660 g:mmio.dll
0 0 0 0 128 64 192 832 0 832 0 0 066e g:somir.dll
0 0 0 0 64 64 128 448 0 448 0 0 0672 g:somtc.dll
0 0 0 0 192 64 256 0 0 0 0 0 0699 g:nwiapi.dll
0 0 0 0 512 64 576 64 0 64 0 0 06bd g:wpprint.dll
0 0 0 0 256 128 384 0 0 0 0 0 06d8 g:wpconfig.dll
0 0 0 0 64 128 192 0 0 0 0 0 06dc g:wincfg.dll
0 0 0 0 64 0 64 0 0 0 0 0 06e0 g:wpconmri.dll
0 0 0 0 128 128 256 576 0 576 0 0 06e2 g:mmsnd.dll
0 0 0 0 64 64 128 128 0 128 0 0 06f0 g:minxobj.dll
0 0 0 0 0 0 0 128 192 320 0 0 0703 g:cmd.exe
0 0 0 0 0 0 0 512 64 576 0 0 072b g:highmem.exe
total total total total total total total maximum maximum maximum total maximum
give get giveget named global instance tot shr private p-shared tot prv s-system p-system
-----------------------------------------------------------------------------------------------------------
19584 11584 3136 3712 15360 3392 56768 14976 192 14976 1792 128
This report shows a similar summary to that of the Process Usage
Reports, except in this case each line is per allocating module.
There are four new columns:
p-system: Private memory allocated by a system module e.g. a
device driver.
s-system: Shared memory allocated by a system module e.g. a device
driver.
hmte: Gives the allocating module's handle
name: Names the allocating module.
At the end of the report a total for each shared memory type and a
maximum for private memory type is given.
What to look for:
Use the totals line to pin-point a particular storage category that is
causing a problem.
High Memory Region Allocation Report:
-------------------------------------
Example:
give get giveget named global instance tot shr private p-shared tot prv s-system p-system hmte name
0 0 0 524292 0 0 524292 16 0 16 0 0 072b g:highmem.exe
total total total total total total total maximum maximum maximum total maximum
give get giveget named global instance tot shr private p-shared tot prv s-system p-system
-----------------------------------------------------------------------------------------------------------
0 0 0 524292 0 0 524292 16 0 16 0 0
This report is of the same format as the Compatibility Region
Allocation Report except that it covers the high memory region. See
High Memory Region Process Usage Report for information on
the high memory region.
Share Index Calculation:
------------------------
This appears as addition information with the Compatibility and High Memory Region Allocation
reports. This can be useful where there is no obvious large allocation depleting shared memory.
It helps to distinguish between the case where there is genuinely no shared memory available and
where is have been depleted due to lack of sharing of shared objects. In the latter cases, larger
objects will show up with low share indices. Indices can be averaged to give an approximate
combined index for a number of modules. Do not add indices!
Where sharing is low there are possible strategies to remedy this situation:
1) Merge DLLs to reduce wastage due granularity of allocation (64K in the Compatibility Region
and 4K in the High Memory Region).
2) Redirect Instance Data to Private Arena when much greater then 64K. Allocate the re-directed
data at DLL Initialisation time and save only the pointer to it in an instance data variable.
Example:
Compatibility Region Allocation Report in K-bytes.
Break-down by allocating module and storage category.
give get giveget named global instance tot shr private p-shared tot prv s-system p-system hmte name
0 0 0 0 128 0 128 0 0 0 0 0 006f g:epwinit.dll
00% 00% 00% 00% 05% 00% 05%
0 128 0 0 192 0 320 0 0 0 0 0 0081 g:bvhvga.dll
00% 10% 00% 00% 10% 00% 10%
0 256 0 0 256 0 512 0 0 0 0 0 0088 g:bvhsvga.dll
00% 10% 00% 00% 10% 00% 10%
0 0 0 0 0 0 0 0 0 0 1728 64 009e g:screen01.sys
00% 00% 00% 00% 00% 00% 00%
0 3392 64 320 512 128 4416 3072 0 3072 0 0 0100 g:doscall1.dll
00% 21% 78% 21% 78% 78% 30%
0 0 0 0 192 0 192 0 0 0 0 0 010b g:rexxinit.dll
00% 00% 00% 00% 05% 00% 05%
0 0 0 0 128 128 256 2240 0 2240 0 0 010c g:snd.dll
00% 00% 00% 00% 21% 21% 21%
0 0 0 0 0 0 0 0 0 0 0 64 011a !lanmsgdd
00% 00% 00% 00% 00% 00% 00%
0 0 0 0 0 0 0 0 0 0 0 128 012d !landlldd
00% 00% 00% 00% 00% 00% 00%
0 0 0 0 0 0 0 0 0 0 64 0 0157 !pmdd
00% 00% 00% 00% 00% 00% 00%
0 0 0 0 128 0 128 0 0 0 0 0 0392 g:waveproc.dll
00% 00% 00% 00% 05% 00% 05%
0 0 0 0 192 64 256 128 0 128 0 0 039c g:lanmsgdl.dll
00% 00% 00% 00% 10% 10% 10%
0 0 0 0 0 0 0 64 64 128 0 0 03a0 g:lanmsgex.exe
00% 00% 00% 00% 00% 00% 00%
0 0 0 64 0 0 64 192 64 256 0 0 03b1 g:cntrl.exe
00% 00% 00% 05% 00% 00% 05%
0 0 0 0 0 0 0 64 64 128 0 0 03bd g:landll.exe
00% 00% 00% 00% 00% 00% 00%
0 0 0 0 128 64 192 0 0 0 0 0 03c0 g:acslan.dll
00% 00% 00% 00% 05% 05% 05%
0 0 0 0 0 0 0 192 64 256 0 0 03ce g:logdaem.exe
00% 00% 00% 00% 00% 00% 00%
0 0 0 0 0 0 0 128 64 192 0 0 0402 g:epwrout.exe
00% 00% 00% 00% 00% 00% 00%
0 0 0 0 64 128 192 0 0 0 0 0 0407 g:epwpsi16.dll
00% 00% 00% 00% 26% 26% 26%
0 0 0 0 192 128 320 320 0 320 0 0 040b g:epwnl001.dll
00% 00% 00% 00% 15% 15% 15%
128 0 0 0 64 320 512 448 0 448 0 0 0411 g:epwsvc16.dll
10% 00% 00% 00% 36% 36% 30%
0 0 0 0 0 0 0 384 64 448 0 0 0421 g:pmshell.exe
00% 00% 00% 00% 00% 00% 00%
0 0 1024 64 896 256 2240 192 0 192 0 0 0425 g:pmwp.dll
00% 00% 10% 05% 10% 10% 10%
19456 5120 768 3072 832 64 29312 14976 0 14976 0 0 042c g:pmmerge.dll
47% 42% 47% 47% 47% 47% 46%
0 64 0 0 640 0 704 0 0 0 0 0 0437 g:pmgpi.dll
00% 47% 00% 00% 47% 00% 47%
0 0 0 0 960 0 960 0 0 0 0 0 043e g:softdraw.dll
00% 00% 00% 00% 47% 00% 47%
0 0 64 0 512 64 640 0 0 0 0 0 0447 g:pmspl.dll
00% 00% 47% 00% 47% 47% 47%
0 0 0 0 64 64 128 0 0 0 0 0 044d g:spl1b.dll
00% 00% 00% 00% 47% 47% 47%
0 0 0 0 320 0 320 0 0 0 0 0 0450 g:imp.dll
00% 00% 00% 00% 10% 00% 10%
0 0 768 64 960 64 1856 0 0 0 0 0 0456 g:pmctls.dll
00% 00% 21% 21% 21% 21% 21%
0 0 0 0 192 0 192 0 0 0 0 0 045b g:seamless.dll
00% 00% 00% 00% 10% 00% 10%
0 0 0 0 128 128 256 0 0 0 0 0 0460 g:som.dll
00% 00% 00% 00% 10% 10% 10%
0 64 0 0 192 0 256 0 0 0 0 0 0464 g:pmviop.dll
00% 05% 00% 00% 21% 00% 17%
0 0 0 0 128 0 128 0 0 0 0 0 048a g:bvhwndw.dll
00% 00% 00% 00% 15% 00% 15%
0 2048 0 0 320 0 2368 0 0 0 0 0 048d g:videopmi.dll
00% 10% 00% 00% 10% 00% 10%
0 0 0 0 192 0 192 512 0 512 0 0 0498 g:ibmgpmi.dll
00% 00% 00% 00% 10% 00% 10%
0 512 0 0 320 0 832 512 0 512 0 0 04c5 g:videocfg.dll
00% 05% 00% 00% 05% 00% 05%
0 0 0 0 320 64 384 640 0 640 0 0 04ca g:helpmgr.dll
00% 00% 00% 00% 15% 15% 15%
0 0 0 64 0 0 64 128 64 192 0 64 04e9 g:harderr.exe
00% 00% 00% 10% 00% 00% 10%
0 0 0 0 448 0 448 512 0 512 0 0 0500 g:display.dll
00% 00% 00% 00% 42% 00% 42%
0 0 0 0 192 0 192 0 0 0 0 0 050a g:ibmvga32.dll
00% 00% 00% 00% 42% 00% 42%
0 0 0 0 320 0 320 0 0 0 0 0 050f g:ibmdev32.dll
00% 00% 00% 00% 42% 00% 42%
0 0 0 0 768 0 768 0 0 0 0 0 0515 g:dspres.dll
00% 00% 00% 00% 42% 00% 42%
0 0 0 0 512 0 512 0 0 0 0 0 0519 g:pmatm.dll
00% 00% 00% 00% 42% 00% 42%
0 0 0 0 64 0 64 0 0 0 0 0 051e g:sysmono.fon
00% 00% 00% 00% 05% 00% 05%
0 0 0 0 64 0 64 0 0 0 0 0 0520 g:courier.fon
00% 00% 00% 00% 05% 00% 05%
0 0 0 0 128 0 128 0 0 0 0 0 0522 g:helv.fon
00% 00% 00% 00% 10% 00% 10%
0 0 0 0 64 0 64 0 0 0 0 0 0524 g:times.fon
00% 00% 00% 00% 05% 00% 05%
0 0 0 0 192 192 384 0 0 0 0 0 0526 g:uconv.dll
00% 00% 00% 00% 42% 42% 42%
0 0 0 0 128 0 128 0 0 0 0 0 0540 g:fka.dll
00% 00% 00% 00% 05% 00% 05%
0 0 0 0 128 0 128 0 0 0 0 0 055e g:pmwpmri.dll
00% 00% 00% 00% 10% 00% 10%
0 0 0 0 0 0 0 384 64 448 0 0 0591 g:epwmux.exe
00% 00% 00% 00% 00% 00% 00%
0 0 0 64 0 0 64 128 64 192 0 0 05a3 g:epwmp.exe
00% 00% 00% 10% 00% 00% 10%
0 0 0 0 128 256 384 64 0 64 0 0 05ab g:epwcua.dll
00% 00% 00% 00% 05% 05% 05%
0 0 0 0 0 0 0 128 64 192 0 0 05c4 g:pmspool.exe
00% 00% 00% 00% 00% 00% 00%
0 0 0 0 0 0 0 320 64 384 0 0 05d8 g:epwpsi.exe
00% 00% 00% 00% 00% 00% 00%
0 0 0 0 128 320 448 128 0 128 0 0 05de g:epwpro.dll
00% 00% 00% 00% 05% 05% 05%
0 0 0 0 128 0 128 0 0 0 0 0 062c g:mdm.dll
00% 00% 00% 00% 05% 00% 05%
0 0 448 0 1024 128 1600 64 0 64 0 0 062f g:mmpm.dll
00% 00% 05% 00% 05% 05% 05%
0 0 0 0 192 128 320 512 0 512 0 0 0635 g:mmpmcrts.dll
00% 00% 00% 00% 05% 05% 05%
0 0 0 0 128 0 128 0 0 0 0 0 0660 g:mmio.dll
00% 00% 00% 00% 05% 00% 05%
0 0 0 0 128 64 192 832 0 832 0 0 066e g:somir.dll
00% 00% 00% 00% 05% 05% 05%
0 0 0 0 64 64 128 448 0 448 0 0 0672 g:somtc.dll
00% 00% 00% 00% 05% 05% 05%
0 0 0 0 192 64 256 0 0 0 0 0 0699 g:nwiapi.dll
00% 00% 00% 00% 05% 05% 05%
0 0 0 0 512 64 576 64 0 64 0 0 06bd g:wpprint.dll
00% 00% 00% 00% 05% 05% 05%
0 0 0 0 256 128 384 0 0 0 0 0 06d8 g:wpconfig.dll
00% 00% 00% 00% 05% 05% 05%
0 0 0 0 64 128 192 0 0 0 0 0 06dc g:wincfg.dll
00% 00% 00% 00% 05% 05% 05%
0 0 0 0 64 0 64 0 0 0 0 0 06e0 g:wpconmri.dll
00% 00% 00% 00% 05% 00% 05%
0 0 0 0 128 128 256 576 0 576 0 0 06e2 g:mmsnd.dll
00% 00% 00% 00% 05% 05% 05%
0 0 0 0 64 64 128 128 0 128 0 0 06f0 g:minxobj.dll
00% 00% 00% 00% 05% 05% 05%
0 0 0 0 0 0 0 128 192 320 0 0 0703 g:cmd.exe
00% 00% 00% 00% 00% 00% 00%
0 0 0 0 0 0 0 512 64 576 0 0 072b g:highmem.exe
00% 00% 00% 00% 00% 00% 00%
total total total total total total total maximum maximum maximum total maximum
give get giveget named global instance tot shr private p-shared tot prv s-system p-system
-----------------------------------------------------------------------------------------------------------
19584 11584 3136 3712 15360 3392 56768 14976 192 14976 1792 128
47% 27% 23% 41% 24% 18% 33%
High Memory Region Allocation Report in K-bytes.
Break-down by allocating module and storage category.
give get giveget named global instance tot shr private p-shared tot prv s-system p-system hmte name
0 0 0 524292 0 0 524292 16 0 16 0 0 072b g:highmem.exe
00% 00% 00% 05% 00% 00% 05%
total total total total total total total maximum maximum maximum total maximum
give get giveget named global instance tot shr private p-shared tot prv s-system p-system
-----------------------------------------------------------------------------------------------------------
0 0 0 524292 0 0 524292 16 0 16 0 0
00% 00% 00% 05% 00% 00% 05%
In this report the percentages appear below the allocations and are left aligned to allow
allocation sizes to be compared visually.
The percentages give an indication of the degree to which virtual address space is shared. If
a memory range is shared by all processes then the Share Index will be 100%.
The calculation used to determine the Share Index is:
(SUM (page * number of accessing processes) ) / (total pages * total processes)
In this algorithm, "total pages" refers to the maximum number allocated to the region being
calculated.
For example:
Suppose there are 10 processes each sharing 10 pages and only one of those processes accesses
2 other pages, while two of those processes share 3 more pages - 15 pages in total.
The 10 page object is 100% shared.
The 2 page object is 20% shared.
The 3 page object is 10% shared.
The overall share index for shared memory is calculated as a weighted average:
100 * ((10 * 10) + (2 * 1) + (3 * 2)) / (15 * 10) = 100 * (107/150) = 71%
The overall share indices are given in the totals columns. The absolute overall index is
given under "total tot share"
Detailed Allocation Report:
---------------------------
Example:
Allocating module: g:rexxinit.dll
Give accessors:
Get accessors:
GiveGet accessors:
Named shared accessors:
Global accessors:
192Kb pid=000a g:pmshell.exe
Instance accessors:
Private accessors:
Shared Private accessors:
Allocating module: g:snd.dll
Give accessors:
Get accessors:
GiveGet accessors:
Named shared accessors:
Global accessors:
128Kb pid=000e g:epwmp.exe
128Kb pid=000f g:pmspool.exe
128Kb pid=0011 g:pmshell.exe
128Kb pid=000a g:pmshell.exe
Instance accessors:
128Kb pid=000e g:epwmp.exe
128Kb pid=000f g:pmspool.exe
128Kb pid=0011 g:pmshell.exe
128Kb pid=000a g:pmshell.exe
Private accessors:
704Kb pid=0011 g:pmshell.exe
512Kb pid=000f g:pmspool.exe
512Kb pid=000a g:pmshell.exe
512Kb pid=000e g:epwmp.exe
Shared Private accessors:
This report show a detail break-down of storage allocated by each
module by storage category and accessing process.
The format is similar to that to the Detailed Process Usage Report q.v.
LDT segment availability report:
--------------------------------
Example:
Private LTD 16-bit segment availability for Pid: 0001 1023/1023 (hptda=0071 *sysinit)
Private LTD 16-bit segment availability for Pid: ---- 1023/1023 (hptda=008d *zombie)
Private LTD 16-bit segment availability for Pid: 0002 1023/1023 (hptda=00ad *vdm)
Private LTD 16-bit segment availability for Pid: 0005 1016/1023 (hptda=03a2 g:lanmsgex.exe)
Private LTD 16-bit segment availability for Pid: 0006 1017/1023 (hptda=03aa g:cntrl.exe)
Private LTD 16-bit segment availability for Pid: 0007 1015/1023 (hptda=03b6 g:landll.exe)
Private LTD 16-bit segment availability for Pid: 0008 1017/1023 (hptda=03c7 g:logdaem.exe)
Private LTD 16-bit segment availability for Pid: 0009 994/1023 (hptda=03fb g:epwrout.exe)
Private LTD 16-bit segment availability for Pid: 000a 889/1023 (hptda=041a g:pmshell.exe)
Private LTD 16-bit segment availability for Pid: 000b 1023/1023 (hptda=04bc *vdm)
Private LTD 16-bit segment availability for Pid: 000c 1007/1023 (hptda=04e2 g:harderr.exe)
Private LTD 16-bit segment availability for Pid: 000d 1016/1023 (hptda=058a g:epwmux.exe)
Private LTD 16-bit segment availability for Pid: 000e 978/1023 (hptda=059c g:epwmp.exe)
Private LTD 16-bit segment availability for Pid: 000f 990/1023 (hptda=05bd g:pmspool.exe)
Private LTD 16-bit segment availability for Pid: 0011 854/1023 (hptda=05cf g:pmshell.exe)
Private LTD 16-bit segment availability for Pid: 0010 997/1023 (hptda=05d0 g:epwpsi.exe)
Private LTD 16-bit segment availability for Pid: 0012 1016/1023 (hptda=06a7 g:epwmux.exe)
Private LTD 16-bit segment availability for Pid: 0013 1002/1023 (hptda=06fc g:cmd.exe)
Private LTD 16-bit segment availability for Pid: 0019 998/1023 (hptda=0721 g:highmem.exe)
Minimum Private LTD 16-bit segment availability: 854/1023
NB: 0 availability implies that the boundary sentinal will need to move for further expansion.
See System Summary Report for Shared Arena Current Lower Limit to see whether this is possible.
Shared arena regions for OS/2 4.5 Warp Server for e-business SMP
General Shared Arena R/W LTD 16-bit segment availability: 5407/6144
Shared R/W Basing Region LDT 16-bit segment availability: 241/256
Packed Region LTD 16-bit segment availability: 256/256
Global Shared Region LDT 16-bit segment availability: 318/511
NB: The Packed Region is donated to the General R/W Shared Region when not defined.
Total Shared Arena LDT 16-bit segment availability: 6222/7167
This report shows a break-down of 64Kb LDT segment availability by
region and process. The regions are OS2 version dependent and default
to OS2 Warp 4.0. Each line shows the available/maximum number of
segments for each region. Thus 998/1023 shows that 998 64Kb segments
are free out of a total of 1023.
Although this reports shows the 16-bit perspective of the compatibility
region 32-bit programs automatically impact the LDT since for 16/32-bit
compatibility every allocation in the compatibility region results in an
LDT descriptor assignment, each of which lies on a 64K boundary and has
a maximum size of 64K. The LDT is a hardware defined table. It has 8K
entries, therefore is able to map 8K * 64Kb = 512Mb address space -
hence the size of the compatibility region.
The shared arena is subdivided into a number of specialised regions whose
sizes and locations vary with different versions of OS2 - see picture below.
These regions are used for the following purposes:
Protected Region:
Reserved for protected DLLs. Since this is almost never been used it
is wasted storage. From Warp 3.0 Fix Pack 19 it was removed. Prior to
that it can be removed by specifying MEMMAN=NOPROTECT in CONFIG.SYS
Packed Region:
Reserved for packing 16-bit DLL code segments onto single physical
pages. If it's not being used, remove this specialisation by specifying
MEMMAN=NOPACK in CONFIG.SYS. By not have a packed region, slightly more
physical storage might be used for loading 16-bit DLLs. By having a
packed region, unusable holes in the shared arena may exist. Code loaded into
the Packed Region is swappable, therefore removing the packed region may cause
a slight reduction in SWAPPER.DAT size.
Global Shared Region:
Reserved for DLL Read-only and code segments.
For OS/2 2.1, 2.11, 3.0 and 4.0 the Protected and Packed Regions are technically
part of the GSR, though MEMSUM report the against GSR the usage outside of those
regions. If either the Packed or Protected Regions are not defined, then add the
reported counts for the undefined regions to the GSR.
For OS/2 Warp 3 SMP and Warp 4.5 Server for e-business the Packed Region is donated
to the Shared R/W region.
From fix pack 19 of Warp 3.0 and GA Warp 4.0 the Protected Region is automatically
donated to the GSR.
Based Region:
An area within the GSR in which system DLLs base their RO and Code
segments.
Share R/W Basing Region:
An area used by system DLLs in which to base their R/W segments. Below
this region is the general purpose R/W allocation region. This region is also
used for genral purpose allocations.
Minimum Private LDT 16- bit Segment Availability:
This shows the greatest impact of any private arena on the compatibility
region. Zero availability implies that the boundary sentinal for the shared
arena will need to move further expansion of the largest private arena. Whether
this is possible depends on the Current Lower Limit for the Shared Arena as shown
in the System Summary Report. Note that the so called expansion region that lies
between the shared and private arenas is technically donated to shared arena.
Total Shared Arena LDT 16-bit segment availability:
This show the overall impact of the shared arena on the compatibility
region.
Compatibility Region Layout for OS2 2.0 though 2.11:
│ │ 0x20000000
├───────────────────┤
│ │ top 64Kb reserved
│ Protected Region │
│ 64Mb │
│ │ 0x1c000000
├-------------------┤
│ Based Region │
│ 32Mb │ 0x1a000000
├-------------------┤
│ Packed Region │
│ 32Mb │ 0x18000000
├-------------------┤
│ . │
│ . │
│ . │
│ v │
│ │
│ │
│ │
│ General R/W │
│ │
│ │
│ │
│ ^ │
│ . │
│ . │ 0x04000000
├───────────────────┼─-----------------─┬─-----------------─┐
│ ├───────────────────┤ │
│ Private Arena │ │ │
│ Process 1 │ Process 2 ├───────────────────┤
│ 64Mb │ │ Process 3 │ bottom 64kb reserved in non-VDMs
└───────────────────┴───────────────────┴───────────────────┘
Compatibility Region Layout for OS2 3.0 to FP18:
│ │ 0x20000000
├───────────────────┤ <────────────────────┐
│ │ top 64Kb reserved │
│ Protected Region │ │
│ 64Mb │ │
│ │ 0x1c000000 │
├-------------------┤ │
│ Based Region │ │
│ 32Mb │ 0x1a000000 │ Complete GSR
├-------------------┤ │
│ Packed Region │ │
│ 32Mb │ 0x18000000 │
├-------------------┤ │
│ │ │
│ additional GSR │ │
│ 64Mb │ │
│ │ 0x14000000 │
├-------------------┤ <────────────────────┘
│ R/W Basing Rgn │
│ 32Mb │ 0x13000000
├-------------------┤
│ . │
│ . │
│ v │
│ │
│ General R/W │
│ │
│ ^ │
│ . │
│ . │ 0x04000000
├───────────────────┼─-----------------─┬─-----------------─┐
│ ├───────────────────┤ │
│ Private Arena │ │ │
│ Process 1 │ Process 2 ├───────────────────┤
│ 64Mb │ │ Process 3 │ bottom 64kb reserved in non-VDMs
└───────────────────┴───────────────────┴───────────────────┘
Compatibility Region Layout for OS2 3.0 from FP18 for Uniprocessor and 4.0:
│ │ 0x20000000
├───────────────────┤ <────────────────────┐
│ │ top 64Kb reserved │
│ Part of GSR │ │
│ 64Mb │ │
│ │ 0x1c000000 │
├-------------------┤ │
│ Based Region │ │
│ 32Mb │ 0x1a000000 │ Complete GSR
├-------------------┤ │
│ Packed Region 16Mb│ 0x19000000 │
├-------------------┤ │
│ Part of GSR 16Mb │ 0x18000000 │
├-------------------┤ <────────────────────┘
│ │
│ │
│ R/W Basing Rgn │
│ │
│ 80Mb │
│ │ 0x13000000
├-------------------┤
│ . │
│ . │
│ v │
│ │
│ General R/W │
│ │
│ ^ │
│ . │
│ . │ 0x04000000
├───────────────────┼─-----------------─┬─-----------------─┐
│ ├───────────────────┤ │
│ Private Arena │ │ │
│ Process 1 │ Process 2 ├───────────────────┤
│ 64Mb │ │ Process 3 │ bottom 64kb reserved in non-VDMs
└───────────────────┴───────────────────┴───────────────────┘
Compatibility Region Layout for OS2 3.0 SMP:
│ │ 0x20000000
├───────────────────┤
│ │ top 64Kb reserved
│ Entire GSR │
│ 64Mb │
│ │ 0x1c000000
├-------------------┤
│ Packed Region │
│ 32Mb │ 0x1a000000
├-------------------┤
│ │
│ │
│ General R/W │
│ 112Mb │
│ │
│ │
│ │ 0x14000000
├-------------------┤
│ R/W Basing Rgn 16M│ 0x13000000
├-------------------┤
│ . │
│ . │
│ v │
│ │
│ General R/W │
│ │
│ ^ │
│ . │
│ . │ 0x04000000
├───────────────────┼─-----------------─┬─-----------------─┐
│ ├───────────────────┤ │
│ Private Arena │ │ │
│ Process 1 │ Process 2 ├───────────────────┤
│ 64Mb │ │ Process 3 │ bottom 64kb reserved in non-VDMs
└───────────────────┴───────────────────┴───────────────────┘
Compatibility Region Layout for OS2 4.5 SMP:
│ │ 0x20000000
├───────────────────┤
│ Entire GSR │ top 64Kb reserved
│ 32Mb │ 0x1e000000
├-------------------┤
│ Packed Region │
│ 32Mb │ 0x1c000000
├-------------------┤
│ │
│ │
│ │
│ General R/W │
│ 128Mb │
│ │
│ │
│ │ 0x14000000
├-------------------┤
│ R/W Basing Rgn 16M│ 0x13000000
├-------------------┤
│ . │
│ . │
│ v │
│ │
│ General R/W │
│ │
│ ^ │
│ . │
│ . │ 0x04000000
├───────────────────┼─-----------------─┬─-----------------─┐
│ ├───────────────────┤ │
│ Private Arena │ │ │
│ Process 1 │ Process 2 ├───────────────────┤
│ 64Mb │ │ Process 3 │ bottom 64kb reserved in non-VDMs
└───────────────────┴───────────────────┴───────────────────┘
Compatibility Region Layout for OS2 4.5 Uniprocessor:
│ │ 0x20000000
├───────────────────┤
│ Entire GSR │ top 64Kb reserved
│ 32Mb │ 0x1e000000
├-------------------┤
│ Packed Region 16Mb│ 0x1d000000
├-------------------┤
│ │
│ │
│ │
│ │
│ General R/W │
│ 144Mb │
│ │
│ │
│ │ 0x14000000
├-------------------┤
│ R/W Basing Rgn 16M│ 0x13000000
├-------------------┤
│ . │
│ . │
│ v │
│ │
│ General R/W │
│ │
│ ^ │
│ . │
│ . │ 0x04000000
├───────────────────┼─-----------------─┬─-----------------─┐
│ ├───────────────────┤ │
│ Private Arena │ │ │
│ Process 1 │ Process 2 ├───────────────────┤
│ 64Mb │ │ Process 3 │ bottom 64kb reserved in non-VDMs
└───────────────────┴───────────────────┴───────────────────┘
Change History:
14th Dec 1998 - 2.0 released
5th Jan 1999 - 2.1 Add protection against corrupted input records.
Correct criteria for detecting and ignoring VM Lock Records.
7th Jul 1999 - 2.2 Fixed region reports for correct region boundaries.
Allow /R syntax to be in mixed case.
Increase maximum number of context records to 64K.
Correct high shared arena current lower limit when high shared is free.
Correct and add informational messages.
9th Aug 1999 - 2.3 Share Index Calculation added for shared arena (/I option).