Hi James:
I did some more test, add some log to what the interrupts distribution.
In XenNet_RxBufferCheck I log the CPU number by adding line
KdPrint((__DRIVER_NAME " pcpu = %lu\n", pcpu)); please refer to below code.
Result below show that when KeSetTargetProcessorDpc is commentten, the interrupts
distribute over all VCPUs, could this explain something?
Beside, I did some perf test using netperf, no performanc difference observed.
===============Result================================
1) KeSetTargetProcessorDpc(&xi->rx_dpc, 0) is commentted.
XnetNet pcpu = 1
XnetNet pcpu = 3
XnetNet pcpu = 2
XnetNet pcpu = 3
XnetNet pcpu = 7
XnetNet pcpu = 0
XnetNet pcpu = 5
XnetNet pcpu = 3
XnetNet pcpu = 0
XnetNet pcpu = 3
XnetNet pcpu = 7
XnetNet pcpu = 4
XnetNet pcpu = 5
XnetNet pcpu = 2
XnetNet pcpu = 4
XnetNet pcpu = 5
XnetNet pcpu = 6
XnetNet pcpu = 0
XnetNet pcpu = 6
2) KeSetTargetProcessorDpc(&xi->rx_dpc, 0) is *NOT*commentted.
XnetNet pcpu = 0
XnetNet pcpu = 0
XnetNet pcpu = 0
XnetNet pcpu = 0
XnetNet pcpu = 0
XnetNet pcpu = 0
XnetNet pcpu = 0
XnetNet pcpu = 0
XnetNet pcpu = 0
XnetNet pcpu = 0
XnetNet pcpu = 0
==================================================
static VOID XenNet_RxBufferCheck(PKDPC dpc, PVOID context, PVOID arg1, PVOID arg2) { struct xennet_info *xi = context; RING_IDX cons, prod; LIST_ENTRY rx_packet_list; PLIST_ENTRY entry; PNDIS_PACKET packets[MAXIMUM_PACKETS_PER_INDICATE]; ULONG packet_count = 0; struct netif_rx_response *rxrsp = NULL; struct netif_extra_info *ei; USHORT id; int more_to_do = FALSE; packet_info_t *pi = &xi->rxpi; //NDIS_STATUS status; &nb
sp;shared_buffer_t *page_buf; PNDIS_BUFFER buffer; ULONG pcpu = KeGetCurrentProcessorNumber() & 0xff;
UNREFERENCED_PARAMETER(dpc); UNREFERENCED_PARAMETER(arg1); UNREFERENCED_PARAMETER(arg2);
//FUNCTION_ENTER();
KdPrint((__DRIVER_NAME " pcpu = %lu\n", pcpu));
if (!xi->connected)
> Subject: RE: Rather slow time of Pin in Windows with GPL PV driver > Date: Wed, 9 Mar 2011 22:28:48 +1100 > From: james.harper@xxxxxxxxxxxxxxxx > To: tinnycloud@xxxxxxxxxxx > CC: xen-devel@xxxxxxxxxxxxxxxxxxx > > > I may try pin later, my host has 4 * 4 core CPU. > > > > Well, I just compare GPL and RHEL PV driver codes, I noticed most of > the net > > driver > > initialization is the same. Only one difference, in GPL code has the > code of > > KeSetTargetProcessorDpc(&xi->rx_dpc, 0); //in xennet_rx.c line 953 > > but the RHEL doesn't > > > > So I simply comments the code, recompile and did the test again. > > The result shows good, all ping time less than < 1ms. > > > > May it be the cause? Is it harmful to comments this line? > > Many thanks. > > > > At a guess I would say it
should be harmful to performance, but all the > critical code is protected by spinlocks. > > It could be a leftover from a previous version of GPLPV. In the current > version, the spinlock protected code is probably a little long winded > but is nothing compared to the passing down of packets to Windows that > is done in the DPC but outside the spinlock. > > Can you do some general performance tests with this change? > > Is the RHEL PV driver source publicly available? > > James
|