2012-06-21 16 views
7

Ultimamente, ho letto molti siti Web e libri su schede NIC da 10 GB/s, il loro DMA e il modo in cui i dati vengono gestiti dal kernel Linux (10/100 MB/s NIC) e mi sono venute alcune domande.Dal kernel allo spazio utente (DMA)

Quale sarebbe il modo più semplice per inviare un flusso di dati da 10 GB/s dalla NIC alla terra dell'utente (presumo che sia in grado di elaborare i dati nella terra dell'utente alla stessa velocità).

E

pensi che sarebbe una buona idea per l'attuazione del buffer DMA all'interno dello spazio utente per leggere i dati grezzi direttamente da lì (ed elaborarli, ovviamente, alla stessa velocità)

o sono le loro soluzioni migliori a cui non avevo pensato:/

Grazie.

risposta

6

La cosa più semplice è usare le normali prese di Linux. Potrebbe non essere il più efficiente, ma è più semplice.

Esistono framework che consentono di ricevere e trasmettere in modo molto efficiente i dati nello spazio utente. Associano gli stessi buffer alla NIC (DMA) e al processo, quindi i dati non devono essere copiati.
Questi framework ignorano completamente il kernel: è necessario interagire direttamente con le NIC. Tali quadri sono, per esempio, PF-RING e Netmap

+0

ho bisogno di qualcosa di più efficiente rispetto alle prese normali di Linux, avevo letto un po 'di PF-RING e Netmap, proverò a leggerne un po 'di più oggi, grazie per la risposta. Tuttavia, non sono sicuro di quale sia la soluzione (PF-RING, Netmap di DMA in user-land), è la più veloce anche se – noktec

+2

Google anche per i canali di rete di Van Jacobson. – ninjalj

+0

Ho letto di PF-RING e Netmap, oltre a PACKET_MMAP, e sembra che abbiano quasi la stessa soluzione, ho anche cercato le diapositive di Van Jacobson, e avevano idee molto buone dentro! Immagino, avrò una prima prova con PACKET_MMAP, e poi farò un piccolo bench test con PF-RING, per vedere quale soluzione sembra essere la più appropriata. Ma mi chiedo se sarebbe possibile fermare i pacchetti per entrare nello sk_buff, e direttamente essere trattato da un buffer circolare nello User-land o da PF-RING (e quanto sarebbe difficile implementarlo da zero) – noktec

2

Vorrei anche suggerire di dare un'occhiata al quadro PFQ (https://github.com/pfq/PFQ e http://netgroup.iet.unipi.it/software/pfq/), che costruiscono in cima Netmap e pf_ring concetti e li nasconde per consentire semplice multi- elaborazione di pacchetti core nello spazio utente.

+0

Darei un'occhiata anche a questo, grazie per la risposta. al momento ho appena studiato la soluzione PF_Ring proposta in precedenza. – noktec

0

Ricordo di aver sentito un discorso di alcune persone di Intel al Symposium di Ottawa per Linux che implementavano esattamente ciò che hai proposto. Quando hanno misurato i risultati rispetto alla normale interfaccia socket sono stati sorpresi di scoprire che per molti carichi di lavoro questo approccio non ha funzionato meglio e prima o poi peggiora (!) L'interfaccia socket.

ho cercato, ma non riuscivo a trovare la carta esattamente in linea in questo momento, ma forse questo ti dà un suggerimento ...

+0

Grazie per la risposta, vedrò quello! – noktec