Subject Re: [firebird-support] Firebird is slower on multicpu Window box then single cpu
Author Helen Borrie
At 10:03 PM 1/04/2005 +0000, tsttang wrote:

>I have installed firebird database on a multicpu machine
>with win2k server or window 2003 server. In either
>case, the performance is much slower than the firebird
>database I installed on a single cpu box with window
>2000 server or window 2000 professional.

That would be expected, unless CPU affinity were pinned to one
cpu. (Superserver must be pinned to one cpu).

>The
>multicpu box has 2 GB memory, two 2.2 Ghz pentium 4
>cpu. The harddisk performance is faster than the single
>cpu box. The single cpu box has one single cpu, 2.2
>Ghz pentium 4 and 2 GB memory. I have tried firebird
>1.03 and 1.5.1 in super server configuration. I have
>also tried 1.5.1 in classic server configuration in the
>dual cpu box but the result is the same. In all cases,
>the performance of the database is about three to four
>times slower than on a single cpu box. The test is to
>load 20000 records into the database using a java
>program with jaybird as its jdbc driver. From task
>manager, I can see the refresh rate of the I/O and I can
>see that on the dual cpu box, the I/O rate for firebird is
>3 times slower than that of the single cpu box. We
>have used a disk benchmark program to measure the
>disk speed on the dual cpu box and there is no
>significant difference between the dual cpu box and the
>single cpu box.
>The same set of test is performed against firebird
>v.1.01 in superserver configuration installed on multicpu
>linux box with the same configuration as the dual cpu
>box but no slow down in performance can be observed.
>
>Anyone has similar experience or an explanation to this?

So far, there is insufficient information and no indication of the
conditions you are actually testing. For a reasonable comparison, and for
some direction, I would expect a matrix showing the performance results for
each single CPU affinity setting. The algorithm for determining the
affinity can be found in firebird.conf, under the CpuAffinity
parameter. You can apply the same formula when setting cpu_affinity in
ibconfig for Fb 1.0.x.

Performance results for Superserver when the affinity is set to more than
one CPU are of academic interest only. Firebird and Windows don't play
nice together with multiple CPUs, so running with SMP is not an
option. Comparisons become interesting when setting affinity to a
different single CPU demonstrates differences in performance.

When multiple CPUs cause degraded performance for Classic, either you have
something to worry about on your multi-CPU box, or your data-loading
strategy is I/O intensive by nature. You wrote:

"The test is to load 20000 records into the database using a java
program with jaybird as its jdbc driver."

There is no indication here of whether these 20000 inserts are all
happening in one transaction or even in one connection. There are obvious
scenarios here where unrealistic I/O would be the outcome of the database
access strategy, regardless of the CPU affinity settings.

btw, don't forget that changing firebird.conf or ibconfig settings for SS
does not take effect until you shut down and restart the server. For
Classic on Linux, the next connection should see the changes. However, for
Classic on Windows, I suspect that you should shut down the fb_inet_server
service between changes.

A test along these lines, designed and executed according to
well-understood, distinct variations in the conditions, could be quite
useful, I think. It could be worth your while posting to the firebird-java
list, since I seem to recall that Roman has run some similar test scenarios
in the past with SMP machines...

./hb