Re: [crossfire] Proposal: retire MAX_OBJECTS and object allocator

2020-03-11 Thread Mark Wedel

On 3/11/20 11:08 AM, Kevin Zheng wrote:

On 3/10/20 9:56 PM, Mark Wedel wrote:

  Not sure if still the case, but at one time, performance of allocating
thousands of new objects individually increased lag (when loading new
maps).  So doing it in blocks of 500 or whatever was faster.  At one
point I had put in option to do individually allocation, simply for the
reason above - if using a memory debugger, that block of objects failed
to work.


Allocating one object at a time does make mapfile_load() slower (all
numbers in us):

x CF Object Allocator
+ 1 object per calloc()
+--+
|  x+  |
|x xx  x  x*x  x+   +  + + + +   ++|
|  |_A_M__|   |___A_M_||
+--+
 N   Min   MaxMedian   AvgStddev
x  10 16154 17814   17309.5   17148.7 579.95633
+  10 17560 20576 19169   19021.9 1033.7963
Difference at 95.0% confidence
 1873.2 +/- 787.548
 10.9233% +/- 4.71741%
 (Student's t, pooled s = 838.178)

This measurement was made with n=10 loading /world/world_105_115 with a
warm disk cache, with a newly started server each time so that memory
fragmentation hasn't occurred. Time elapsed was measured with a
monotonic clock.

It looks like 1-object-per-alloc increases the median by 2 ms. For tiled
world maps, at worse case 5 maps are loaded at a time, for a total
additional latency of 10 ms, or about a 11% increase.


 I thought it was be slower, but for modern hardware, that is not very much 
(going back to the system that had 16 megs of memory, its CPU also run at 25 
mhz I think, so ignoring architectural differences, still clearly a lot 
faster).  Given those old system were maybe 100 times slower, that mean loading 
the map would take 200 ms, and given tick time hasn't really changed, that 
means lag.

 However, even in current architecture, this really isn't a problem - since 
objects are never freed, eventually the game gets to a point where it should 
enough have objects on the free list that it doesn't need to allocate objects 
very often.  So after the server first starts up, things may be sort of slow 
until it sort of reaches that point.

___
crossfire mailing list
crossfire@metalforge.org
http://mailman.metalforge.org/mailman/listinfo/crossfire


Re: [crossfire] Proposal: retire MAX_OBJECTS and object allocator

2020-03-11 Thread Kevin Zheng
On 3/10/20 9:56 PM, Mark Wedel wrote:
>  Not sure if still the case, but at one time, performance of allocating
> thousands of new objects individually increased lag (when loading new
> maps).  So doing it in blocks of 500 or whatever was faster.  At one
> point I had put in option to do individually allocation, simply for the
> reason above - if using a memory debugger, that block of objects failed
> to work.

Allocating one object at a time does make mapfile_load() slower (all
numbers in us):

x CF Object Allocator
+ 1 object per calloc()
+--+
|  x+  |
|x xx  x  x*x  x+   +  + + + +   ++|
|  |_A_M__|   |___A_M_||
+--+
N   Min   MaxMedian   AvgStddev
x  10 16154 17814   17309.5   17148.7 579.95633
+  10 17560 20576 19169   19021.9 1033.7963
Difference at 95.0% confidence
1873.2 +/- 787.548
10.9233% +/- 4.71741%
(Student's t, pooled s = 838.178)

This measurement was made with n=10 loading /world/world_105_115 with a
warm disk cache, with a newly started server each time so that memory
fragmentation hasn't occurred. Time elapsed was measured with a
monotonic clock.

It looks like 1-object-per-alloc increases the median by 2 ms. For tiled
world maps, at worse case 5 maps are loaded at a time, for a total
additional latency of 10 ms, or about a 11% increase.

-- 
Kevin Zheng
kevinz5...@gmail.com | kev...@berkeley.edu
XMPP: kev...@eecs.berkeley.edu
___
crossfire mailing list
crossfire@metalforge.org
http://mailman.metalforge.org/mailman/listinfo/crossfire