[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