All of lore.kernel.org
 help / color / mirror / Atom feed
From: David McCullough <David_Mccullough@securecomputing.com>
To: Eran Ben-Avi <eranpublic@yahoo.com>
Cc: linux-crypto@vger.kernel.org, ocf-linux-users@lists.sourceforge.net
Subject: Re: Openswan 2.4.9 - tasklet or workqueue ?
Date: Thu, 27 Sep 2007 00:26:10 +1000	[thread overview]
Message-ID: <20070926142610.GA32314@securecomputing.com> (raw)
In-Reply-To: <440337.35301.qm@web62504.mail.re1.yahoo.com>

[-- Attachment #1: Type: text/plain, Size: 1371 bytes --]


Jivin Eran Ben-Avi lays it down ...
> > Jivin Eran Ben-Avi lays it down ...
> > > 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.
> > > 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.
> > > The problem was solved after I switched to use
> > tasklet instead of the workqueue.
> > > 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

-- 
David McCullough,  david_mccullough@securecomputing.com,   Ph:+61 734352815
Secure Computing - SnapGear  http://www.uCdot.org http://www.cyberguard.com

[-- Attachment #2: tasklet.diff --]
[-- Type: text/x-diff, Size: 4117 bytes --]

Index: openswan/linux/include/openswan/ipsec_rcv.h
===================================================================
RCS file: openswan/linux/include/openswan/ipsec_rcv.h,v
retrieving revision 1.13
diff -u -r1.13 ipsec_rcv.h
--- openswan/linux/include/openswan/ipsec_rcv.h	26 Jun 2007 06:28:52 -0000	1.13
+++ openswan/linux/include/openswan/ipsec_rcv.h	26 Sep 2007 14:17:25 -0000
@@ -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
diff -u -r1.9 ipsec_xmit.h
--- openswan/linux/include/openswan/ipsec_xmit.h	26 Jun 2007 05:26:25 -0000	1.9
+++ openswan/linux/include/openswan/ipsec_xmit.h	26 Sep 2007 14:17:25 -0000
@@ -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
diff -u -r1.27 ipsec_ocf.c
--- openswan/linux/net/ipsec/ipsec_ocf.c	11 Jul 2007 00:35:01 -0000	1.27
+++ openswan/linux/net/ipsec/ipsec_ocf.c	26 Sep 2007 14:17:25 -0000
@@ -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;
 }
 

  parent reply	other threads:[~2007-09-26 14:25 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <20070827224021.GA23450@securecomputing.com>
2007-08-30  7:58 ` Openswan 2.4.9 - tasklet or workqueue ? Eran Ben-Avi
2007-08-30 22:44   ` David McCullough
2007-09-11 19:19   ` Kabir Ahsan-r9aahw
2007-09-12 12:13     ` David McCullough
2007-09-26 14:26   ` David McCullough [this message]
2007-11-01 14:34 Eran Ben-Avi
2007-11-05  3:35 ` David McCullough
  -- strict thread matches above, loose matches on Subject: below --
2007-08-27  7:26 Eran Ben-Avi

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20070926142610.GA32314@securecomputing.com \
    --to=david_mccullough@securecomputing.com \
    --cc=eranpublic@yahoo.com \
    --cc=linux-crypto@vger.kernel.org \
    --cc=ocf-linux-users@lists.sourceforge.net \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.