[Glass] UUID new >100x slower than Pharo?
Paul DeBruicker
pdebruic at gmail.com
Tue Sep 17 09:43:46 PDT 2013
Hi-
This is on Glass 1.0.beta9.1 and Gemstone 3.1.0.4 using GemTools
1.0.b71. as the client.
Seems like its spending time looking up random numbers using file
accesses on the client.
[1000 timesRepeat:[UUID new]] timeToRun
On my laptop in pharo this takes 14ms and in gemstone it takes 1920 ms
Is there a way to get it to use the server as I thought that was much
faster?
Or is there a setting I need to fiddle with?
Thanks
Paul
Here is the output from:
ProfMonitor monitorBlock:[1000 timesRepeat:[UUID new]]
'================
STATISTICAL SAMPLING RESULTS
elapsed CPU time: 12308 ms
monitoring interval: 1.0 ms
tally % class and method name
------ ----- --------------------------------------
2298 18.69 GsFile >> userAction:onClient:
1258 10.23 HostRandom >> integer
1111 9.04 SmallInteger >> bitShift:
944 7.68 GsFile >> next
914 7.43 Character >> asciiValue
906 7.37 GsFile >> nextByte
302 2.46 SymbolDictionary >> associationAt:otherwise:
288 2.34 SmallInteger >> >
281 2.29 System class >> __sessionStateAt:
280 2.28 Integer >> *
276 2.24 Semaphore >> _exitCritical
260 2.11 HostRandom >> file
258 2.10 GsFile >> isOpen
218 1.77 SessionTemps class >> current
217 1.77 Semaphore >> critical:
216 1.76 SymbolDictionary >> at:otherwise:
196 1.59 Float >> *
168 1.37 Float >> +
157 1.28 SmallInteger >> <
147 1.20 block in UUIDGenerator >> generateOneOrZero
137 1.11 block in Semaphore >> critical:
129 1.05 UUIDGenerator >> generateOneOrZero
126 1.02 Random >> float
125 1.02 Random >> next
124 1.01 Float >> <
124 1.01 Integer >> asFloat
119 0.97 SmallInteger >> bitOr:
114 0.93 UUIDGenerator >> generateRandomBitsOfLength:
113 0.92 Number >> _retry:coercing:
111 0.90 Semaphore >> wait
111 0.90 Object >> size
110 0.89 Semaphore >> signal
103 0.84 Float >> _coerce:
20 0.16 Object >> at:put:
9 0.07 UUIDGenerator >> placeFields:
3 0.02 SymbolDictionary >> at:ifAbsent:
3 0.02 UUID class >> new
2 0.02 Symbol >> =
2 0.02 MCPlatformSupport class >> transientGlobals
2 0.02 Dictionary >> associationAt:otherwise:
2 0.02 UUID >> initialize
1 0.01 AbstractDictionary >> _at:
1 0.01 String >> hash
1 0.01 Dictionary >> at:ifAbsent:
1 0.01 AbstractDictionary >> hashFunction:
1 0.01 SmallInteger >> \\
1 0.01 block in executed code
1 0.01 UUID >> primMakeUUID
1 0.01 UUIDGenerator >> generateBytes:forVersion:
1 0.01 UUIDGenerator >> generateFieldsVersion4
1 0.01 System class >> _readClock
0 0.00 9 other methods
12294 100.00 Total
================
STATISTICAL STACK SAMPLING RESULTS
elapsed CPU time: 12308 ms
monitoring interval: 1.0 ms
total % class and method name
------ ----- --------------------------------------
12265 99.76 UUIDGenerator >> generateBytes:forVersion:
12220 99.40 UUIDGenerator >> generateFieldsVersion4
12217 99.37 UUIDGenerator >> generateRandomBitsOfLength:
11873 96.58 UUIDGenerator >> generateOneOrZero
11744 95.53 Semaphore >> critical:
11193 91.04 ExecBlock >> ensure:
10682 86.89 block in UUIDGenerator >> generateOneOrZero
10223 83.15 Random >> next
10098 82.14 Random >> float
8831 71.83 HostRandom >> integer
6541 53.20 UUID >> primMakeUUID
4546 36.98 GsFile >> nextByte
2726 22.17 GsFile >> next
2317 18.85 UUID >> initialize
2298 18.69 GsFile >> userAction:onClient:
1383 11.25 UUID class >> new
1270 10.33 HostRandom >> file
1111 9.04 SmallInteger >> bitShift:
973 7.91 Integer >> *
914 7.43 Character >> asciiValue
774 6.30 GsFile >> isOpen
758 6.17 block in executed code
693 5.64 Number >> _retry:coercing:
518 4.21 SymbolDictionary >> at:otherwise:
511 4.16 block in Semaphore >> critical:
499 4.06 SessionTemps class >> current
374 3.04 Semaphore >> signal
334 2.72 Semaphore >> wait
302 2.46 SymbolDictionary >> associationAt:otherwise:
288 2.34 SmallInteger >> >
281 2.29 System class >> __sessionStateAt:
276 2.24 Semaphore >> _exitCritical
227 1.85 Float >> _coerce:
196 1.59 Float >> *
171 1.39 ProfMonitor >> monitorBlock:
168 1.37 Float >> +
157 1.28 SmallInteger >> <
124 1.01 Float >> <
124 1.01 Integer >> asFloat
119 0.97 SmallInteger >> bitOr:
111 0.90 Object >> size
44 0.36 UUIDGenerator >> placeFields:
21 0.17 UUIDGenerator class >> default
21 0.17 MCPlatformSupport class >> transientGlobalForKey:
20 0.16 Object >> at:put:
12 0.10 MCPlatformSupport class >> transientGlobalNamed:
9 0.07 MCPlatformSupport class >> transientGlobals
9 0.07 Dictionary >> at:ifAbsent:
9 0.07 ProfMonitor class >> monitorBlock:
8 0.07 Dictionary >> associationAt:otherwise:
7 0.06 executed code
3 0.02 SymbolDictionary >> at:ifAbsent:
3 0.02 AbstractDictionary >> hashFunction:
2 0.02 Symbol >> =
1 0.01 AbstractDictionary >> _at:
1 0.01 String >> evaluateInContext:symbolList:
1 0.01 String >> hash
1 0.01 SmallInteger >> \\
1 0.01 System class >> _readClock
1 0.01 ProfMonitor >> startMonitoring
12294 100.00 Total
================
STATISTICAL METHOD SENDERS RESULTS
elapsed CPU time: 12308 ms
monitoring interval: 1.0 ms
% % Parent
self total total local Method
Time Time ms % Child
------ ------ ------ ----- -----------
6526.4 53.2 UUID >> primMakeUUID
= 0.0 99.8 12279.0 0.0 UUIDGenerator >> generateBytes:forVersion:
44.1 0.4 UUIDGenerator >> placeFields:
12233.9 99.6 UUIDGenerator >>
generateFieldsVersion4
-----------------------------------------------------
12233.9 100.0 UUIDGenerator >>
generateBytes:forVersion:
= 0.0 99.4 12233.9 0.0 UUIDGenerator >> generateFieldsVersion4
2.0 0.0 SmallInteger >> bitOr:
12230.9 100.0 UUIDGenerator >>
generateRandomBitsOfLength:
-----------------------------------------------------
12230.9 100.0 UUIDGenerator >>
generateFieldsVersion4
= 0.9 99.4 12230.9 0.9 UUIDGenerator >>
generateRandomBitsOfLength:
117.1 1.0 SmallInteger >> bitOr:
113.1 0.9 SmallInteger >> bitShift:
11886.5 97.2 UUIDGenerator >> generateOneOrZero
-----------------------------------------------------
11886.5 100.0 UUIDGenerator >>
generateRandomBitsOfLength:
= 1.0 96.6 11886.5 1.1 UUIDGenerator >> generateOneOrZero
11757.4 98.9 Semaphore >> critical:
-----------------------------------------------------
11757.4 100.0 UUIDGenerator >> generateOneOrZero
= 1.8 95.5 11757.4 1.8 Semaphore >> critical:
334.4 2.8 Semaphore >> wait
11205.7 95.3 ExecBlock >> ensure:
-----------------------------------------------------
11205.7 100.0 Semaphore >> critical:
= 0.0 91.0 11205.7 0.0 ExecBlock >> ensure:
511.6 4.6 block in Semaphore >> critical:
10694.2 95.4 block in UUIDGenerator >>
generateOneOrZero
-----------------------------------------------------
10694.2 100.0 ExecBlock >> ensure:
= 1.2 86.9 10694.2 1.4 block in UUIDGenerator >> generateOneOrZero
124.1 1.2 Float >> <
188.2 1.8 SmallInteger >> >
10234.6 95.7 Random >> next
-----------------------------------------------------
10234.6 100.0 block in UUIDGenerator >>
generateOneOrZero
= 1.0 83.2 10234.6 1.2 Random >> next
10109.5 98.8 Random >> float
-----------------------------------------------------
10109.5 100.0 Random >> next
= 1.0 82.1 10109.5 1.2 Random >> float
974.1 9.6 Integer >> *
168.2 1.7 Float >> +
8841.1 87.5 HostRandom >> integer
-----------------------------------------------------
8841.1 100.0 Random >> float
= 10.2 71.8 8841.1 14.2 HostRandom >> integer
774.9 8.8 GsFile >> isOpen
984.1 11.1 SmallInteger >> bitShift:
4551.2 51.5 GsFile >> nextByte
1271.4 14.4 HostRandom >> file
-----------------------------------------------------
2317.6 35.4 UUID >> initialize
= 0.0 53.2 6548.4 0.0 UUID >> primMakeUUID
21.0 0.3 UUIDGenerator class >> default
6526.4 99.7 UUIDGenerator >>
generateBytes:forVersion:
-----------------------------------------------------
4551.2 100.0 HostRandom >> integer
= 7.4 37.0 4551.2 19.9 GsFile >> nextByte
915.0 20.1 Character >> asciiValue
2729.1 60.0 GsFile >> next
-----------------------------------------------------
2729.1 100.0 GsFile >> nextByte
= 7.7 22.2 2729.1 34.6 GsFile >> next
1784.0 65.4 GsFile >> userAction:onClient:
-----------------------------------------------------
1381.6 59.6 UUID class >> new
= 0.0 18.8 2319.6 0.1 UUID >> initialize
2317.6 99.9 UUID >> primMakeUUID
-----------------------------------------------------
1784.0 77.5 GsFile >> next
516.6 22.5 GsFile >> isOpen
= 18.7 18.7 2300.6 100.0 GsFile >> userAction:onClient:
-----------------------------------------------------
757.9 54.7 block in executed code
= 0.0 11.2 1384.6 0.2 UUID class >> new
1381.6 99.8 UUID >> initialize
-----------------------------------------------------
1271.4 100.0 HostRandom >> integer
= 2.1 10.3 1271.4 20.5 HostRandom >> file
492.6 38.7 SessionTemps class >> current
518.6 40.8 SymbolDictionary >> at:otherwise:
-----------------------------------------------------
15.0 1.4 UUIDGenerator >> placeFields:
113.1 10.2 UUIDGenerator >>
generateRandomBitsOfLength:
984.1 88.5 HostRandom >> integer
= 9.0 9.0 1112.3 100.0 SmallInteger >> bitShift:
-----------------------------------------------------
974.1 100.0 Random >> float
= 2.3 7.9 974.1 28.8 Integer >> *
693.8 71.2 Number >> _retry:coercing:
-----------------------------------------------------
915.0 100.0 GsFile >> nextByte
= 7.4 7.4 915.0 100.0 Character >> asciiValue
-----------------------------------------------------
774.9 100.0 HostRandom >> integer
= 2.1 6.3 774.9 33.3 GsFile >> isOpen
516.6 66.7 GsFile >> userAction:onClient:
-----------------------------------------------------
170.2 22.4 ProfMonitor >> monitorBlock:
= 0.0 6.2 758.9 0.1 block in executed code
757.9 99.9 UUID class >> new
-----------------------------------------------------
693.8 100.0 Integer >> *
= 0.9 5.6 693.8 16.3 Number >> _retry:coercing:
196.2 28.3 Float >> *
227.3 32.8 Float >> _coerce:
157.2 22.7 SmallInteger >> <
-----------------------------------------------------
518.6 100.0 HostRandom >> file
= 1.8 4.2 518.6 41.7 SymbolDictionary >> at:otherwise:
302.3 58.3 SymbolDictionary >>
associationAt:otherwise:
-----------------------------------------------------
511.6 100.0 ExecBlock >> ensure:
= 1.1 4.2 511.6 26.8 block in Semaphore >> critical:
374.4 73.2 Semaphore >> signal
-----------------------------------------------------
492.6 98.6 HostRandom >> file
7.0 1.4 MCPlatformSupport class >>
transientGlobals
= 1.8 4.1 499.6 43.7 SessionTemps class >> current
281.3 56.3 System class >> __sessionStateAt:
-----------------------------------------------------
374.4 100.0 block in Semaphore >> critical:
= 0.9 3.0 374.4 29.4 Semaphore >> signal
153.2 40.9 Semaphore >> _exitCritical
111.1 29.7 Object >> size
-----------------------------------------------------
334.4 100.0 Semaphore >> critical:
= 0.9 2.7 334.4 33.2 Semaphore >> wait
100.1 29.9 SmallInteger >> >
123.1 36.8 Semaphore >> _exitCritical
-----------------------------------------------------
302.3 100.0 SymbolDictionary >> at:otherwise:
= 2.5 2.5 302.3 100.0 SymbolDictionary >> associationAt:otherwise:
-----------------------------------------------------
100.1 34.7 Semaphore >> wait
188.2 65.3 block in UUIDGenerator >>
generateOneOrZero
= 2.3 2.3 288.3 100.0 SmallInteger >> >
-----------------------------------------------------
281.3 100.0 SessionTemps class >> current
= 2.3 2.3 281.3 100.0 System class >> __sessionStateAt:
-----------------------------------------------------
123.1 44.6 Semaphore >> wait
153.2 55.4 Semaphore >> signal
= 2.2 2.2 276.3 100.0 Semaphore >> _exitCritical
-----------------------------------------------------
227.3 100.0 Number >> _retry:coercing:
= 0.8 1.8 227.3 45.4 Float >> _coerce:
124.1 54.6 Integer >> asFloat
-----------------------------------------------------
196.2 100.0 Number >> _retry:coercing:
= 1.6 1.6 196.2 100.0 Float >> *
-----------------------------------------------------
9.0 5.3 ProfMonitor class >> monitorBlock:
= 0.0 1.4 171.2 0.0 ProfMonitor >> monitorBlock:
170.2 99.4 block in executed code
1.0 0.6 ProfMonitor >> startMonitoring
-----------------------------------------------------
168.2 100.0 Random >> float
= 1.4 1.4 168.2 100.0 Float >> +
-----------------------------------------------------
157.2 100.0 Number >> _retry:coercing:
= 1.3 1.3 157.2 100.0 SmallInteger >> <
-----------------------------------------------------
124.1 100.0 block in UUIDGenerator >>
generateOneOrZero
= 1.0 1.0 124.1 100.0 Float >> <
-----------------------------------------------------
124.1 100.0 Float >> _coerce:
= 1.0 1.0 124.1 100.0 Integer >> asFloat
-----------------------------------------------------
2.0 1.7 UUIDGenerator >> generateFieldsVersion4
117.1 98.3 UUIDGenerator >>
generateRandomBitsOfLength:
= 1.0 1.0 119.1 100.0 SmallInteger >> bitOr:
-----------------------------------------------------
111.1 100.0 Semaphore >> signal
= 0.9 0.9 111.1 100.0 Object >> size
-----------------------------------------------------
44.1 100.0 UUIDGenerator >>
generateBytes:forVersion:
= 0.1 0.4 44.1 20.5 UUIDGenerator >> placeFields:
20.0 45.5 Object >> at:put:
15.0 34.1 SmallInteger >> bitShift:
-----------------------------------------------------
21.0 100.0 UUID >> primMakeUUID
= 0.0 0.2 21.0 0.0 UUIDGenerator class >> default
21.0 100.0 MCPlatformSupport class >>
transientGlobalForKey:
-----------------------------------------------------
21.0 100.0 UUIDGenerator class >> default
= 0.0 0.2 21.0 0.0 MCPlatformSupport class >>
transientGlobalForKey:
12.0 57.1 MCPlatformSupport class >>
transientGlobalNamed:
9.0 42.9 Dictionary >> at:ifAbsent:
-----------------------------------------------------
20.0 100.0 UUIDGenerator >> placeFields:
= 0.2 0.2 20.0 100.0 Object >> at:put:
-----------------------------------------------------
12.0 100.0 MCPlatformSupport class >>
transientGlobalForKey:
= 0.0 0.1 12.0 0.0 MCPlatformSupport class >>
transientGlobalNamed:
3.0 25.0 SymbolDictionary >> at:ifAbsent:
9.0 75.0 MCPlatformSupport class >>
transientGlobals
-----------------------------------------------------
9.0 100.0 MCPlatformSupport class >>
transientGlobalNamed:
= 0.0 0.1 9.0 22.2 MCPlatformSupport class >> transientGlobals
7.0 77.8 SessionTemps class >> current
-----------------------------------------------------
9.0 100.0 MCPlatformSupport class >>
transientGlobalForKey:
= 0.0 0.1 9.0 11.1 Dictionary >> at:ifAbsent:
8.0 88.9 Dictionary >>
associationAt:otherwise:
-----------------------------------------------------
7.0 77.8 executed code
= 0.0 0.1 9.0 0.0 ProfMonitor class >> monitorBlock:
9.0 100.0 ProfMonitor >> monitorBlock:
-----------------------------------------------------
8.0 100.0 Dictionary >> at:ifAbsent:
= 0.0 0.1 8.0 25.0 Dictionary >> associationAt:otherwise:
1.0 12.5 AbstractDictionary >> _at:
2.0 25.0 Symbol >> =
3.0 37.5 AbstractDictionary >> hashFunction:
-----------------------------------------------------
1.0 14.3 String >>
evaluateInContext:symbolList:
= 0.0 0.1 7.0 0.0 executed code
7.0 100.0 ProfMonitor class >> monitorBlock:
-----------------------------------------------------
3.0 100.0 MCPlatformSupport class >>
transientGlobalNamed:
= 0.0 0.0 3.0 100.0 SymbolDictionary >> at:ifAbsent:
-----------------------------------------------------
3.0 100.0 Dictionary >>
associationAt:otherwise:
= 0.0 0.0 3.0 33.3 AbstractDictionary >> hashFunction:
1.0 33.3 String >> hash
1.0 33.3 SmallInteger >> \\
-----------------------------------------------------
2.0 100.0 Dictionary >>
associationAt:otherwise:
= 0.0 0.0 2.0 100.0 Symbol >> =
-----------------------------------------------------
1.0 100.0 Dictionary >>
associationAt:otherwise:
= 0.0 0.0 1.0 100.0 AbstractDictionary >> _at:
-----------------------------------------------------
= 0.0 0.0 1.0 0.0 String >>
evaluateInContext:symbolList:
1.0 100.0 executed code
-----------------------------------------------------
1.0 100.0 AbstractDictionary >> hashFunction:
= 0.0 0.0 1.0 100.0 String >> hash
-----------------------------------------------------
1.0 100.0 AbstractDictionary >> hashFunction:
= 0.0 0.0 1.0 100.0 SmallInteger >> \\
-----------------------------------------------------
1.0 100.0 ProfMonitor >> startMonitoring
= 0.0 0.0 1.0 100.0 System class >> _readClock
-----------------------------------------------------
1.0 100.0 ProfMonitor >> monitorBlock:
= 0.0 0.0 1.0 0.0 ProfMonitor >> startMonitoring
1.0 100.0 System class >> _readClock
-----------------------------------------------------
'
More information about the Glass
mailing list