Re: receiving packets on multiprocessor machine

Tech Tip: Click here to run a free scan for Windows Errors and optimize PC performance




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



.



Relevant Pages

  • Re: receiving packets on multiprocessor machine
    ... when using KeSetTargetProcessorDpc() ... Network card interrupt can hardly qualify for being either fixed or SMI ... they are dispensed to the least busy CPU ... KeSetTargetProcessorDpc(), it will run on the CPU that inserts DPC into ...
    (microsoft.public.development.device.drivers)
  • Re: receiving packets on multiprocessor machine
    ... reason is that interrupt for receiving packets is targeted to one processor. ... Network card interrupt can hardly qualify for being either fixed or SMI ... they are dispensed to the least busy CPU ... KeSetTargetProcessorDpc(), it will run on the CPU that inserts DPC into ...
    (microsoft.public.development.device.drivers)
  • Re: Interrupts are not coming sometime in NIC miniport
    ... An ISR should do only what is absolutely necessary, ... This is usually done by reading some interrupt register on the ... The DPC then does all the real work. ... Fill up blob with data from the NICs data buffers. ...
    (microsoft.public.development.device.drivers)
  • Re: receiving packets on multiprocessor machine
    ... I ment info like for example is possible to retrieve with help of performance ... or maybe in kernel mode is possible to ... interrupts I can to force to some processor. ... Unless you have specified some particular CPU for DPC by calling ...
    (microsoft.public.development.device.drivers)
  • Re: Interrupts are not coming sometime in NIC miniport
    ... Is this HandleInterrupt routine your ISR or your DPC? ... After this the ISR should return because it has nothing else to do. ... Is this interrupt for me? ...
    (microsoft.public.development.device.drivers)