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@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
!
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@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
!
_,,,^..^,,,_ (phone)
On Jan 29, 2016, at 10:52 AM, David T. Lewis lewis@mail.msen.com wrote:
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 :-)
Ok, for the moment :-)
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@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
!
On Jan 29, 2016, at 10:52 AM, David T. Lewis lewis@mail.msen.com wrote:
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 :-)
Ok, for the moment :-)
Thanks :-)
Dave
PS it strikes me that using number of available stack pages is the right discriminator between Interpreter and all the cog VMs. If we did get interpreter working with spur I'm sure we'd still have the full set of VM parameters, but more of them would be nil.
_,,,^..^,,,_ (phone)
On Jan 29, 2016, at 10:52 AM, David T. Lewis lewis@mail.msen.com wrote:
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@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
!
squeak-dev@lists.squeakfoundation.org