Re: Load balancing across multiple network paths

[email protected] (Peter T. Breuer)
Newsgroups gmane.linux.enbd.general
Message-ID <[email protected]>
Nikos Gkorogiannis <[email protected]> wrote:
> Indeed, lowering merge_requests to 16 spreads out evenly the load. So,
> after a clean start and one dd, /proc/nbdinfo looks like

OK.

> and indeed the dd throughput is slightly higher, at 9.4Mb/s.
> 
> > If so, shorter reads and relatively more overhead per channel may allow
> > for better pipelining between the competing threads.
> 
> At the application level, in this case just dd, reading smaller chunks
> does not make a difference on throughput. The load across processes (in

It wouldn't make a difference.  The kernel will recombine different
requests up to the merge_requests limit, whetever parameters you give
to dd. Any effect should be negligible.

> terms of requests in nbdinfo) seems evenly spread as above.
> 
> 
> > Well, it looks as though one thread is almost constantly frozen out,
> > which implies a resource limit somewhere. What was the cpu utilization
> > during this test? It may be the cpus being saturated, or a bus ....
> 
> The CPUs of both server and client never exceed 40% utilization. It is

40% is very high. I would expect on the order of 3 or 4%. The cpus must
be relatively slow compared to the transfer speed.

> difficult to see whether the bus is saturated though. 

At 40% it is quite possible that the cpu is saturated to 100% for 40%
of the time. Some resonance may keep it that way, though I don't see
what!

> 
> > I think of you include one more line, the Cpids, we could see if they
> > have changed and hence if indeed one thread has has been starved till
> > death.
> 
> I run around 16 tests of these and looked at Cpids - no deaths
> whatsoever. Maybe they would occur if I run more tests.

OK, well the starvation that does occur is not absolute.

Assuming that the blockage is in the cpu, for large requests the cou
would first copy one request at 100% cpu, blocking out the other client
thread, then the other client would enter and copying would proceed
from it, occupying the cpu, perhaps blocking the original thread from
acking or going back to userpace with the results. This could result in
some kind of serialization, but I don't see how the cpus could run at
"only" 40% that way.

Perhaps the problem is that the NICs are busmastering and they take the
bus for themselves, for long periods, locking out the other NIC? If each
NIC locks the bus for longer than it needs, just in case more packets
come in, that may explain some of it.

Can you look in the NIC driver source comments to see if there is
something about that sort of thing?

> I will try smaller block sizes than 4096 and get back to you.

Peter
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.