[squeak-dev] The Trunk: System-dtl.790.mcz

Eliot Miranda eliot.miranda at gmail.com
Fri Jan 29 15:36:22 UTC 2016


Hi David,

    why bother?  Since the two never need to coexist doesn't it make sense to have two different, simple, more readable versions?  I find the code complex and since it is important, want to keep it as comprehensible as possible.  I think in this case it is better to let the two diverge.  You're just adding back cost we don't need to pay.

_,,,^..^,,,_ (phone)

> On Jan 29, 2016, at 7:31 AM, commits at source.squeak.org wrote:
> 
> David T. Lewis uploaded a new version of System to project The Trunk:
> http://source.squeak.org/trunk/System-dtl.790.mcz
> 
> ==================== Summary ====================
> 
> Name: System-dtl.790
> Author: dtl
> Time: 29 January 2016, 11:37:48.065507 pm
> UUID: 1ccde720-42a2-41fe-bcc4-cb9694d5af07
> Ancestors: System-eem.789
> 
> Update vmStatisticsReportString to restore memory stats when running on pre-spur VM.
> 
> =============== Diff against System-eem.789 ===============
> 
> Item was changed:
>  ----- Method: SmalltalkImage>>vmStatisticsReportString (in category 'vm statistics') -----
>  vmStatisticsReportString
>      "(Workspace new contents: Smalltalk vmStatisticsReportString)
>          openLabel: 'VM Statistics'"
>      "StringHolderView
>          open: (StringHolder new contents: Smalltalk vmStatisticsReportString)
>          label: 'VM Statistics'"
> 
>      | params oldSpaceEnd youngSpaceEnd memorySize fullGCs fullGCTime incrGCs incrGCTime tenureCount upTime upTime2 fullGCs2 fullGCTime2 incrGCs2 incrGCTime2 tenureCount2 str freeSize youngSize used |
>      params := self getVMParameters.
>      oldSpaceEnd            := params at: 1.
>      youngSpaceEnd        := params at: 2.
>      memorySize            := params at: 3.
>      fullGCs                := params at: 7.
>      fullGCTime            := params at: 8.
>      incrGCs                := params at: 9.
>      incrGCTime            := params at: 10.
>      tenureCount            := params at: 11.
>      upTime := (params at: 20) ~= 0 "utcMicrosecondClock at startupp in later Spur VMs"
>                  ifTrue: [Time utcMicrosecondClock - (params at: 20) + 500 // 1000]
>                  ifFalse: [Time eventMillisecondClock]. "Fall back on old microsecond clock; Good for 47.5 days"
> 
>      str := WriteStream on: (String new: 700).
>      str    nextPutAll: 'uptime            ';
>          print: (upTime / 1000 / 60 // 60); nextPut: $h;
>          print: (upTime / 1000 / 60 \\ 60) asInteger; nextPut: $m;
>          print: (upTime / 1000 \\ 60) asInteger; nextPut: $s; cr.
> 
>      str    nextPutAll: 'memory        ';
>          nextPutAll: memorySize asStringWithCommas; nextPutAll: ' bytes'; cr.
>      str    nextPutAll:    '    old            ';
>          nextPutAll: oldSpaceEnd asStringWithCommas; nextPutAll: ' bytes (';
>          print: (oldSpaceEnd / memorySize * 100) maxDecimalPlaces: 1; nextPutAll: '%)'; cr.
> -    youngSize := params at: 44.
> -    str    nextPutAll: '    young        ';
> -        nextPutAll: youngSize asStringWithCommas; nextPutAll: ' bytes (';
> -        print: youngSize / memorySize * 100 maxDecimalPlaces: 1; nextPutAll: '%)'; cr.
> -    youngSize := youngSpaceEnd. "used eden"
> -    freeSize := (params at: 54) + (params at: 44) - youngSize.
> -    used := youngSize + oldSpaceEnd - freeSize.
> -    str    nextPutAll: '    used        ';
> -        nextPutAll: used asStringWithCommas; nextPutAll: ' bytes (';
> -        print: used / memorySize * 100 maxDecimalPlaces: 1; nextPutAll: '%)'; cr.
> -    str    nextPutAll: '    free        ';
> -        nextPutAll: freeSize asStringWithCommas; nextPutAll: ' bytes (';
> -        print: freeSize / memorySize * 100 maxDecimalPlaces: 1; nextPutAll: '%)'; cr.
> 
> +    params size >= 54 ifTrue: [ "Spur object memory"
> +        youngSize := params at: 44.
> +        str    nextPutAll: '    young        ';
> +            nextPutAll: youngSize asStringWithCommas; nextPutAll: ' bytes (';
> +            print: youngSize / memorySize * 100 maxDecimalPlaces: 1; nextPutAll: '%)'; cr.
> +        youngSize := youngSpaceEnd. "used eden"
> +        freeSize := (params at: 54) + (params at: 44) - youngSize.
> +        used := youngSize + oldSpaceEnd - freeSize.
> +        str    nextPutAll: '    used        ';
> +            nextPutAll: used asStringWithCommas; nextPutAll: ' bytes (';
> +            print: used / memorySize * 100 maxDecimalPlaces: 1; nextPutAll: '%)'; cr.
> +        str    nextPutAll: '    free        ';
> +            nextPutAll: freeSize asStringWithCommas; nextPutAll: ' bytes (';
> +            print: freeSize / memorySize * 100 maxDecimalPlaces: 1; nextPutAll: '%)'; cr
> +    ] ifFalse: [ "Earlier VM and V3 object memory"
> +        str    nextPutAll: '    young        ';
> +            nextPutAll: (youngSpaceEnd - oldSpaceEnd) asStringWithCommas; nextPutAll: ' bytes (';
> +            print: (youngSpaceEnd - oldSpaceEnd / memorySize * 100) maxDecimalPlaces: 1; nextPutAll: '%)'; cr.
> +        str    nextPutAll: '    used        ';
> +            nextPutAll: youngSpaceEnd asStringWithCommas; nextPutAll: ' bytes (';
> +            print: (youngSpaceEnd / memoryEnd * 100) maxDecimalPlaces: 1; nextPutAll: '%)'; cr.
> +        str    nextPutAll: '    free        ';
> +            nextPutAll: (memoryEnd - youngSpaceEnd) asStringWithCommas; nextPutAll: ' bytes (';
> +            print: (memoryEnd - youngSpaceEnd / memoryEnd * 100) maxDecimalPlaces: 1; nextPutAll: '%)'; cr.
> +    ].
> + 
>      str    nextPutAll: 'GCs            ';
>          nextPutAll: (fullGCs + incrGCs) asStringWithCommas.
>      fullGCs + incrGCs > 0 ifTrue: [
>          str
>              nextPutAll: ' ('; 
>              print: (upTime / (fullGCs + incrGCs)) maxDecimalPlaces: 1; 
>              nextPutAll: ' ms between GCs)'
>      ].
>      str cr.
>      str    nextPutAll: '    full            ';
>          nextPutAll: fullGCs asStringWithCommas; nextPutAll: ' totalling '; nextPutAll: fullGCTime asStringWithCommas; nextPutAll: ' ms (';
>          print: (fullGCTime / upTime * 100) maxDecimalPlaces: 1;
>          nextPutAll: '% uptime)'.
>      fullGCs = 0 ifFalse:
>          [str    nextPutAll: ', avg '; print: (fullGCTime / fullGCs) maxDecimalPlaces: 1; nextPutAll: ' ms'].
>      str    cr.
>      str    nextPutAll: '    incr            ';
>          nextPutAll: incrGCs asStringWithCommas; nextPutAll: ' totalling '; nextPutAll: incrGCTime asStringWithCommas; nextPutAll: ' ms (';
>          print: (incrGCTime / upTime * 100) maxDecimalPlaces: 1;
>          nextPutAll: '% uptime), avg '; print: (incrGCTime / incrGCs) maxDecimalPlaces: 1; nextPutAll: ' ms'; cr.
>      str    nextPutAll: '    tenures        ';
>          nextPutAll: tenureCount asStringWithCommas.
>      tenureCount = 0 ifFalse:
>          [str nextPutAll: ' (avg '; print: incrGCs // tenureCount; nextPutAll: ' GCs/tenure)'].
>      str    cr.
> 
>  LastStats ifNil: [LastStats := Array new: 6]
>  ifNotNil: [
>      upTime2 := upTime - (LastStats at: 1).
>      fullGCs2 := fullGCs - (LastStats at: 2).
>      fullGCTime2 := fullGCTime - (LastStats at: 3).
>      incrGCs2 := incrGCs - (LastStats at: 4).
>      incrGCTime2 := incrGCTime - (LastStats at: 5).
>      tenureCount2 := tenureCount - (LastStats at: 6).
> 
>      str    nextPutAll: self textMarkerForShortReport ;
>          nextPutAll: (fullGCs2 + incrGCs2) asStringWithCommas.
>      fullGCs2 + incrGCs2 > 0 ifTrue: [
>          str
>              nextPutAll: ' ('; 
>              print: upTime2 // (fullGCs2 + incrGCs2); 
>              nextPutAll: ' ms between GCs)'.
>      ].
>      str cr.
>      str    nextPutAll: '    uptime        '; print: (upTime2 / 1000.0) maxDecimalPlaces: 1; nextPutAll: ' s'; cr.
>      str    nextPutAll: '    full            ';
>          nextPutAll: fullGCs2 asStringWithCommas; nextPutAll: ' totalling '; nextPutAll: fullGCTime2 asStringWithCommas; nextPutAll: ' ms (';
>          print: (fullGCTime2 / upTime2 * 100) maxDecimalPlaces: 1;
>          nextPutAll: '% uptime)'.
>      fullGCs2 = 0 ifFalse:
>          [str    nextPutAll: ', avg '; print: (fullGCTime2 / fullGCs2) maxDecimalPlaces: 1; nextPutAll: ' ms'].
>      str    cr.
>      str    nextPutAll: '    incr            ';
>          nextPutAll: incrGCs2 asStringWithCommas; nextPutAll: ' totalling '; nextPutAll: incrGCTime2 asStringWithCommas; nextPutAll: ' ms (';
>          print: (incrGCTime2 / upTime2 * 100) maxDecimalPlaces: 1;
>          nextPutAll: '% uptime), avg '.
>      incrGCs2 > 0 ifTrue: [
>           str print: (incrGCTime2 / incrGCs2) maxDecimalPlaces: 1; nextPutAll: ' ms'
>      ].
>      str cr.
>      str    nextPutAll: '    tenures        ';
>          nextPutAll: tenureCount2 asStringWithCommas.
>      tenureCount2 = 0 ifFalse:
>          [str nextPutAll: ' (avg '; print: incrGCs2 // tenureCount2; nextPutAll: ' GCs/tenure)'].
>      str    cr.
>  ].
>      LastStats at: 1 put: upTime.
>      LastStats at: 2 put: fullGCs.
>      LastStats at: 3 put: fullGCTime.
>      LastStats at: 4 put: incrGCs.
>      LastStats at: 5 put: incrGCTime.
>      LastStats at: 6 put: tenureCount.
> 
>      ^ str contents
>  !
> 
> 


More information about the Squeak-dev mailing list