Re: receiving packets on multiprocessor machine
- From: soviet_bloke@xxxxxxxxxxx
- Date: 20 Oct 2006 05:41:27 -0700
Peter,
it it should be fine to know what processor is overloaded and what not.
How to retrieve this info in kernel mode ? (if it is possible)
Again, I have to repeat myself - APIC arbitration protocol is
completely transparent to *ANY* software, including the OS itself.
Therefore, there is absolutely no way to retrieve this info. The only
thing you could do is to obtain some obsolete info from APIC/IOAPIC
registers. Why is this info obsolete??? Simply because the state of
APIC bus is just too volatile thing - any info that software is able to
get on the subject is already obsolete. APIC and IOAPIC hardware is the
only one who can get real-time info on the subject
Anton Bassov
Peter wrote:
It's time to read IOAPIC Manual... :-)
but other q:
when using KeSetTargetProcessorDpc()
it it should be fine to know what processor is overloaded and what not.
How to retrieve this info in kernel mode ? (if it is possible)
Peter
"soviet_bloke@xxxxxxxxxxx" wrote:
Peter,
When two processor machine with W2K3 is overloaded by high network traffic,
one processor raises almost to 100% and second only 20-30%.
In some mails in this group this problem was discussed and explained that
reason is that interrupt for receiving packets is targeted to one processor.
Network card interrupt can hardly qualify for being either fixed or SMI
or NMI or EXTINT or start-up, does it???? Therefore, the OS,
apparently, programs it to be distributed dynamically. When interrupts
are distributed dynamically, they are dispensed to the least busy CPU
via bus arbitration protocol, which is completely transparent to the
software (please check Intel documentation - namely, IOAPIC Manual and
Developers' Manual, Volume 3).
Also was discussed that processor afinity for DPC is possible to force to
some processor.
Indeed, this is what KeSetTargetProcessorDpc() is for
Or system does load balancing ......
Unless you have specified some particular CPU for DPC by calling
KeSetTargetProcessorDpc(), it will run on the CPU that inserts DPC into
a queue - there is no load-balancing here. However, DPCs are normally
queued by ISRs, and, as I have already said, interrupts are dispensed
to the least busy CPU. Therefore, we can speak about indirect
load-balancing......
Has sense to try to force some DPC routines to other processor than is
interrupted by receiving packets ?
It is hard to say anything without knowing the exact situation, but I
would suggest to leave it to the system to decide how to do things.
Anton Bassov
Peter wrote:
When two processor machine with W2K3 is overloaded by high network traffic,
one processor raises almost to 100% and second only 20-30%.
In some mails in this group this problem was discussed and explained that
reason is that interrupt for receiving packets is targeted to one processor.
Also was discussed that processor afinity for DPC is possible to force to
some processor.
My question is if such work has sense to avoid such work if it is crazy idea.
Has sense to try to force some DPC routines to other processor than is
interrupted by receiving packets ?
Or system does load balancing the best how it can be and my forcing of DPC
routines to other processor has not sense in my driver ?
Thx!
Peter
.
- Follow-Ups:
- Re: receiving packets on multiprocessor machine
- From: Peter
- Re: receiving packets on multiprocessor machine
- References:
- Re: receiving packets on multiprocessor machine
- From: soviet_bloke
- Re: receiving packets on multiprocessor machine
- From: Peter
- Re: receiving packets on multiprocessor machine
- Prev by Date: Re: NDIS 5.2 and Scalable Networking Pack
- Next by Date: Rtlver.lib and Wdmsec.lib addition causes corrupt drivers
- Previous by thread: Re: receiving packets on multiprocessor machine
- Next by thread: Re: receiving packets on multiprocessor machine
- Index(es):
Relevant Pages
|