Re: Process balancing on smp db server/apache web serve
What OS are you using that "assigns" a cpu to a process at start up? I
believe that all of our multiprocessor machines (Linux, Sun, HP, AIX, IRIX,
Dec^Wcompaq^WHP) will run a ready process on whatever cpu is available.
-ron
Show quoted text
-----Original Message-----
From: Peter Darley [mailto:pdarley@kinesis-cem.com]
Sent: Thursday, May 23, 2002 6:56 AM
To: Pgsql-General
Subject: [GENERAL] Process balancing on smp db server/apache
web serverFriends,
I have been thinking about my smp db server and how it
interacts with my
web server. I'm using mod_perl on Apache, which uses
Apache::DBI to connect
to the db server via a private network segment. It occurs to
me that since
the web server is connecting early (on startup), when there
is probably no
load on the db server, the cpu that each backend is assigned
to will be
largely random, or, if there is a large syslogd operation or
something right
at that time, it might even put the majority of backends on the same
processor.
When someone hits the web site it seems to me that
there would be a greater
than 50% chance that any two large queries from the web
server would end up
being run on the same processor. Similarly, if I start a
large processing
script that uses the db, since the web associated backends are already
assigned to a processor, there's a good (~50%?) chance that
any big queries
that come in through the web will be on the loaded cpu.
Does this make sense to anyone? If this is true, are
there any suggestions
about how I can keep my persistent connections from Apache,
while getting
the db server to balance the load more efficiently?
Thanks,
Peter Darley---------------------------(end of
broadcast)---------------------------
TIP 3: if posting/reading through Usenet, please send an appropriate
subscribe-nomail command to majordomo@postgresql.org so that your
message can get through to the mailing list cleanly
Ron,
I thought I was talking about Linux, but may I'm mistaken on how smp works.
I was told that a process is run on one and only one CPU, and that there was
no mechanism to move the process to another CPU during execution. This
would mean that once a process was started on a CPU it would stay on that
CPU, even if it grew to a point that it would make since to switch it over
to another.
It looks like I was hoodwinked tho, as some research has lead me to the SMP
FAQ item 7:
7. Does Linux SMP support processor affinity?
Standard kernel
No and Yes. There is no way to force a process onto specific CPU's but the
linux scheduler has a processor bias for each process, which tends to keep
processes tied to a specific CPU.
This seems to be saying that what I was told was wrong, so, I apologize for
wasting the lists time.
Thanks,
Peter Darley
-----Original Message-----
From: Ron Snyder [mailto:snyder@roguewave.com]
Sent: Thursday, May 23, 2002 7:41 AM
To: 'Peter Darley'; Pgsql-General
Subject: RE: [GENERAL] Process balancing on smp db server/apache web
server
What OS are you using that "assigns" a cpu to a process at start up? I
believe that all of our multiprocessor machines (Linux, Sun, HP, AIX, IRIX,
Dec^Wcompaq^WHP) will run a ready process on whatever cpu is available.
-ron
Show quoted text
-----Original Message-----
From: Peter Darley [mailto:pdarley@kinesis-cem.com]
Sent: Thursday, May 23, 2002 6:56 AM
To: Pgsql-General
Subject: [GENERAL] Process balancing on smp db server/apache
web serverFriends,
I have been thinking about my smp db server and how it
interacts with my
web server. I'm using mod_perl on Apache, which uses
Apache::DBI to connect
to the db server via a private network segment. It occurs to
me that since
the web server is connecting early (on startup), when there
is probably no
load on the db server, the cpu that each backend is assigned
to will be
largely random, or, if there is a large syslogd operation or
something right
at that time, it might even put the majority of backends on the same
processor.
When someone hits the web site it seems to me that
there would be a greater
than 50% chance that any two large queries from the web
server would end up
being run on the same processor. Similarly, if I start a
large processing
script that uses the db, since the web associated backends are already
assigned to a processor, there's a good (~50%?) chance that
any big queries
that come in through the web will be on the loaded cpu.
Does this make sense to anyone? If this is true, are
there any suggestions
about how I can keep my persistent connections from Apache,
while getting
the db server to balance the load more efficiently?
Thanks,
Peter Darley---------------------------(end of
broadcast)---------------------------
TIP 3: if posting/reading through Usenet, please send an appropriate
subscribe-nomail command to majordomo@postgresql.org so that your
message can get through to the mailing list cleanly
7. Does Linux SMP support processor affinity?
Standard kernel
No and Yes. There is no way to force a process onto
specific CPU's but the
linux scheduler has a processor bias for each process, which
tends to keep
processes tied to a specific CPU.This seems to be saying that what I was told was wrong,
so, I apologize for
wasting the lists time.
It definitely didn't waste my time, as I was previously unaware of the
scheduling bias. :)
Thanks!
-ron
Import Notes
Resolved by subject fallback
On Thu, 23 May 2002, Ron Snyder wrote:
7. Does Linux SMP support processor affinity?
Standard kernel
No and Yes. There is no way to force a process onto
specific CPU's but the
linux scheduler has a processor bias for each process, which
tends to keep
processes tied to a specific CPU.This seems to be saying that what I was told was wrong,
so, I apologize for
wasting the lists time.It definitely didn't waste my time, as I was previously unaware of the
scheduling bias. :)
As was I.
Having taken a quick look at the 2.2.x scheduler (it looks completely different
to how I remember the scheduler looked when I last played in that area under
2.0.x) this does indeed seem to be so. Given that a certain CPU is free at
process that last ran on that CPU gets an advantage compared to those that
haven't. However, given a process that is looking to be scheduled and a CPU
looking to schedule the two can be matched up even if that process last ran on
another CPU.
The reason for the preference seems to be the sensible desire to maximise cache
efficiency, amongst other things.
--
Nigel J. Andrews
Director
---
Logictree Systems Limited
Computer Consultants
Peter Darley wrote:
Ron,
I thought I was talking about Linux, but may I'm mistaken on how smp works.
I was told that a process is run on one and only one CPU, and that there was
no mechanism to move the process to another CPU during execution. This
would mean that once a process was started on a CPU it would stay on that
CPU, even if it grew to a point that it would make since to switch it over
to another.
It looks like I was hoodwinked tho, as some research has lead me to the SMP
FAQ item 7:7. Does Linux SMP support processor affinity?
Standard kernel
No and Yes. There is no way to force a process onto specific CPU's but the
linux scheduler has a processor bias for each process, which tends to keep
processes tied to a specific CPU.This seems to be saying that what I was told was wrong, so, I apologize for
wasting the lists time.
Let me explain processor affinity. CPU's have instruction and data
caches on the chip, as well as virtual page mapping caches (TLB). This
makes keeping a process on the same CPU desirable because returning to
the same CPU means the CPU cache may have information that will allow
that process to run faster. However, there is no requirement that a
process remain on the same CPU, and it will often be moved to take
advantage of an idle CPU.
On a 2-cpu SMP system, try this. Start three loops in separate terminal
sessions:
echo $$;while : ;do :; done
Then, use 'ps' with the proper flags to see the CPU's for each process.
On my BSD/OS system, I use:
ps -axl|egrep '29276|29404|29451'
with the numbers representing the process id's displayed in my three
terminal sessions. What I see is that two are running on one CPU, and
one on another, but you should see that sometimes two are running on
CPU-0 and then two are running on CPU-1, as that the processes migrate
for load balancing purposes.
--
Bruce Momjian | http://candle.pha.pa.us
pgman@candle.pha.pa.us | (610) 853-3000
+ If your life is a hard drive, | 830 Blythe Avenue
+ Christ can be your backup. | Drexel Hill, Pennsylvania 19026