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=81.83.7.35 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=81.83.7.35 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. Regards, Sven