Openswan 2.4.9 - tasklet or workqueue ?
--- David McCullough
Quoted 15 lines · <[email protected]> wrote:
Jivin Eran Ben-Avi lays it down ...
Quoted 3 lines
Hi,
I tested IPSec(tunnel mode) routing performance
between 2 GbE ports using packet generator(SMARTBIT)
on ARM 500MHz with latest OCF patched on
Openswan2.4.9 and I noticed the callback functions are using workqueue.Quoted 1 line
Since RX was performed in NAPI mode with higher
priority then TX (in workqueue), the callback
function(in ipsec_ocf.c)was starved with zero
routing.
Quoted 6 lines
Quoted 1 line
The problem was solved after I switched to use
tasklet instead of the workqueue.
Quoted 1 line
Is there a room for updating next OCF release ?
Sure, send in a patch. This is against
ocf-linux-20070727 right ?
Yes.
Can you please estimate when next release will be
ready?
Thanks.
Quoted 17 lines
Cheers,
DavidmSignature · 11 lines
David McCullough, [email protected], Ph:+61 734352815 Secure Computing - SnapGear http://www.uCdot.org http://www.cyberguard.com - To unsubscribe from this list: send the line "unsubscribe linux-crypto" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
____________________________________________________________________________________
Got a little couch potato?
Check out fun summer activities for kids.
http://search.yahoo.com/search?fr=oni_on_mail&p=summer+activities+for+kids&cs=bz
linux/net/ipsec/ipsec_ocf.c +21 -6
@@ -53,10 +53,10 @@* Tuning parameters, the settings below appear best for * the IXP */ -#define USE_BATCH 1/* enable batch mode */ -#define USE_CBIMM 1/* enable immediate callbacks */ -#define FORCE_QS 0/* force use of queues for continuation of state machine */ - +#define USE_BATCH 1/* enable batch mode */ +#define USE_CBIMM 1/* enable immediate callbacks */ +#define FORCE_QS 0/* force use of queues for continuation of state machine */ +#define USE_TASKLET 1/* force use of tasklet for continuation of state machine */ /* * Because some OCF operations are synchronous (ie., software encryption) * we need to protect ourselves from distructive re-entry. All we do
@@ -83,7 +83,11 @@ (*sm)(arg); \ }) -#if FORCE_QS ==0 +#if USE_TASKLET ==1 +#define PROCESS_NEXT (tskl, sm, arg) \ + tasklet_init(&tskl,(void (*)(unsigned long)) sm, (unsigned long)arg);\ + tasklet_schedule(&tskl); +#elif FORCE_QS ==0 #define PROCESS_NEXT (wq, wqsm, sm, arg) \ if (in_interrupt()) { \ PROCESS_LATER(wq, wqsm, arg); \
@@ -218,6 +222,7 @@return 1 ; } +#if USE_TASKLET ==0 #if LINUX_VERSION_CODE >=KERNEL_VERSION (2 ,6 ,20 )static void ipsec_rsm_wq (struct work_struct *work)
@@ -228,6 +233,7 @@#else #define ipsec_rsm_wq ipsec_rsm#endif +#endif /* USE_TASKLET */ static int ipsec_ocf_rcv_cb (struct cryptop *crp)
@@ -235,7 +241,6 @@struct ipsec_rcv_state *irs = (struct ipsec_rcv_state *)crp->crp_opaque;KLIPS_PRINT (debug_rcv,"klips_debug:ipsec_ocf_rcv_cb\n" ); -if (irs ==NULL ) {KLIPS_PRINT (debug_rcv,"klips_debug:ipsec_ocf_rcv_cb: " "NULL irs in callback\n" );
@@ -273,7 +278,11 @@ crp =NULL ;/* setup the rest of the processing now */ +#if USE_TASKLET ==1 +PROCESS_NEXT (irs->tasklet, ipsec_rsm, irs); +#else PROCESS_NEXT (irs->workq, ipsec_rsm_wq, ipsec_rsm, irs); +#endif return 0 ; }
@@ -396,6 +405,7 @@return (IPSEC_RCV_PENDING ); } +#if USE_TASKLET ==0 #if LINUX_VERSION_CODE >=KERNEL_VERSION (2 ,6 ,20 )static void ipsec_xsm_wq (struct work_struct *work)
@@ -406,6 +416,7 @@#else #define ipsec_xsm_wq ipsec_xsm#endif +#endif /* USE_TASKLET */ static int ipsec_ocf_xmit_cb (struct cryptop *crp)
@@ -445,7 +456,11 @@ crp =NULL ;/* setup the rest of the processing now */ +#if USE_TASKLET ==1 +PROCESS_NEXT (ixs->tasklet, ipsec_xsm, ixs); +#else PROCESS_NEXT (ixs->workq, ipsec_xsm_wq, ipsec_xsm, ixs); +#endif return 0 ; }
Jivin Eran Ben-Avi lays it down ...
Quoted 21 lines
--- David McCullough
Quoted 17 lines · <[email protected]> wrote:
Jivin Eran Ben-Avi lays it down ...
Quoted 3 lines
Hi,
I tested IPSec(tunnel mode) routing performance
between 2 GbE ports using packet generator(SMARTBIT)
on ARM 500MHz with latest OCF patched on
Openswan2.4.9 and I noticed the callback functions are using workqueue.Quoted 1 line
Since RX was performed in NAPI mode with higher
priority then TX (in workqueue), the callback
function(in ipsec_ocf.c)was starved with zero
routing.Quoted 1 line
The problem was solved after I switched to use
tasklet instead of the workqueue.
Quoted 8 lines
Quoted 4 lines
Quoted 1 line
Is there a room for updating next OCF release ?
Sure, send in a patch. This is against
ocf-linux-20070727 right ?Yes.
Can you please estimate when next release will be
ready?
When there is a need, I can turn it around in a day or so. I could also post a patch that is current much more quickly if you would prefer ?
Cheers,
Davidm
Signature · 2 lines
David McCullough, [email protected], Ph:+61 734352815 Secure Computing - SnapGear http://www.uCdot.org http://www.cyberguard.com
We can also do direct function call of ipsec_xsm or ipsec_rsm instead of using tasklet.
-----Original Message-----
From: [email protected] [mailto:[email protected]] On Behalf Of Eran Ben-Avi
Sent: Thursday, August 30, 2007 2:58 AM
To: David McCullough
Cc: [email protected]
Subject: Re: Openswan 2.4.9 - tasklet or workqueue ?
--- David McCullough
Quoted 12 lines · <[email protected]> wrote:
Jivin Eran Ben-Avi lays it down ...
Quoted 3 lines
Hi,
I tested IPSec(tunnel mode) routing performance
between 2 GbE ports using packet generator(SMARTBIT) on ARM 500MHz with latest OCF patched on
Openswan2.4.9 and I noticed the callback functions are using workqueue.Quoted 1 line
Since RX was performed in NAPI mode with higher
Quoted 8 lines
priority then TX (in workqueue), the callback
function(in ipsec_ocf.c)was starved with zero routing.Quoted 1 line
The problem was solved after I switched to use
tasklet instead of the workqueue.
Quoted 1 line
Is there a room for updating next OCF release ?
Sure, send in a patch. This is against
ocf-linux-20070727 right ?
Yes.
Can you please estimate when next release will be ready?
Thanks.
Quoted 4 lines
Cheers,
Davidm
Quoted 11 lines
--
David McCullough,
[email protected], Ph:+61
734352815
Secure Computing - SnapGear http://www.uCdot.org
http://www.cyberguard.com
-
To unsubscribe from this list: send the line "unsubscribe linux-crypto" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
____________________________________________________________________________________
Got a little couch potato?
Check out fun summer activities for kids.
http://search.yahoo.com/search?fr=oni_on_mail&p=summer+activities+for+kids&cs=bz
Jivin Kabir Ahsan-r9aahw lays it down ...
Quoted 2 lines
We can also do direct function call of
ipsec_xsmoripsec_rsminstead of using tasklet.
Care to come up with something that still works for 2.4 but it targetted more at 2.6 ? I wasn't all the happy with the double function thing going on there,
Cheers,
Davidm
Quoted 60 lines
-----Original Message-----
From: [email protected] [mailto:[email protected]] On Behalf Of Eran Ben-Avi
Sent: Thursday, August 30, 2007 2:58 AM
To: David McCullough
Cc: [email protected]
Subject: Re: Openswan 2.4.9 - tasklet or workqueue ?--- David McCullough
Quoted 12 lines · <[email protected]> wrote:
Jivin Eran Ben-Avi lays it down ...
Quoted 3 lines
Hi,
I tested IPSec(tunnel mode) routing performance
between 2 GbE ports using packet generator(SMARTBIT) on ARM 500MHz with latest OCF patched on
Openswan2.4.9 and I noticed the callback functions are using workqueue.Quoted 1 line
Since RX was performed in NAPI mode with higher
Quoted 8 lines
priority then TX (in workqueue), the callback
function(in ipsec_ocf.c)was starved with zero routing.Quoted 1 line
The problem was solved after I switched to use
tasklet instead of the workqueue.
Quoted 1 line
Is there a room for updating next OCF release ?
Sure, send in a patch. This is against
ocf-linux-20070727 right ?Yes.
Can you please estimate when next release will be ready?Thanks.
Quoted 4 lines
Cheers,
DavidmQuoted 11 lines
--
David McCullough,
[email protected], Ph:+61
734352815
Secure Computing - SnapGear http://www.uCdot.org
http://www.cyberguard.com
-
To unsubscribe from this list: send the line "unsubscribe linux-crypto" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html____________________________________________________________________________________
Got a little couch potato?
Check out fun summer activities for kids.
http://search.yahoo.com/search?fr=oni_on_mail&p=summer+activities+for+kids&cs=bz
Signature · 2 lines
David McCullough, [email protected], Ph:+61 734352815 Secure Computing - SnapGear http://www.uCdot.org http://www.cyberguard.com
Jivin Eran Ben-Avi lays it down ...
Quoted 13 lines
Quoted 13 lines
Jivin Eran Ben-Avi lays it down ...
Quoted 3 lines
Hi,
I tested IPSec(tunnel mode) routing performance
between 2 GbE ports using packet generator(SMARTBIT)
on ARM 500MHz with latest OCF patched on
Openswan2.4.9 and I noticed the callback functions are using workqueue.Quoted 1 line
Since RX was performed in NAPI mode with higher
priority then TX (in workqueue), the callback
function(in ipsec_ocf.c)was starved with zero
routing.Quoted 1 line
The problem was solved after I switched to use
Quoted 8 lines
Quoted 5 lines
tasklet instead of the workqueue.
Quoted 1 line
Is there a room for updating next OCF release ?
Sure, send in a patch. This is against
ocf-linux-20070727 right ?Yes.
Can you please estimate when next release will be
ready?
I can probably do one in about a week (offline next week). I could more easily drop a diff since the last release if that helps you out.
I have made a few small changes to your patch so it should be safe on 2.4 systems yet still select tasklets on 2.6 automatically.
Could you have a look at it ? I have done some basic testing here and it seems ok, haven't checked your performance increases yet ;-)
Thanks,
Davidm
Signature · 2 lines
David McCullough, [email protected], Ph:+61 734352815 Secure Computing - SnapGear http://www.uCdot.org http://www.cyberguard.com
Index: openswan/linux/include/openswan/ipsec_rcv.h
===================================================================
RCS file: openswan/linux/include/openswan/ipsec_rcv.h,v retrieving revision 1.13
linux/include/openswan/ipsec_rcv.h +3 -0
@@ -149,6 +149,9 @@#ifdef CONFIG_KLIPS_OCF struct work_struct workq; +#ifdef DECLARE_TASKLET +struct tasklet_struct tasklet; +#endif #endif #ifndef NET_21 struct net_device *devp;
Index: openswan/linux/include/openswan/ipsec_xmit.h
===================================================================
RCS file: openswan/linux/include/openswan/ipsec_xmit.h,v retrieving revision 1.9
linux/include/openswan/ipsec_xmit.h +3 -0
@@ -140,6 +140,9 @@int next_state;#ifdef CONFIG_KLIPS_OCF struct work_struct workq; +#ifdef DECLARE_TASKLET +struct tasklet_struct tasklet; +#endif #endif #ifdef CONFIG_KLIPS_ALG struct ipsec_alg_auth *ixt_a;
Index: openswan/linux/net/ipsec/ipsec_ocf.c
===================================================================
RCS file: openswan/linux/net/ipsec/ipsec_ocf.c,v
retrieving revision 1.27
linux/net/ipsec/ipsec_ocf.c +22 -9
@@ -56,7 +56,11 @@#define USE_BATCH 1/* enable batch mode */ #define USE_CBIMM 1/* enable immediate callbacks */ #define FORCE_QS 0/* force use of queues for continuation of state machine */ - +#ifdef DECLARE_TASKLET +#define USE_TASKLET 1/* use tasklet for continuation of state machine */ +#else +#define USE_TASKLET 0/* don't use tasklet for continuation of state machine */ +#endif /* * Because some OCF operations are synchronous (ie., software encryption) * we need to protect ourselves from distructive re-entry. All we do
@@ -83,15 +87,21 @@ (*sm)(arg); \ }) -#if FORCE_QS ==0 -#define PROCESS_NEXT (wq, wqsm, sm, arg) \ +#if USE_TASKLET ==1 +#define PROCESS_NEXT (this, wqsm, sm) ({ \ + tasklet_init(&this->tasklet, \ + (void (*)(unsigned long)) sm, (unsigned long)this); \ + tasklet_schedule(&this->tasklet); \ + }) +#elif FORCE_QS ==0 +#define PROCESS_NEXT (this, wqsm, sm) \ if (in_interrupt()) { \ - PROCESS_LATER(wq, wqsm, arg); \ + PROCESS_LATER(this->workq, wqsm, this); \ } else { \ - PROCESS_NOW(sm, arg); \ + PROCESS_NOW(sm, this); \ }#else -#define PROCESS_NEXT (wq, wqsm, sm, arg) PROCESS_LATER(wq, wqsm, arg) +#define PROCESS_NEXT (this, wqsm, sm) PROCESS_LATER(this->workq, wqsm, this)#endif /*
@@ -218,6 +228,7 @@return 1 ; } +#if USE_TASKLET ==0 #if LINUX_VERSION_CODE >=KERNEL_VERSION (2 ,6 ,20 )static void ipsec_rsm_wq (struct work_struct *work)
@@ -228,6 +239,7 @@#else #define ipsec_rsm_wq ipsec_rsm#endif +#endif /* USE_TASKLET */ static int ipsec_ocf_rcv_cb (struct cryptop *crp)
@@ -235,7 +247,6 @@struct ipsec_rcv_state *irs = (struct ipsec_rcv_state *)crp->crp_opaque;KLIPS_PRINT (debug_rcv,"klips_debug:ipsec_ocf_rcv_cb\n" ); -if (irs ==NULL ) {KLIPS_PRINT (debug_rcv,"klips_debug:ipsec_ocf_rcv_cb: " "NULL irs in callback\n" );
@@ -273,7 +284,7 @@ crp =NULL ;/* setup the rest of the processing now */ -PROCESS_NEXT (irs->workq, ipsec_rsm_wq, ipsec_rsm, irs); +PROCESS_NEXT (irs, ipsec_rsm_wq, ipsec_rsm);return 0 ; }
@@ -396,6 +407,7 @@return (IPSEC_RCV_PENDING ); } +#if USE_TASKLET ==0 #if LINUX_VERSION_CODE >=KERNEL_VERSION (2 ,6 ,20 )static void ipsec_xsm_wq (struct work_struct *work)
@@ -406,6 +418,7 @@#else #define ipsec_xsm_wq ipsec_xsm#endif +#endif /* USE_TASKLET */ static int ipsec_ocf_xmit_cb (struct cryptop *crp)
@@ -445,7 +458,7 @@ crp =NULL ;/* setup the rest of the processing now */ -PROCESS_NEXT (ixs->workq, ipsec_xsm_wq, ipsec_xsm, ixs); +PROCESS_NEXT (ixs, ipsec_xsm_wq, ipsec_xsm);return 0 ; }