[Pharo-project] IPAddressCountry & Iso3166CountryLongitudeLatitude

Sven Van Caekenberghe sven at beta9.be
Mon Apr 4 23:29:53 CEST 2011

On 04 Apr 2011, at 15:45, Henrik Johansen wrote:

> PS. I take it you'd be interested in updating SmallInteger digitAt: / digitLength to work in 64bit images if they become available? ;)

I am not quite sure what you mean.

The particular server this application is running on is a quite plain vanilla Dual Core Xeon (4 virtual CPU's @ 3Ghz, 4 GB RAM) running Ubuntu 8.04.4 LTS 64-bit Server edition, shared with some other applications, one taking 2Gb. The server has a high quality internet feed.

The Cog VM's can only use 1 core and are 32-bit as far as I know. Running 4 of them better utilizes the machine. Monit, automatic process management, keeps the instances alive. The load balancer + the process management should improve reliability and scalebility under load.

Each instance uses less than 100 Mb for its heap, so there is plenty of room left. In terms of addressing space, I don't need more.

Granted, representing IPv4 addresses as Integers requires 32 bits, and results in LargePositiveInteger usage. So a 64-bit VM could be better. But honestly, searching through 140.000 entries using binary search is currently very fast already.

To give you an idea, for the full stack over the internet (and thus depending on the network, YMMV) :

$ ab -k -n 1024 -c 32 http://easy.t3-platform.net/rest/geo-ip?address=

This is ApacheBench, Version 2.3 <$Revision: 655654 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking easy.t3-platform.net (be patient)
Completed 102 requests
Completed 204 requests
Completed 306 requests
Completed 408 requests
Completed 510 requests
Completed 612 requests
Completed 714 requests
Completed 816 requests
Completed 918 requests
Completed 1020 requests
Finished 1024 requests

Server Software:        Zinc
Server Hostname:        easy.t3-platform.net
Server Port:            80

Document Path:          /rest/geo-ip?address=
Document Length:        76 bytes

Concurrency Level:      32
Time taken for tests:   1.118 seconds
Complete requests:      1024
Failed requests:        0
Write errors:           0
Keep-Alive requests:    1024
Total transferred:      312657 bytes
HTML transferred:       77900 bytes
Requests per second:    915.75 [#/sec] (mean)
Time per request:       34.944 [ms] (mean)
Time per request:       1.092 [ms] (mean, across all concurrent requests)
Transfer rate:          273.05 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    1   4.8      0      32
Processing:    21   34   7.9     32      76
Waiting:       21   34   7.9     32      76
Total:         21   34   9.6     32     109

Percentage of the requests served within a certain time (ms)
  50%     32
  66%     36
  75%     38
  80%     40
  90%     45
  95%     54
  98%     64
  99%     70
 100%    109 (longest request)

This means that for 32 concurrent requests, speed is close to 1000 request per second, or 1 ms per request. (Granted the payload is small and keepalive is involved). 

For me, this means that one can do almost anything with a Smalltalk server. And that is the main point I want to make and share.



More information about the Pharo-project mailing list