Annotation of os2sdk/profiler/profile.doc, revision 1.1

1.1     ! root        1:  
        !             2: 
        !             3:        OS/2 Profiler
        !             4: ------------------------------------------------------------
        !             5: 
        !             6:   The OS/2 Profiler will allow you to determine where your programs
        !             7: are spending their time. It will tell you the percentage of execution 
        !             8: time spent in your program at a function level when used with a .MAP 
        !             9: file. It will also show what percentage of execution time is being used
        !            10: by the system.
        !            11: 
        !            12: IMPORTANT NOTE: The profiling programming interfaces and tools are
        !            13: provided here in the Microsoft OS/2 Software Development Kit as an
        !            14: aid to developers. These features will NOT be present in the
        !            15: end-user version of the product. If you insert the profiling calls
        !            16: into your code during development you must remove them in your
        !            17: final code otherwise your application will fail to load on the
        !            18: retail end user system. In addition we will change and improve
        !            19: these calls over time and future versions may not be compatible
        !            20: with those in the current kit. These calls are not part of the
        !            21: standard MS OS/2 Application Programming Interface.
        !            22: 
        !            23: 
        !            24: Profile Library Calls:
        !            25: ======================
        !            26: 
        !            27: 
        !            28: -----------------------------
        !            29: ProfInit( type);
        !            30:    int type;            /* type = system or user (0/1) */
        !            31: 
        !            32: ProfInit() initializes internal data space.
        !            33: 
        !            34:   ProfInit clears the data areas after it has allocated them. In 
        !            35: addition to the profiling coutner segments, the profiler allocates a 64K
        !            36: block for internal use. 
        !            37: 
        !            38: 
        !            39: ------------------------------
        !            40: ProfOn( type);
        !            41:    int type;            /* type = system or user (0/1) */
        !            42: 
        !            43: ProfOn() starts the counters.
        !            44: 
        !            45: 
        !            46: ------------------------------
        !            47: ProfOff( type);
        !            48:    int type;            /* type = system or user (0/1) */
        !            49: 
        !            50: ProfOff() stops the counters.
        !            51: 
        !            52: 
        !            53: ------------------------------
        !            54: ProfDump( type, filename);
        !            55:    int type;            /* type = system or user (0/1) */
        !            56:    char far *filename;  /* long pointer to ASCIIZ filename */
        !            57: 
        !            58: 
        !            59: ProfDump() dumps the profiling information to the specified filename.
        !            60: The file is used later as input for the profiling utility PINFO.EXE
        !            61: which displays the usage statistics.
        !            62: 
        !            63: ------------------------------
        !            64: ProfFree( type);
        !            65:    int type;            /* type = system or user (0/1) */
        !            66: 
        !            67: ProfFree() is the final call in a profiling session. ProfFree frees
        !            68: all memory used by the profiling data segments and data allocated 
        !            69: for internal use.
        !            70: 
        !            71: 
        !            72: ------------------------------
        !            73: ProfClear( type);
        !            74:    int type;            /* type = system or user (0/1) */
        !            75: 
        !            76: ProfClear() Clears all counters. 
        !            77: 
        !            78: 
        !            79: 
        !            80: 
        !            81: To use the profiler follow these steps:
        !            82: ---------------------------------------
        !            83: 
        !            84: 1>  a. Copy PINFO.EXE and PSET.EXE into a directory on your path.
        !            85:     b. Put PROFILE.DLL in a directory in your LIBPATH.
        !            86: 
        !            87: 
        !            88:    USER PROFILING
        !            89:    --------------
        !            90: 
        !            91: 2> a. Get testprof.c, testprof.def, testprof.lfr, profile.h and profile.lib
        !            92:       from the profiler\example directory to use as an example.
        !            93:    b. Insert calls to the profiling functions in your application.
        !            94:       Use testprof.c as a model.
        !            95:    c. Build your executable.
        !            96:    d. Run your executable.
        !            97:    
        !            98: 
        !            99:    SYSTEM PROFILING
        !           100:    ----------------
        !           101: 2> a. Make a batch file with the following lines:
        !           102:         pset init
        !           103:         pset on
        !           104:         (your commands here...)
        !           105:         pset off
        !           106:         pset dump (your filename)
        !           107:         pset free
        !           108:    b. Run the batch file.
        !           109: 
        !           110: 3> a. use PINFO.EXE on your dump file.
        !           111: 
        !           112: 
        !           113: (Your results may be different than this example.)
        !           114: 
        !           115:     Example 1. "pinfo testprof.pro"
        !           116: 
        !           117:                Module    Segment  Length  Tics      Percent
        !           118:                --------  -------  ------  --------  -------
        !           119:                TESTPROF    0001    188c        130  100.00
        !           120:                                           --------
        !           121:                                   Total        130
        !           122: 
        !           123:     Example 2. "pinfo testprof.pro testprof.map"
        !           124: 
        !           125:                Module TESTPROF
        !           126: 
        !           127:                Segment 1:
        !           128:                0001:0010          1 (  0.77%)   _main
        !           129:                0001:00fe        129 ( 99.23%)   _inner
        !           130: 
        !           131:     NOTE: pinfo extracts data on the segments belonging to the module
        !           132:           represented in the map file.
        !           133: 
        !           134: 
        !           135: PINFO.EXE   (NOTE: OS/2 Protected mode only)
        !           136: ---------
        !           137: USAGE: pinfo [-etz] dump_file [ [-f] file]
        !           138:          -e : print every tic count (subject to -z)
        !           139:         -t : print totals for each segment (subject to -z)
        !           140:          -z : print 0 counts
        !           141:    dump_file: output of ProfDump() API;
        !           142:         file: map file to correlate with dump file
        !           143:      -f file: file is list of map files to correlate with dump file,
        !           144:                file names listed one per line.
        !           145: 
        !           146:        (See above examples)
        !           147: 
        !           148: PSET.EXE    (NOTE: OS/2 Protected mode only)
        !           149: --------
        !           150: USAGE: pset INIT | CLEAR | ON | OFF | DUMP file | FREE
        !           151:    CLEAR      reset counts to zero
        !           152:    DUMP file  dump profile data to <file>
        !           153:    FREE       deallocate system profiling data space
        !           154:    INIT       allocate system profiling data space
        !           155:    OFF        turn off profiling
        !           156:    ON         turn on profiling
        !           157: 
        !           158:        (See the Profile Library function descriptions for further
        !           159:                detail.)
        !           160: 
        !           161: 
        !           162: Misc. Info
        !           163: ----------
        !           164: 
        !           165: ProfInit() initializes the segment selector table used to determine later
        !           166: if the interrupted CS has a corresponding data area and then allocates
        !           167: the data areas. For each CS in the LDT, a parallel data segment is
        !           168: allocated with the same size as the CS. The IP from the IRET frame
        !           169: has the lower two bits masked off for DWORD resolution and is then used 
        !           170: as an offset into this data segment to increment a DWORD. This gives
        !           171: a profiling granularity of a DWORD. The overhead of the profiler is
        !           172: less than 5% of non-profiling execution. 
        !           173: 
        !           174: 
        !           175: The profiler uses Timer 0 of the 8243 Timer Chip. Any applications that
        !           176: use this timer will not profile correctly. 
        !           177: 
        !           178: Real mode profiling is NOT supported. Since real mode uses Timer 0 for
        !           179: other things, real mode should not be used.
        !           180: 
        !           181: The profiler supports nested calls to ProfOn() and ProfOff(). There must
        !           182: be a matching ProfOff() call for every ProfOn() call.
        !           183: 
        !           184: 
        !           185: 

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.