Matthew, would you mind sticking the script you used to test this up on dpaste?
Alex On Nov 17, 3:01 pm, "Matthew D. Hancher" <[EMAIL PROTECTED]> wrote: > On Nov 16, 11:03 pm, "Russell Keith-Magee" <[EMAIL PROTECTED]> > wrote: > > > I know this is a horribly nebulous question (like all benchmarking), > > and it's completely dependent on the speed of your machine and a > > million other factors. However, if we are going to start adding > > signals to very common operations (like m2m and opening connections), > > we need to know what sort of overhead we are adding in absolute terms. > > Okay, I decided to do a bit of profiling to keep the conversation > moving. None of this is particularly rigorous stuff, but I figure > it's a start. > > (The uncertainties shown below are the standard deviations across > repeated runs divided by the square root of the number of runs, with > ten-percentile thresholds for outlier rejection, all of which makes > for a rough but useful measure. This was all on my development > machine, not a pristine test environment (which I don't have), so lord > knows what external factors may have been involved.) > > I began by examining the impact of adding the connection_created > signal in a toy end-to-end test, with a local client requesting a > reasonably normal page from a simple blog app, using sqlite3 and the > development server. The signal listeners here were pretty simple, > just incrementing a connection counter. Here is what I saw. > > Page request performance, in seconds per 100 queries: > trunk (no listeners): 2.624 +/- 0.009 > 6064 (no listeners): 2.624 +/- 0.005 > 6064 (1 listener): 2.624 +/- 0.006 > 6064 (100 listeners): 2.680 +/- 0.005 > > The differences (or lack thereof) between the first three timings here > are not statistically significant, but it is clear that by the time I > get to 100 listeners I'm seeing a real performance hit. In order to > better measure the impact of adding the signal even when no listeners > are present, I zoomed in on the database connection/disconnection > cycle itself (again using sqlite3 with a database on disk). > > Database connect/close performance, in seconds per 10000 cycles: > trunk (no listeners): 1.5664 +/- 0.0010 > 6064 (no listeners): 1.5895 +/- 0.0011 > 6064 (1 listener): 1.7115 +/- 0.0015 > 6064 (100 listeners): 4.5087 +/- 0.0036 > > So, adding the connection_created signal had a roughly 1% impact on > the speed of the connection/disconnection cycle, and adding a fairly > simple listener to that signal resulted in a total of a 9% impact. > > Now we can put the pieces together to get a little bit of > perspective. Evidently the database connection/disconnection cycle > accounts for roughly 0.6% of the processing time for the query in > question (on this computer, with this configuration). We can use this > to estimate the impact on the page request performance. > > Estimated impact of 6064 on page request performance: > 6064 (no listeners): 0.009% > 6064 (1 listener): 0.055% > 6064 (100 listeners): 1.12% (measured 2.13% +/- 0.54%) > > There's a fair amount of hand-waving involved in those estimates, but > by looking at the 100-listener case (where the impact on page requests > was measurable) we can see that the estimate lands us within a factor > of two of the measured value. The difference could be explained in > any number of ways, but the upshot is that a true impact of 0.02% or > more on page requests for the no-listener case would be very plausible. > > Matt > > Matt Hancher > Intelligent Systems Division > NASA Ames Research Center > [EMAIL PROTECTED] --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Django developers" group. To post to this group, send email to django-developers@googlegroups.com To unsubscribe from this group, send email to [EMAIL PROTECTED] For more options, visit this group at http://groups.google.com/group/django-developers?hl=en -~----------~----~----~----~------~----~------~--~---