Re: Multithreaded nDPI
Alfredo Cardigliano <[email protected]> Fri, 8 Mar 2019 17:57:00 +0100
| Newsgroups | gmane.linux.ntop.devel |
|---|---|
| Message-ID | <[email protected]> |
Hi Steve processing traffic from a single interface with multiple streams/thread is similar to processing traffic from multiple interfaces with one thread per interface, as long as traffic is distributed across streams based on 5-tuple. This means that you need (to avoid locking, for performance) separate data structures including the ndpi struct. Alfredo > On 8 Mar 2019, at 17:51, Steve Hill <[email protected]> wrote: > > > I'm looking for some advice on using nDPI in multithreaded code. > > Some Googling tells me that I need a separate ndpi_detection_module_struct for each thread, but beyond that I can't find a lot of information. The example ndpiReader code seems to only use threads when processing multiple independent pcap files or NICs. That's not directly applicable to my situation, as I'm processing a stream of packets from a single NIC so don't have completely independent data sources like that. > > So, I can use a 5-tuple hash to pick a consistent thread for each flow. That would mean that each flow would consistently be processed with the same ndpi_detection_module_struct. > > The documentation isn't very clear, but presumably each endpoint should have a single ndpi_id_struct, irrespective of how many flows it has. Therefore each of the ndpi_id_structs are shared between multiple flows and may therefore be used by any of the threads in association with any of the ndpi_detection_module_structs. I can obviously lock the ndpi_id_structs so that each can only be used by one thread at a time, but I'm not sure whether using the same endpoint with multiple ndpi_detection_module_structs is going to be a problem? > > Finally, I'm not sure how much information nDPI shares between flows via the ndpi_detection_module_struct. i.e. when a flow is processed, does nDPI store any information in ndpi_detection_module_struct about what it has learnt and then use that information when processing other flows? If so, splitting the flows between multiple ndpi_detection_module_structs is fundamentally problematic. > > > I've also got a quick query about the ndpi_id_structs that are passed to ndpi_detection_process_packet. The documentation just says that these are "source" and "destination", but isn't clear on whether these are the source/destination of the packet or of the flow. Obviously reply packets will have the source/destination the opposite way around to the flow's source/destination. > > > Many thanks. > > -- > - Steve Hill > Technical Director | Cyfarwyddwr Technegol > Opendium Online Safety & Web Filtering http://www.opendium.com > Diogelwch Ar-Lein a Hidlo Gwefan > > Enquiries | Ymholiadau: [email protected] +44-1792-824568 > Support | Cefnogi: [email protected] +44-1792-825748 > > ------------------------------------------------------------------------ > Opendium Limited is a company registered in England and Wales. > Mae Opendium Limited yn gwmni sydd wedi'i gofrestru yn Lloegr a Chymru. > > Company No. | Rhif Cwmni: 5465437 > Highfield House, 1 Brue Close, Bruton, Somerset, BA10 0HY, England. > _______________________________________________ > Ntop-dev mailing list > [email protected] > http://listgateway.unipi.it/mailman/listinfo/ntop-dev