IBM Support

IZ98559: WRONG STATISTICS IN TOPAS MAIN PANEL. APPLIES TO AIX 7100-01

A fix is available

Subscribe

You can track all active APARs for this component.

 

APAR status

  • Closed as program error.

Error description

  • In the topas PAGING area, if the statistics is displayed with
    a K, the K is never cleared, and therefore gives the appearance
    of a very large number when it's really trying to display a
    small number.
    

Local fix

Problem summary

  • .
    In the topas PAGING area, if the statistics is displayed with a
    K, the K is never cleared, and therefore gives the appearance
    of a very large number when it's really trying to display a
    small number. Also we are sending a 'long long' or 'double'
    type vaule to a function which can receives only 'long' type
    value, this can cause showing up an undefined statistics
    value.
    

Problem conclusion

  • .
    topas.h defines:
    .
    struct sysinfoData { longlong_t    s_pagexct; /*
    Mem/Virt/pagexct save */ longlong_t    pagexct; /*
    Mem/Virt/pagexct */ longlong_t    s_vMemSteal; /*
    Mem/Virt/steal save */ longlong_t    vMemSteal; /*
    Mem/Virt/steal */ longlong_t    s_vMemPgspgin; /*
    Mem/Virt/pgspgin save */ longlong_t    vMemPgspgin; /*
    Mem/Virt/pgspgin */ longlong_t    s_vMemPgspgout; /*
    Mem/Virt/pgspgout save */ longlong_t    vMemPgspgout; /*
    Mem/Virt/pgspgout */ longlong_t    s_vMemPagein; /*
    Mem/Virt/pagein  save */ longlong_t    vMemPagein; /*
    Mem/Virt/pagein */ longlong_t    s_vMemPageout; /*
    Mem/Virt/pageout save */ longlong_t    vMemPageout; /*
    Mem/Virt/pageout */ longlong_t    s_vMemSio; /* Mem/Virt/sio
    save */ longlong_t    vMemSio; /* Mem/Virt/sio */ longlong_t
    PagSpPerTotalused; /* PagSp/%totalused */ longlong_t
    PagSpPerTotalfree; /* PagSp/%totalfree */ longlong_t
    PagSpTotalsize; /* PagSp/totalsize */ longlong_t
    memRealSize; /* Mem/Real/size */ longlong_t    memRealPerComp;
    /* Mem/Real/%comp */ longlong_t    memRealPerNoncomp; /*
    Mem/Real/%noncomp */ longlong_t    memRealPerClnt; /*
    Mem/Real/%clnt */ longlong_t    memRealNumClnt; /*
    Mem/Real/Num/%clnt */ longlong_t    s_procPswitch; /*
    Proc/pswitch save XXX */ longlong_t    procPswitch; /*
    Proc/pswitch XXX */ longlong_t    s_sysSyscall; /*
    Syscall/total XXX save */ longlong_t    sysSyscall; /*
    Syscall/total XXX */ longlong_t    s_sysRead; /* Syscall/read
    XXX save */ longlong_t    sysRead; /* Syscall/read XXX */
    longlong_t    s_sysWrite; /* Syscall/write XXX save */
    longlong_t    sysWrite; /* Syscall/write XXX */ longlong_t
    s_sysFork; /* Syscall/fork XXX save */ longlong_t    sysFork;
    /* Syscall/fork XXX */ longlong_t    s_sysExec; /* Syscall/exec
    XXX save */ longlong_t    sysExec; /* Syscall/exec XXX */
    longlong_t    s_procRQ; /* Proc/runque XXX save */
    longlong_t    procRQ; /* Proc/runque XXX */ longlong_t
    s_procSQ; /* Proc/swpque XXX save */ longlong_t    procSQ; /*
    Proc/swpque XXX */ longlong_t    s_sysIOReadch; /* SysIO/readch
    XXX save */ longlong_t    sysIOReadch; /* SysIO/readch XXX */
    longlong_t    s_sysIOWritech; /* SysIO/writech XXX save */
    longlong_t    sysIOWritech; /* SysIO/writech XXX */
    longlong_t    s_sysIOTtyraw; /* SysIO/ttyraw XXX save */
    longlong_t    sysIOTtyraw; /* SysIO/ttyraw XXX */ longlong_t
    s_sysIOTtyout; /* SysIO/ttyout XXX save */ longlong_t
    sysIOTtyout; /* SysIO/ttyout XXX */ longlong_t    s_fsIgets; /*
    FS/iget save */ longlong_t    fsIgets; /* FS/iget */
    longlong_t    s_fsNamei; /* FS/namei save */ longlong_t
    fsNamei; /* FS/namei */ longlong_t    s_fsDirblk; /* FS/dirblk
    save */ longlong_t    fsDirblk; /* FS/dirblk */ ulong_t
    s_nfsSv2Calls; /* NFS/Server/v2calls save */ ulong_t
    nfsSv2Calls; /* NFS/Server/v2calls */ ulong_t
    s_nfsCv2Calls; /* NFS/Client/v2calls save */ ulong_t
    nfsCv2Calls; /* NFS/Client/v2calls */ ulong_t
    s_nfsSv3Calls;/* NFS/Server/v3calls save */ ulong_t
    nfsSv3Calls; /* NFS/Server/v3calls */ ulong_t
    s_nfsCv3Calls; /* NFS/Client/v3calls save */ ulong_t
    nfsCv3Calls; /* NFS/Client/v3calls */ longlong_t    memNumPerm;
    /*Num/Perm */ longlong_t    memNumFrb; /* Num/Frb */
    longlong_t    pageSizePerTotal; /* Total/Page/Size */
    longlong_t    pageFreeTotal; /* Page/Free  */ longlong_t
    pagePerUsed; /*Page/% Used */ longlong_t    pagePerFree;
    /*Page/% Free */ };
    .
    Note here that all the statistics are of type either 'long long
    int' (8 bytes) or 'unsigned long', that means they can't be
    accomodated into a long type variable. But see this:
    .
    topas.h defines:  typedef struct { int             line;
    int             col; void            (*fun) (long, int, int);
    <--- note : - pointer to a funtion that receives a LONG and 2
    int variable, float           mul; } where;
    .
    global.c defines:  where prt1   = { {11, 56, p7, 1.0}, {12, 56,
    p7, 1.0}, {13, 56, p7, 1.0}, {14, 56, p7, 1.0}, {15, 56, p7,
    1.0}, {16, 56, p7, 1.0}, {17, 56, p7, 1.0}, {17, 74, p41,
    10.0}, {18, 74, p41, 10.0}, {16, 74, p6d4k, 1.0}, {10, 74,
    p6d4k, 1.0}, {11, 74, p41, 10.0}, {12, 74, p41, 10.0}, {13, 74,
    p41, 10.0}, {5, 72, p8l, 1.0}, {6, 72, p8l, 1.0}, {7, 72, p8l,
    1.0}, {20, 55, p8l, 1.0}, {21, 55, p8l, 1.0}, {22, 55, p8l,
    1.0}, {23, 55, p8l, 1.0} };
    .
    global.h declares:  ----------------- void p7(long val, int
    line, int row); void p41(long val, int line, int row); void
    p6d4k(long val, int line, int row); void p8l(long val, int
    line, int row);
    .
    Here are we used the ptr1 arrays:
    topas.c:
    prt1 14 .fun(sysData.fsIgets/etime,prt1 14 .line,
    prt1 14 .col); topas.c:
    prt1 15 .fun(sysData.fsNamei/etime,prt1 15 .line,
    prt1 15 .col); topas.c:
    prt1 16 .fun(sysData.fsDirblk/etime,prt1 16 .line,
    prt1 16 .col); topas.c:
    prt1 7 .fun(sysData.pagePerUsed,prt1 7 .line, prt1 7 .col);
    topas.c:
    prt1 8 .fun(sysData.pagePerFree,prt1 8 .line, prt1 8 .col);
    topas.c:
    prt1 9 .fun(sysData.pageSizePerTotal,prt1 9 .line,
    prt1 9 .col); topas.c:
    prt1 10 .fun(sysData.memRealSize,prt1 10 .line, prt1 10 .col);
    topas.c:
    prt1 11 .fun(sysData.memRealPerComp,prt1 11 .line,
    prt1 11 .col); topas.c:
    prt1 12 .fun(sysData.memRealPerNoncomp,prt1 12 .line,
    prt1 12 .col); topas.c:
    prt1 13 .fun(sysData.memRealPerClnt,prt1 13 .line,
    prt1 13 .col); topas.c:
    prt1 0 .fun(sysData.pagexct/etime,prt1 0 .line, prt1 0 .col);
    topas.c:
    prt1 1 .fun(sysData.vMemSteal/etime,prt1 1 .line, prt1 1 .col);
    topas.c:
    prt1 2 .fun(sysData.vMemPgspgin/etime,prt1 2 .line,
    prt1 2 .col); topas.c:
    prt1 3 .fun(sysData.vMemPgspgout/etime,prt1 3 .line,
    prt1 3 .col); topas.c:
    prt1 4 .fun(sysData.vMemPagein/etime,prt1 4 .line,
    prt1 4 .col); topas.c:
    prt1 5 .fun(sysData.vMemPageout/etime,prt1 5 .line,
    prt1 5 .col); topas.c:
    prt1 6 .fun(sysData.vMemSio/etime,prt1 6 .line, prt1 6 .col);
    topas.c:
    prt1 10 .fun(sysData.memRealSize * memhardlim,prt1 10 .line,
    prt1 10 .col); topas.c:
    prt1 17 .fun(sysData.nfsSv2Calls/etime,prt1 17 .line,
    prt1 17 .col); topas.c:
    prt1 18 .fun(sysData.nfsCv2Calls/etime,prt1 18 .line,
    prt1 18 .col); topas.c:
    prt1 19 .fun(sysData.nfsSv3Calls/etime,prt1 19 .line,
    prt1 19 .col); topas.c:
    prt1 20 .fun(sysData.nfsCv3Calls/etime,prt1 20 .line,
    prt1 20 .col);
    .
    topas.c defines the funtions p7 and p7100:
    .
    void p7(long val, int line, int row) { if(val > 99999){
    p7100((longlong_t)val,line, row); return; } move(line, row);
    printw("%7ld", val); }
    .
    void p7100(longlong_t val, int line, int row) { double
    v = val / 1024.0;
    .
    if(v > 9999.0){ p71000(v,line, row); return; } move(line, row);
    printw("%7.1fK", v); }
    .
    So basically we are sending a 'long long' or 'double' type
    value to the p7 function, but it can hold only a long value.
    The fix is changing the first argument type of the funtions p7,
    p41, p6d4k and p8l as to 'long long int'. These funcitons are
    called through the function pointer defined in the sytructure
    name 'where' hence we need to change this structure as well.
    Also to fix 'the K coming after the PAGING area and never
    cleared issue' we should reduce the column by one character to
    accomodate K/M/G/T. This should be done on the funtion p7100.
    

