Subject Re: [ib-support] CPU afinity with classic version
Author Paul Reeves
On Sat, 11 May 2002 22:37:56 +0200, Salim Naufal wrote:
>On a Redhat 7.2 Linux system, Dual CPU machine, we have installed
>Firebird 1.0 Classic architecture. When performing a long query or a
>restore, I have noticed that the process is being switched from one
>CPU to the other indefinitely, therefore reducing the overall
>performance. I recall that this was a problem with the superserver
>architecture and that it was fixed by integrating the CPU affinity
>Does anyone have some experience with such a hardware/software
>configuration? I though that the classic version of IB would be
>ideal for such a scenario (about 15 concurrent users). Will the
>superserver version of Firebird yield better results than the
>classic one?

I haven't looked into this in detail but it does seem that one of the features of Linux, at least with the 2.4 kernel, is to switch CPU's when the load hits 100%. Loose affinity, I think it is called.

Under SuperServer this means that all the threads stay on CPU0 until the load is too high, when all the threads are switched to CPU1. This is likely to give poorer performance than under Classic, assuming, that is, that classic distributes processes evenly between processors. I haven't checked recently but that should be the case.

I would say that as long as only the heavily loaded process is being switched that you are going to be better off using classic on a Dual CPU box. However, that opinion is just based on empiricism, not hard data.

BTW, if anyone else has been wondering, to find out which processes are running on which CPU under Linux can be done by running top. If you press 'f' it allows you toggle which columns are displayed. One of the columns shows the last CPU used. This is toggled off by default. Don't forget to save the settings afterwards. I've failed to find any other simple means of displaying this info, but I'm sure they exist.

Paul Reeves
Supporting users of Firebird and InterBase