Stavo dando un'occhiata all'utilizzo di PF_RING
per l'invio e la ricezione nella mia applicazione.TCP e PF_RING
Se ho intenzione di utilizzare PF_RING
per mantenere una connessione TCP, sembra che dovrò manualmente "forgiare" i messaggi IP e TCP da solo, poiché pfring_send
invia pacchetti non elaborati. Ciò significa che dovrò reimplementare manualmente il protocollo TCP su PF_RING
?
Capisco che c'è un chiaro vantaggio per la ricezione utilizzando PF_RING
, qualcuno ha provato a inviare dati con PF_RING
? C'è un chiaro vantaggio rispetto alle normali chiamate di invio?
nota: non sto utilizzando il DNA (accesso diretto alla rete), sto solo utilizzando il bypass parziale del kernel con driver NIC-aware.
E i vantaggi delle prestazioni rispetto al normale invio di socket? Sto cercando di eliminare le incoerenze nel normale invio di socket. Normalmente vedo un take us in media 0-> 1, ma ci sono grossi valori anomali (a causa delle attività del kernel) che a volte portano a 100 usec. Sto cercando di eliminare questa chiamata di sistema. – Alex
Si sta reimplementando uno stack TCP/IP nello spazio utente in quel punto, non c'è quasi alcun caso che sarà più veloce o più performante di uno che è incorporato nel kernel, in particolare quando si tratta di inviare nuovamente i pacchetti in caso di errore di trasmissione , o prendersi cura di tutti i casi limite. Per quale particolare caso d'uso stai cercando di ottimizzare? Qual è l'obiettivo finale? –
L'obiettivo finale è ridurre i valori anomali nelle prestazioni di invio. La mia applicazione è "esplosiva" nella natura delle mandate (potrebbe inviare un mazzo in fila e poi aspettare un po 'prima di inviare nuovamente - un po' significa 1ms +). Forse stai chiedendo cosa fa la mia domanda, che temo di non poter dire. – Alex