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

David T. Lewis lewis at mail.msen.com
Fri Jan 29 18:52:40 UTC 2016


Hi Eliot,

I ran into in testing the V3 update stream I have been maintaining on
http://www.squeaksource.com/TrunkUpdateStreamV3. I think it's an
interesting experiment for a number or reasons, although I have not been
discussing it on the list because I don't want to invite confusion or
distract attention from our main Spur/trunk work. But please indulge me in
my occasional private experiments :-)

Dave

> 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