[Glass] UUID new >100x slower than Pharo?

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
6 messages Options
Reply | Threaded
Open this post in threaded view
|

[Glass] UUID new >100x slower than Pharo?

Paul DeBruicker
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
-----------------------------------------------------


'

_______________________________________________
Glass mailing list
[hidden email]
http://lists.gemtalksystems.com/mailman/listinfo/glass
Reply | Threaded
Open this post in threaded view
|

Re: [Glass] UUID new >100x slower than Pharo?

Dale Henrichs-3
Paul,

First the call to userAction:onClient: does not imply that the operation is being done on the client. HostRandom operates against /dev/urandom on the server side so the cost you are seeing is likely just the overhead of accessing the file.

On my laptop the expression

  [1000 timesRepeat:[UUID new]] timeToRun

takes 800ms using HostRandom and 400ms using Lag25000CmwcRandom (not file-based although HostRandom is used to define initial seed) ...

Still, there is a fair amount of Smalltalk code being executed here so a primitive call (which is what pharo does) would be the way to speed this up ...

I'll look into this for 3.2...(or at least making random number generation a lot faster)...


Dale


| From: "Paul DeBruicker" <[hidden email]>
| To: [hidden email]
| Sent: Tuesday, September 17, 2013 6:43:46 PM
| Subject: [Glass] UUID new >100x slower than Pharo?
|
| 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
| -----------------------------------------------------
|
|
| '
|
| _______________________________________________
| Glass mailing list
| [hidden email]
| http://lists.gemtalksystems.com/mailman/listinfo/glass
|
_______________________________________________
Glass mailing list
[hidden email]
http://lists.gemtalksystems.com/mailman/listinfo/glass
Reply | Threaded
Open this post in threaded view
|

Re: [Glass] UUID new >100x slower than Pharo?

Paul DeBruicker
Thanks Dale,

Tobias Pape replied off list that I should just use the FFI library as
Pharo is calling the libuuid on the platform anyway.  So I'll work on
that.

Paul





On 09/17/2013 10:44 AM, Dale K. Henrichs wrote:

> Paul,
>
> First the call to userAction:onClient: does not imply that the operation is being done on the client. HostRandom operates against /dev/urandom on the server side so the cost you are seeing is likely just the overhead of accessing the file.
>
> On my laptop the expression
>
>   [1000 timesRepeat:[UUID new]] timeToRun
>
> takes 800ms using HostRandom and 400ms using Lag25000CmwcRandom (not file-based although HostRandom is used to define initial seed) ...
>
> Still, there is a fair amount of Smalltalk code being executed here so a primitive call (which is what pharo does) would be the way to speed this up ...
>
> I'll look into this for 3.2...(or at least making random number generation a lot faster)...
>
>
> Dale
>
>
> | From: "Paul DeBruicker" <[hidden email]>
> | To: [hidden email]
> | Sent: Tuesday, September 17, 2013 6:43:46 PM
> | Subject: [Glass] UUID new >100x slower than Pharo?
> |
> | 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        
_______________________________________________
Glass mailing list
[hidden email]
http://lists.gemtalksystems.com/mailman/listinfo/glass
Reply | Threaded
Open this post in threaded view
|

Re: [Glass] UUID new >100x slower than Pharo?

Tobias Pape
Am 17.09.2013 um 20:27 schrieb Paul DeBruicker <[hidden email]>:

> Thanks Dale,
>
> Tobias Pape replied off list that I should just use the FFI library as
> Pharo is calling the libuuid on the platform anyway.  So I'll work on
> that.
>

oh I didn't notice it was off-list. sorry.
Anyway, on OSX and I think Linux, Squeak/Pharo is using uuid_generate(3)/libuuid
or uuidgen on systems like Free/NetBSD

