TCP /IP
-
hustbaer schrieb:
Die haben dann auch bessere Treiber, erledigen diverse Aufgaben auf der Karte (teile des TCP/IP Stacks), und können über Busmaster selbst diverse "Auftragslisten" aus dem RAM holen und abarbeiten -- so dass die CPU nichtmehr für jedes einzelne blöde Packet nen PCI Zugriff machen muss.
wow, find ich interessant. wo krieg ich infos darüber?
-
Hier steht ganz wenig zu "was", aber nicht zu "wie":
http://www.intel.com/network/connectivity/resources/doc_library/data_sheets/pro1000mt_sa_dual.pdfAnsonsten... keine Ahnung

Ich hab das mal auf der NTDEV Mailing Liste von OSR (www.osronline.com) aufgeschnappt (is ne offene Sache, kannst dich ja mal eintragen wenn dich Treiber Entwicklung und so interessiert - gute Leute dort). Da hat auch einer vorgerechnet dass man ne gigabit Karte die in einem normalen PCI Slot steckt sowieso nichtmehr ausreizen kann wenn die CPU für jedes Paket ("Frame" oder wie das im Ethernet Fachjargon heisst) extra ran muss um die Karte anzusprechen. Leider kenn ich mich mit DMA bei PCI Karten und generell PCI Zugriffen nicht so aus -- ich vermute aber dass ein PCI Zugriff per CPU auf ein einzelnes Register wesentlich mehr als einen PCI Zyklus dauert.
Is auch irgendwie logisch dass bessere Netzwerkkarten sowas können sollten. Macht wenig Sinn z.B. für jedes empfangene Paket nen Interrupt zu generieren und die liebe CPU zu bitten ne neue Adresse im Speicher für das nächste Paket bereitzustellen bzw. die alten Daten aus dem DMA Bereich rauszukopieren. Ist doch viel besser wenn man der Karte sagt "da haste 10MB Speicher, geh spiel damit wie du meinst, und wenn du nen paar Pakete reinbekommen hast, oder eines und dann nen paar nanosekunden nixmehr, dann mach mir nen Interrupt". Salopp gesagt

-
hustbaer schrieb:
Ist doch viel besser wenn man der Karte sagt "da haste 10MB Speicher, geh spiel damit wie du meinst, und wenn du nen paar Pakete reinbekommen hast, oder eines und dann nen paar nanosekunden nixmehr, dann mach mir nen Interrupt"
klar, was anderes ist bei nic's >100mbits/s wohl auch nicht sinnvoll

wobei ich mal gehört habe, dass die ix86-kisten pci-dma nur sehr unzureichend unterstützen (busmaster kann keine virtuellen adressen benutzen, es können keine dma-aktionen zusammengefasst werden, keine scatter listen etc.). naja, aber als verkaufsargument ist ja sowas trotzdem gut.... :xmas2:
-
hallo,
kann es sein das es Select bei CSocket nicht gibt?
wieso benutz ich überhaupt csockets?hat sich erledigt.. manchmal sieht man den wald vor lauter bäumen nicht!

-
tja.. ich werd noch verrückt..
int CEmpfaengerDlg::fkttesthoch3(int port)
{
int ok;
CSocket m_sMySocket;
CSocket clients[MAX_CLIENTS];
FD_SET fd;
FD_ZERO (&fd);
TIMEVAL tv;for(int i=0;i<MAX_CLIENTS;i++)
{FD_SET(clients[i],&fd); //füllt fd mit sockets
}if (ok=m_sMySocket.Create(port)){};
if ((ok)&&(ok=m_sMySocket.Listen())){};
tv.tv_sec=10;
ok=select(0, &fd,NULL, NULL, &tv);
machwas.InsertString(0,"nach select");if(ok==1){
ok=m_sMySocket.Accept(clients[1]);}
return ok;
}müßte er bei der funktion selcet jetzt nicht eigentlich blockieren und 10 sekunden auf einkommende verbindungen warten?!
er springt aber so über select rüber und gibt eine -1 zurück...
was mach ich falsch?
-
@individuum:
Du füllst "fd" mit lauter "sockets" an die es noch garnicht gibt - da wird also wahrscheinlich INVALID_SOCKET drinstehen.Ausserdem musst du wenn du auf eingehende Verbindungen warten willst ein select() auf den "listen socket" machen, und die Verbindung dann mit accept() annehmen.
Und keine Ahnung wieso du "CSocket" verwendest, ich hab mir immer nen eigenen Wrapper geschrieben...

@net:
wobei ich mal gehört habe, dass die ix86-kisten pci-dma nur sehr unzureichend unterstützen (busmaster kann keine virtuellen adressen benutzen, es können keine dma-aktionen zusammengefasst werden, keine scatter listen etc.).
* busmaster kann keine virtuellen adressen benutzen
-> jo, muss aber auch nicht, muss der Treiber halt genug Speicher "am Stück" für die Karte reservieren - geht ja übers OS normalerweise* es können keine dma-aktionen zusammengefasst werden, keine scatter listen etc.
-> wenn die Karte "busmaster" kann sollte sie das eigentlich können. Sollte heisst ich weiss es nicht, denke aber es müsste gehen
-
ok, das select klappt jetzt. danke hustbaer