Temporary fix

Comments

APAR Information

  • APAR number

    IZ98559

  • Reported component name

    AIX V7.1

  • Reported component ID

    5765H4000

  • Reported release

    710

  • Status

    CLOSED PER

  • PE

    NoPE

  • HIPER

    NoHIPER

  • Submitted date

    2011-04-07

  • Closed date

    2011-04-07

  • Last modified date

    2013-04-16

  • APAR is sysrouted FROM one or more of the following:

    IZ97008

  • APAR is sysrouted TO one or more of the following:

Fix information

  • Fixed component name

    AIX V7.1

  • Fixed component ID

    5765H4000

Applicable component levels

  • R710 PSY U838083

       UP11/10/05 I 1000

PTF to Fileset Mapping

[{"Business Unit":{"code":"BU054","label":"Systems w\/TPS"},"Product":{"code":"SSMV87","label":"AIX 6.1 Enterprise Edition"},"Component":"","ARM Category":[],"Platform":[{"code":"PF025","label":"Platform Independent"}],"Version":"710","Edition":"","Line of Business":{"code":"LOB08","label":"Cognitive Systems"}},{"Business Unit":{"code":"BU058","label":"IBM Infrastructure w\/TPS"},"Product":{"code":"SSMVAX","label":"AIX Express Edition"},"Component":"","ARM Category":[],"Platform":[{"code":"PF025","label":"Platform Independent"}],"Version":"710","Edition":"","Line of Business":{"code":"LOB08","label":"Cognitive Systems"}},{"Business Unit":{"code":"BU054","label":"Systems w\/TPS"},"Product":{"code":"SG11R","label":"AIX 7.1 HIPERS, APARs and Fixes"},"Component":"","ARM Category":[],"Platform":[{"code":"PF025","label":"Platform Independent"}],"Version":"710","Edition":"","Line of Business":{"code":"","label":""}}]

Document Information

Modified date:
16 April 2013