Same feature, new implementation in PR: https://github.com/ntop/PF_RING/pull/343
On Sun, May 6, 2018 at 7:18 PM, Amir Kaduri <akadur...@gmail.com> wrote: > Good. > There is a pull-request waiting. I hope you'll find it beneficial: > https://github.com/ntop/PF_RING/pull/340 > > Thanks, > Amir > > On Tue, May 1, 2018 at 1:19 AM, Alfredo Cardigliano <cardigli...@ntop.org> > wrote: > >> >> >> On 30 Apr 2018, at 17:52, Amir Kaduri <akadur...@gmail.com> wrote: >> >> Thanks for the answers. >> >> So the only way to make handlep->timeout>=0, is by setting the >> file-descriptor to "blocking" (nonblock=0) according to the logic in >> function pcap_setnonblock_mmap() and this is something that we would >> like to avoid. >> Therefore, we do the polling (non-blocking) in the application that uses >> pcap/pf_ring. >> The problem we have is with low-traffic network. According to the logic >> in function copy_data_to_ring(), as long as the queue didn't reach the >> "poll_num_pkts_watermark" threshold (in our case 128 packets), >> the poll() (in userspace) won't be called (since wake_up_interruptible(..) >> is not called), which means that we have packets that are stuck in the ring >> till the queue reaches the watermark. >> >> I wonder if you see any rationale in improving the pf_ring kernel module >> code, to call wake_up_interruptible() (in order to flush the queue) if >> some "timeout" passed and the queue is not empty (but still didn't reach >> the watermark). >> >> >> I think that using the watermark in combination with a timeout is a good >> idea. >> >> Alfredo >> >> Amir >> >> >> On Thu, Apr 26, 2018 at 6:00 PM, Alfredo Cardigliano < >> cardigli...@ntop.org> wrote: >> >>> >>> >>> On 26 Apr 2018, at 15:34, Amir Kaduri <akadur...@gmail.com> wrote: >>> >>> Hi Alfredo, >>> >>> My code is based on libpcap, while pfring's userland examples use pfring >>> APIs directly, therefore things are a bit harder for me. >>> >>> Short clarification about a related code-line: >>> Please look at the following line: https://github.com/ntop/ >>> PF_RING/blob/dev/userland/libpcap-1.8.1/pcap-linux.c#L1875 >>> >>> (1) If I understand it correctly, if wait_for_incoming_packet is true, >>> then pfring_poll() should be called. >>> Don't you want wait_for_incoming_packet to be true in case >>> pf_ring_active_poll is true? >>> >>> >>> “active” means spinning, thus poll should not be used in that case. >>> >>> Currently, its the opposite (i.e. if pf_ring_active_poll is true, >>> wait_for_incoming_packet will be false thus pfring_poll() won't be >>> called). >>> >>> >>> This seems to be correct >>> >>> >>> (2) If the code is ok, then the only way for me to make >>> wait_for_incoming_packet true (for pfring_poll() to be called) is by >>> making handlep->timeout >= 0. >>> Correct? >>> >>> >>> Correct >>> >>> Alfredo >>> >>> >>> Thanks, >>> Amir >>> >>> On Mon, Apr 9, 2018 at 10:51 AM, Alfredo Cardigliano < >>> cardigli...@ntop.org> wrote: >>> >>>> Hi Amir >>>> if I understand correctly, pfcount_multichannel is working, while in >>>> your application >>>> it seems that poll does not honor the timeout, if this is the case it >>>> seems the problem >>>> is not in the kernel module, I think you should look for differences >>>> between the two applications.. >>>> >>>> Alfredo >>>> >>>> On 9 Apr 2018, at 07:20, Amir Kaduri <akadur...@gmail.com> wrote: >>>> >>>> Hi Alfredo, >>>> >>>> I'm back to investigate/debug this issue in my environment, and maybe >>>> you'll manage to save me some time: >>>> >>>> When I use the example program "pfcount_multichannel", poll-duration >>>> works for me as expected: >>>> For watermark=128, poll-duration=1000, even if less than 128 packets >>>> received, I get them in pfcount_multichannel. >>>> >>>> On the other hand, in my other program (which is a complex one), the >>>> userspace application gets the packets only after 128 packets >>>> aggregated by the ring, regardless the polling rate (which is done >>>> always using 50ms timeout). >>>> >>>> Maybe you can figure out what can "hold" the packets in the ring and >>>> forward them to userspace only when the watermark threshold passes? >>>> Maybe something is missing during initialization? >>>> (for simplicity I'm not using rehash, and not using any filters). >>>> >>>> Thanks >>>> >>>> On Tue, Oct 31, 2017 at 6:32 PM, Alfredo Cardigliano < >>>> cardigli...@ntop.org> wrote: >>>> >>>>> Hi Amir >>>>> that's correct, however for some reason it seems it is not the case in >>>>> your tests. >>>>> >>>>> Alfredo >>>>> >>>>> On 31 Oct 2017, at 12:08, Amir Kaduri <akadur...@gmail.com> wrote: >>>>> >>>>> Thanks. tot_insert apparently works ok. >>>>> >>>>> Regarding function copy_data_to_ring(): >>>>> At the end of it there is the statement: >>>>> if(num_queued_pkts(pfr) >= pfr->poll_num_pkts_watermark) >>>>> wake_up_interruptible(&pfr->ring_slots_waitqueue); >>>>> >>>>> Since watermark is set to 128, and I send <128 packets, this causes >>>>> them to wait in kernel queue. >>>>> But since poll_duration is set to 1 (1 millisecond I assume), I expect >>>>> the condition to check this also (meaning, there are packets in queue but >>>>> 1 >>>>> millisecond passed and they weren't read), >>>>> the wake_up_interruptible should also be called. No? >>>>> >>>>> Thanks, >>>>> Amir >>>>> >>>>> >>>>> On Tue, Oct 31, 2017 at 10:20 AM, Alfredo Cardigliano < >>>>> cardigli...@ntop.org> wrote: >>>>> >>>>>> >>>>>> >>>>>> On 31 Oct 2017, at 08:42, Amir Kaduri <akadur...@gmail.com> wrote: >>>>>> >>>>>> Hi Alfredo, >>>>>> >>>>>> I'm trying to debug the issue, and I have a question about the code, >>>>>> to make sure that there is no problem there: >>>>>> Specifically, I'm referring to the function "pfring_mod_recv": >>>>>> In order that the line that refers to poll_duration >>>>>> ("pfring_poll(ring, ring->poll_duration)") will be reached, there are 2 >>>>>> conditions that should occur: >>>>>> 1. pfring_there_is_pkt_available(ring) should return false >>>>>> (otherwise, the function returns at the end of the condition). >>>>>> 2. wait_for_incoming_packet should be set to true. >>>>>> Currently, I'm referring to the first one: >>>>>> In order that the macro pfring_there_is_pkt_available(ring) will >>>>>> return false, ring->slots_info->tot_insert should be equal to >>>>>> ring->slots_info->tot_read. >>>>>> What I see in my tests that they don't get equal. I always see that >>>>>> tot_insert>tot_read, and sometimes they get eual when tot_read++ is >>>>>> called >>>>>> but it happens inside the condition, so the "pfring_mod_recv" returns >>>>>> with >>>>>> 1. >>>>>> >>>>>> >>>>>> It seems to be correct. The kernel module inserts packets into the >>>>>> ring increasing tot_insert, the userspace library reads packets from the >>>>>> ring increasing tot_read. This means that if tot_insert == tot_read there >>>>>> is no packet to read. If there is a bug, it should be in the kernel >>>>>> module >>>>>> that is somehow not adding packets to the ring (thus not updating >>>>>> tot_insert). >>>>>> >>>>>> Alfredo >>>>>> >>>>>> I remind that I set the watermark to be high, in order to see the >>>>>> poll_duration takes effect. >>>>>> >>>>>> Could you please approve that you don't see any problem in the code? >>>>>> >>>>>> Thanks, >>>>>> Amir >>>>>> >>>>>> >>>>>> On Thu, Oct 26, 2017 at 12:22 PM, Alfredo Cardigliano < >>>>>> cardigli...@ntop.org> wrote: >>>>>> >>>>>>> Hi Amir >>>>>>> yes, that’s the way it should work, if this is not the case, some >>>>>>> debugging is needed to identify the problem >>>>>>> >>>>>>> Alfredo >>>>>>> >>>>>>> On 26 Oct 2017, at 10:14, Amir Kaduri <akadur...@gmail.com> wrote: >>>>>>> >>>>>>> Basically, the functionality that I would like to have is even if >>>>>>> less than poll-watermark-threshold (default: 128) packets arrives the >>>>>>> socket, they will be forwarded to userland if 1 millisecond has passed. >>>>>>> How can I gain this? Isn't it by using pfring_set_poll_duration()? >>>>>>> >>>>>>> Alfredo, could you please clarify? >>>>>>> >>>>>>> Thanks, >>>>>>> Amir >>>>>>> >>>>>>> On Wed, Oct 18, 2017 at 8:48 PM, Amir Kaduri <akadur...@gmail.com> >>>>>>> wrote: >>>>>>> >>>>>>>> Hi, >>>>>>>> >>>>>>>> I'm using pf_ring 6.6.0 (no ZC) on CentOS 7, on 10G interfaces >>>>>>>> (ixgbe drivers). >>>>>>>> As far as I understand the relation between poll-watermark and >>>>>>>> poll-duration, packets will be queued untill one of comes first: or >>>>>>>> passing >>>>>>>> the poll-watermark packets threshold, or a poll-duration milliseconds >>>>>>>> has >>>>>>>> passed. >>>>>>>> I set poll-watermark to the maximum (4096) >>>>>>>> (using pfring_set_poll_watermark()) and set poll-duration to the >>>>>>>> minimum (1) (using pfring_set_poll_duration()). >>>>>>>> I've sent 400 packets to the socket. I see that they are received >>>>>>>> by the NIC, but they didn't pass to userland. Only when passing 500 >>>>>>>> packets, a chunk of them passed to userland. >>>>>>>> I don't quite understand the behavior: since poll-duration is 1 >>>>>>>> (millisecond I assume), I've expected all the packets to pass to >>>>>>>> userland >>>>>>>> immediately, even though poll-watermark is much higher. >>>>>>>> >>>>>>>> Can anyone shed some light on the above? >>>>>>>> >>>>>>>> Thanks, >>>>>>>> Amir >>>>>>>> >>>>>>> >>>>>>> _______________________________________________ >>>>>>> Ntop-misc mailing list >>>>>>> Ntop-misc@listgateway.unipi.it >>>>>>> http://listgateway.unipi.it/mailman/listinfo/ntop-misc >>>>>>> >>>>>>> >>>>>>> >>>>>>> _______________________________________________ >>>>>>> Ntop-misc mailing list >>>>>>> Ntop-misc@listgateway.unipi.it >>>>>>> http://listgateway.unipi.it/mailman/listinfo/ntop-misc >>>>>>> >>>>>> >>>>>> _______________________________________________ >>>>>> Ntop-misc mailing list >>>>>> Ntop-misc@listgateway.unipi.it >>>>>> http://listgateway.unipi.it/mailman/listinfo/ntop-misc >>>>>> >>>>>> >>>>>> >>>>>> _______________________________________________ >>>>>> Ntop-misc mailing list >>>>>> Ntop-misc@listgateway.unipi.it >>>>>> http://listgateway.unipi.it/mailman/listinfo/ntop-misc >>>>>> >>>>> >>>>> _______________________________________________ >>>>> Ntop-misc mailing list >>>>> Ntop-misc@listgateway.unipi.it >>>>> http://listgateway.unipi.it/mailman/listinfo/ntop-misc >>>>> >>>>> >>>>> _______________________________________________ >>>>> Ntop-misc mailing list >>>>> Ntop-misc@listgateway.unipi.it >>>>> http://listgateway.unipi.it/mailman/listinfo/ntop-misc >>>>> >>>> >>>> _______________________________________________ >>>> Ntop-misc mailing list >>>> Ntop-misc@listgateway.unipi.it >>>> http://listgateway.unipi.it/mailman/listinfo/ntop-misc >>>> >>>> >>>> >>>> _______________________________________________ >>>> Ntop-misc mailing list >>>> Ntop-misc@listgateway.unipi.it >>>> http://listgateway.unipi.it/mailman/listinfo/ntop-misc >>>> >>> >>> _______________________________________________ >>> Ntop-misc mailing list >>> Ntop-misc@listgateway.unipi.it >>> http://listgateway.unipi.it/mailman/listinfo/ntop-misc >>> >>> >>> >>> _______________________________________________ >>> Ntop-misc mailing list >>> Ntop-misc@listgateway.unipi.it >>> http://listgateway.unipi.it/mailman/listinfo/ntop-misc >>> >> >> _______________________________________________ >> Ntop-misc mailing list >> Ntop-misc@listgateway.unipi.it >> http://listgateway.unipi.it/mailman/listinfo/ntop-misc >> >> >> >> _______________________________________________ >> Ntop-misc mailing list >> Ntop-misc@listgateway.unipi.it >> http://listgateway.unipi.it/mailman/listinfo/ntop-misc >> > >
_______________________________________________ Ntop-misc mailing list Ntop-misc@listgateway.unipi.it http://listgateway.unipi.it/mailman/listinfo/ntop-misc