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"