Note that the Squeak folk detected problems especially on Ubuntu
---causing segfaults when trying uuid stuff (which happens all the time with
monticello)---
that date back to 2010. I remember folks at ESUG being bitten by that
problem.
See discussion here:
http://forum.world.st/Fix-for-UUID-library-crashes-td3308033.html
http://bugs.squeak.org/view.php?id=7358

The tricky solution there was to catch a possible segfault
and continue with image-side in this case:
(diff) http://squeakvm.org/cgi-bin/viewvc.cgi/squeak/trunk/platforms/unix/plugins/UUIDPlugin/sqUnixUUID.c?r1=2356&r2=2362
(code) http://squeakvm.org/cgi-bin/viewvc.cgi/squeak/trunk/platforms/unix/plugins/UUIDPlugin/sqUnixUUID.c?revision=2602&view=markup

Best
        -Tobias


_______________________________________________
Glass mailing list
[hidden email]
http://lists.gemtalksystems.com/mailman/listinfo/glass

signature.asc (210 bytes) Download Attachment
Reply | Threaded
Open this post in threaded view
|

[Glass] UUIDFFI library was: Re: UUID new >100x slower than Pharo?

Paul DeBruicker
With the library here:

MCHttpRepository
        location: 'http://smalltalkhub.com/mc/pdebruic/UUIDFFI/main'
        user: ''
        password: ''


The time on my machine to make 1000 UUIDs goes from 2000ms to 20ms.


Thats on 64bit linux, with the libuuid Tobias mentioned.





On 09/17/2013 11:46 AM, Tobias Pape wrote:

> Am 17.09.2013 um 20:27 schrieb Paul DeBruicker <[hidden email]>:
>
>> Thanks Dale,
>>
>> Tobias Pape replied off list that I should just use the FFI library as
>> Pharo is calling the libuuid on the platform anyway.  So I'll work on
>> that.
>>
>
> oh I didn't notice it was off-list. sorry.
> Anyway, on OSX and I think Linux, Squeak/Pharo is using uuid_generate(3)/libuuid
> or uuidgen on systems like Free/NetBSD
>
> Note that the Squeak folk detected problems especially on Ubuntu
> ---causing segfaults when trying uuid stuff (which happens all the time with
> monticello)---
> that date back to 2010. I remember folks at ESUG being bitten by that
> problem.
> See discussion here:
> http://forum.world.st/Fix-for-UUID-library-crashes-td3308033.html
> http://bugs.squeak.org/view.php?id=7358
>
> The tricky solution there was to catch a possible segfault
> and continue with image-side in this case:
> (diff) http://squeakvm.org/cgi-bin/viewvc.cgi/squeak/trunk/platforms/unix/plugins/UUIDPlugin/sqUnixUUID.c?r1=2356&r2=2362
> (code) http://squeakvm.org/cgi-bin/viewvc.cgi/squeak/trunk/platforms/unix/plugins/UUIDPlugin/sqUnixUUID.c?revision=2602&view=markup
>
> Best
> -Tobias
>
>
>
> _______________________________________________
> Glass mailing list
> [hidden email]
> http://lists.gemtalksystems.com/mailman/listinfo/glass
>

_______________________________________________
Glass mailing list
[hidden email]
http://lists.gemtalksystems.com/mailman/listinfo/glass
Reply | Threaded
Open this post in threaded view
|

Re: [Glass] UUIDFFI library was: Re: UUID new >100x slower than Pharo?

Tobias Pape
Am 17.09.2013 um 21:07 schrieb Paul DeBruicker <[hidden email]>:

> With the library here:
>
> MCHttpRepository
> location: 'http://smalltalkhub.com/mc/pdebruic/UUIDFFI/main'
> user: ''
> password: ''
>
>
> The time on my machine to make 1000 UUIDs goes from 2000ms to 20ms.
>
Nice!

Best
        -Tobias


_______________________________________________
Glass mailing list
[hidden email]
http://lists.gemtalksystems.com/mailman/listinfo/glass

signature.asc (210 bytes) Download Attachment