Sweet! I'll ask around and see if anyone netmap clued can review. :)
-a On 10 April 2014 08:18, Karim Fodil-Lemelin <fodillemlinka...@gmail.com> wrote: > Hi, > > By the way this change has opened the gates to greater performance for us > when using ng_callout() inside nodes. In some cases we see twice as much pps > since packets are direct dispatched instead of being queued in software > interrupts threads (swi*). > > Thanks, > > Karim > > PS: I did file a PR : kern/188421 > > > On 09/04/2014 9:09 PM, Adrian Chadd wrote: >> >> Hi! >> >> Would you mind filing a PR for this? >> >> www.freebsd.org/send-pr.html >> >> That way it won't (hopefully!) get lost. >> >> Thanks! >> >> >> -a >> >> >> On 9 April 2014 14:25, Karim Fodil-Lemelin <fodillemlinka...@gmail.com> >> wrote: >>> >>> Hi, >>> >>> Below is a revised patch for this issue. It accounts for nodes or hooks >>> that >>> explicitly need to be queuing: >>> >>> @@ -3632,7 +3632,12 @@ ng_callout(struct callout *c, node_p node, hook_p >>> hook, int ticks, >>> >>> if ((item = ng_alloc_item(NGQF_FN, NG_NOFLAGS)) == NULL) >>> return (ENOMEM); >>> >>> - item->el_flags |= NGQF_WRITER; >>> + if ((node->nd_flags & NGF_FORCE_WRITER) || >>> + (hook && (hook->hk_flags & HK_FORCE_WRITER))) >>> >>> + item->el_flags |= NGQF_WRITER; >>> + else >>> >>> + item->el_flags |= NGQF_READER; >>> + >>> NG_NODE_REF(node); /* and one for the item */ >>> NGI_SET_NODE(item, node); >>> if (hook) { >>> >>> Regards, >>> >>> Karim. >>> >>> >>> On 09/04/2014 3:16 PM, Karim Fodil-Lemelin wrote: >>>> >>>> Hi List, >>>> >>>> I'm calling out to the general wisdom ... I have seen an issue in >>>> netgraph >>>> where, if called, a callout routine registered by ng_callout() will >>>> trigger >>>> packet queuing inside the worklist of netgraph since ng_callout() makes >>>> my >>>> node suddenly a WRITER node (therefore non reentrant) for the duration >>>> of >>>> the call. >>>> >>>> So as soon as the callout function returns, all following packets will >>>> get >>>> directly passed to the node again and when the ngintr thread gets >>>> executed >>>> then only then will I get the queued packets. This introduces out of >>>> order >>>> packets in the flow. I am using the current patch below to solve the >>>> issue >>>> and I am wondering if there is anything wrong with it (and maybe >>>> contribute >>>> back :): >>>> >>>> >>>> @@ -3632,7 +3632,7 @@ ng_callout(struct callout *c, node_p node, hook_p >>>> hook, int ticks, >>>> if ((item = ng_alloc_item(NGQF_FN, NG_NOFLAGS)) == NULL) >>>> return (ENOMEM); >>>> >>>> - item->el_flags |= NGQF_WRITER; >>>> + item->el_flags = NGQF_READER; >>>> NG_NODE_REF(node); /* and one for the item */ >>>> NGI_SET_NODE(item, node); >>>> if (hook) { >>>> >>>> >>>> Best regards, >>>> >>>> Karim. >>>> _______________________________________________ >>>> freebsd-net@freebsd.org mailing list >>>> http://lists.freebsd.org/mailman/listinfo/freebsd-net >>>> To unsubscribe, send any mail to "freebsd-net-unsubscr...@freebsd.org" >>> >>> >>> _______________________________________________ >>> freebsd-net@freebsd.org mailing list >>> http://lists.freebsd.org/mailman/listinfo/freebsd-net >>> To unsubscribe, send any mail to "freebsd-net-unsubscr...@freebsd.org" >> >> _______________________________________________ >> freebsd-net@freebsd.org mailing list >> http://lists.freebsd.org/mailman/listinfo/freebsd-net >> To unsubscribe, send any mail to "freebsd-net-unsubscr...@freebsd.org" > > > _______________________________________________ > freebsd-net@freebsd.org mailing list > http://lists.freebsd.org/mailman/listinfo/freebsd-net > To unsubscribe, send any mail to "freebsd-net-unsubscr...@freebsd.org" _______________________________________________ freebsd-net@freebsd.org mailing list http://lists.freebsd.org/mailman/listinfo/freebsd-net To unsubscribe, send any mail to "freebsd-net-unsubscr...@freebsd.org"