Ik heb de afgelopen paar dagen zitten spelen met overlapped I/O in combinatie met de Winsock API. Dit zou de performance ten goede moeten komen volgens verscheidene sites. De moeite waard om te proberen dus
.
Ik heb een kleine applicatie gebakken die gebruik maakt van het overlapped systeem van Windows. Bij het testen (met 25 openstaande verbindingen) gaat 99-100% van de CPU tijd naar de server applicatie. Mijn inziens zou Windows andere zaken moeten gaan schedulen. Zaken zoals DUMeter.
Ik heb met Intel VTune even een run gedaan om te zien in welke modules de meeste tijd besteed wordt. Hier is een lijstje van de modules waar de meeste tijd wordt gespendeerd:
16.78% - TCPIP.SYS
16.06% - NTOSKRNL.EXE
12.57% - HAL.DLL
10.82% - BCM4SBXP.SYS [= De driver voor mijn netwerkkaart]
4.78% - NDIS.SYS
4.51% - AFD.SYS
3.05% - WIN32K.SYS
Dit levert mij in totaal al een percentage op van 68.58%. Ik neem toch aan dat Windows bij gebruik van overlapped I/O niet busy gaat idlen maar rustig op een event gaat zitten wachten.
Ik kan me echter niet voorstellen dat 25 threads, die elk lezen en sturen op hun eigen socket, voor een dermate belasting zorgen. Het gedrag van elk van de threads is als volgt: bij het ontvangen van een pakket van 4096 bytes stuurt hij een pakket van 4096 bytes terug.
Als iemand een verklaring heeft voor dit gedrag of een idee hoe ik dit ongewenste gedrag aan zou kunnen pakken dan hoor ik het graag
Ik heb een kleine applicatie gebakken die gebruik maakt van het overlapped systeem van Windows. Bij het testen (met 25 openstaande verbindingen) gaat 99-100% van de CPU tijd naar de server applicatie. Mijn inziens zou Windows andere zaken moeten gaan schedulen. Zaken zoals DUMeter.
Ik heb met Intel VTune even een run gedaan om te zien in welke modules de meeste tijd besteed wordt. Hier is een lijstje van de modules waar de meeste tijd wordt gespendeerd:
16.78% - TCPIP.SYS
16.06% - NTOSKRNL.EXE
12.57% - HAL.DLL
10.82% - BCM4SBXP.SYS [= De driver voor mijn netwerkkaart]
4.78% - NDIS.SYS
4.51% - AFD.SYS
3.05% - WIN32K.SYS
Dit levert mij in totaal al een percentage op van 68.58%. Ik neem toch aan dat Windows bij gebruik van overlapped I/O niet busy gaat idlen maar rustig op een event gaat zitten wachten.
Ik kan me echter niet voorstellen dat 25 threads, die elk lezen en sturen op hun eigen socket, voor een dermate belasting zorgen. Het gedrag van elk van de threads is als volgt: bij het ontvangen van een pakket van 4096 bytes stuurt hij een pakket van 4096 bytes terug.
Als iemand een verklaring heeft voor dit gedrag of een idee hoe ik dit ongewenste gedrag aan zou kunnen pakken dan hoor ik het graag