Please also correct me on the "dnl Enabling this option ..." section
below. I won't check any of this in unless I get some good feedback.
My next steps would be to make more of the various threading knobs
configurable at compile time without editing Makefile.in. There's
lots, and they're a bit messy.
-- Pete
diff --git a/Makefile.in b/Makefile.in
index 33e123b..2a6b766 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -406,8 +406,7 @@ VISMISCSRC :=
KARMASRC :=
# userland helper programs for kernel drivers
KERNAPPSRC :=
-#
-KERNAPPSTHRSRC :=
+KERNAPPTHRSRC :=
# MISCSRC are sources that don't fall into the other categories
MISCSRC :=
# c files generated from state machines
@@ -498,14 +497,14 @@ MISCOBJS := $(patsubst %.c,%.o, $(filter %.c,$
(MISCSRC)))
MISCDEPENDS := $(patsubst %.c,%.d, $(filter %.c,$(MISCSRC)))
# KERNAPPOBJS is a list of kernel driver userland objects
-KERNAPPOBJS := $(patsubst %.c,%.o, $(filter %.c,$(KERNAPPSRC)))
+KERNAPPOBJS := $(patsubst %.c,%.o, $(filter %.c,$(KERNAPPSRC))) \
+ $(patsubst %.c,%-threaded.o, $(filter %.c,$
(KERNAPPTHRSRC)))
# KERNAPPS is a list of kernel driver userland executables
KERNAPPS := $(patsubst %.c,%, $(filter %.c, $(KERNAPPSRC)))
+KERNAPPSTHR := $(patsubst %.c,%, $(filter %.c, $(KERNAPPTHRSRC)))
# KERNAPPDEPENDS is a list of dependency files for kernel driver
userland
# objects
-KERNAPPDEPENDS := $(patsubst %.c,%.d, $(filter %.c,$(KERNAPPSRC)))
-
-KERNAPPSTHR := $(patsubst %.c,%-threaded, $(filter %.c, $
(KERNAPPSTHRSRC)))
+KERNAPPDEPENDS := $(patsubst %.c,%.d, $(filter %.c,$(KERNAPPSRC) $
(KERNAPPTHRSRC)))
# VISOBJS is a list of visualization program objects
VISOBJS := $(patsubst %.c,%.o, $(filter %.c,$(VISSRC)))
@@ -943,7 +942,7 @@ just_kmod_install: just_kmod
.PHONY: kmod_install
kmod_install: kmod kernapps just_kmod_install
install -d $(prefix)/sbin
- install -m 755 $(KERNAPPS) $(prefix)/sbin
+ install -m 755 $(KERNAPPS) $(KERNAPPSTHR) $(prefix)/sbin
endif
ifneq (,$(LINUX24_KERNEL_SRC))
@@ -964,7 +963,7 @@ just_kmod24_install: just_kmod24
.PHONY: kmod24_install
kmod24_install: kmod24 kernapps just_kmod24_install
install -d $(prefix)/sbin
- install -m 755 $(KERNAPPS) $(prefix)/sbin
+ install -m 755 $(KERNAPPS) $(KERNAPPSTHR) $(prefix)/sbin
install -m 755 src/apps/kernel/linux/mount.pvfs2 $(prefix)/sbin
@echo ""
@echo "For improved linux-2.4 support,"
diff --git a/configure b/configure
index fb5ca35..e2e6718 100755
--- a/configure
+++ b/configure
@@ -692,6 +692,7 @@ build_static
REDHAT_RELEASE
NPTL_WORKAROUND
MISC_TROVE_FLAGS
+THREADED_KMOD_HELPER
LINUX_KERNEL_SRC
LINUX24_KERNEL_SRC
LINUX24_KERNEL_MINOR_VER
@@ -1331,6 +1332,7 @@ Optional Features:
--disable-aio-threaded-callbacks Disable use of AIO threaded
callbacks
--disable-kernel-aio Forcibly disable kernel aio
--enable-kernel-sendfile Forcibly enable kernel sendfile
+ --enable-threaded-kmod-helper Use threads in the kernel helper
application
--enable-fast Disable optional debugging, enable
optimizations.
--enable-strict Turn on strict compiler warnings
--enable-verbose-build Enables full output during build process
@@ -11782,6 +11784,16 @@ _ACEOF
fi
+# Check whether --enable-threaded-kmod-helper was given.
+if test "${enable_threaded_kmod_helper+set}" = set; then
+ enableval=$enable_threaded_kmod_helper; if test "x$enableval" =
"xyes" ; then
+ THREADED_KMOD_HELPER=yes
+ fi
+
+fi
+
+
+
BUILD_ABSOLUTE_TOP=`pwd`
SRC_RELATIVE_TOP=$srcdir
SRC_ABSOLUTE_TOP=`cd $srcdir ; pwd`
@@ -18482,6 +18494,7 @@ build_static!$build_static$ac_delim
REDHAT_RELEASE!$REDHAT_RELEASE$ac_delim
NPTL_WORKAROUND!$NPTL_WORKAROUND$ac_delim
MISC_TROVE_FLAGS!$MISC_TROVE_FLAGS$ac_delim
+THREADED_KMOD_HELPER!$THREADED_KMOD_HELPER$ac_delim
LINUX_KERNEL_SRC!$LINUX_KERNEL_SRC$ac_delim
LINUX24_KERNEL_SRC!$LINUX24_KERNEL_SRC$ac_delim
LINUX24_KERNEL_MINOR_VER!$LINUX24_KERNEL_MINOR_VER$ac_delim
@@ -18499,7 +18512,6 @@ GNUC!$GNUC$ac_delim
DB_CFLAGS!$DB_CFLAGS$ac_delim
DB_LIB!$DB_LIB$ac_delim
NEEDS_LIBRT!$NEEDS_LIBRT$ac_delim
-TARGET_OS_DARWIN!$TARGET_OS_DARWIN$ac_delim
_ACEOF
if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X`
= 97; then
@@ -18541,6 +18553,7 @@ _ACEOF
ac_delim='%!_!# '
for ac_last_try in false false false false false :; do
cat >conf$$subs.sed <<_ACEOF
+TARGET_OS_DARWIN!$TARGET_OS_DARWIN$ac_delim
TARGET_OS_LINUX!$TARGET_OS_LINUX$ac_delim
BUILD_BMI_TCP!$BUILD_BMI_TCP$ac_delim
BUILD_GM!$BUILD_GM$ac_delim
@@ -18567,7 +18580,7 @@ LIBOBJS!$LIBOBJS$ac_delim
LTLIBOBJS!$LTLIBOBJS$ac_delim
_ACEOF
- if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X`
= 24; then
+ if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X`
= 25; then
break
elif $ac_last_try; then
{ { echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS"
>&5
diff --git a/configure.in b/configure.in
index bf53e89..40c65a6 100644
--- a/configure.in
+++ b/configure.in
@@ -546,6 +546,26 @@ if test -n "$lk_src" ; then
AC_DEFINE(WITH_LINUX_KMOD, 1, [Define to build for linux kernel
module userspace helper.])
fi
+dnl
+dnl Enabling this option links pvfs2-client-core against libpvfs2-
threaded.so.
+dnl The objects in there were compiled using __GEN_POSIX_LOCKING__
and
+dnl __PVFS2_JOB_THREADED__. If enabled, the client core will run
with two
+dnl extra threads: one for listening to the kernel device, and
another
+dnl to interact with the network. This has the potential to
increase the
+dnl rate at which concurrent operations are processed, but has the
drawback
+dnl of somewhat higher overhead for a single operation.
+dnl
+dnl Note that even without this option, pvfs2-client-core always
requires
+dnl pthreads to run its remount thread.
+dnl
+AC_ARG_ENABLE([threaded-kmod-helper],
+[ --enable-threaded-kmod-helper Use threads in the kernel helper
application],
+[ if test "x$enableval" = "xyes" ; then
+ THREADED_KMOD_HELPER=yes
+ fi
+])
+AC_SUBST(THREADED_KMOD_HELPER)
+
dnl PAV configuration needs absolute location of source and build.
dnl Linux-2.6 module needs absolute location of source, and uses the
dnl relative location for soft links for out-of-tree builds.
diff --git a/src/apps/kernel/linux/module.mk.in b/src/apps/kernel/
linux/module.mk.in
index 7e71f5f..6e69bb8 100644
--- a/src/apps/kernel/linux/module.mk.in
+++ b/src/apps/kernel/linux/module.mk.in
@@ -1,11 +1,14 @@
DIR := src/apps/kernel/linux
KERNAPPSRC += \
- $(DIR)/pvfs2-client-core.c \
$(DIR)/pvfs2-client.c
-KERNAPPSTHRSRC += \
- $(DIR)/pvfs2-client-core.c
+# if requested, build a threaded client core
+ifeq (,@THREADED_KMOD_HELPER@)
+KERNAPPSRC += $(DIR)/pvfs2-client-core.c
+else
+KERNAPPTHRSRC += $(DIR)/pvfs2-client-core.c
+endif
ifneq (,$(LINUX24_KERNEL_SRC))
KERNAPPSRC += $(DIR)/mount.pvfs2.c
diff --git a/src/apps/kernel/linux/pvfs2-client.c b/src/apps/kernel/
linux/pvfs2-client.c
index dd38e39..09d2bad 100644
--- a/src/apps/kernel/linux/pvfs2-client.c
+++ b/src/apps/kernel/linux/pvfs2-client.c
@@ -28,7 +28,6 @@
#define PVFS2_CLIENT_CORE_SUFFIX "-core"
#define PVFS2_CLIENT_CORE_NAME "pvfs2-client" PVFS2_CLIENT_CORE_SUFFIX
-#define PVFS2_CLIENT_CORE_THR_SUFFIX "-threaded"
static char s_client_core_path[PATH_MAX];
@@ -59,7 +58,6 @@ typedef struct
char *logstamp;
char *dev_buffer_count;
char *dev_buffer_size;
- int threaded;
char *logtype;
} options_t;
@@ -282,15 +280,7 @@ static int monitor_pvfs2_client(options_t *opts)
{
sleep(1);
- if(opts->threaded)
- {
- arg_list[0] = PVFS2_CLIENT_CORE_NAME
PVFS2_CLIENT_CORE_THR_SUFFIX;
- }
- else
- {
- arg_list[0] = PVFS2_CLIENT_CORE_NAME;
- }
-
+ arg_list[0] = PVFS2_CLIENT_CORE_NAME;
arg_index = 1;
arg_list[arg_index++] = "-a";
arg_list[arg_index++] = opts->acache_timeout;
@@ -429,7 +419,6 @@ static void print_help(char *progname)
"PATH\n");
printf("--logstamp=none|usec|datetime override default log
message time stamp format\n");
printf("--logtype=file|syslog specify writing logs to
file or syslog\n");
- printf("--threaded use threaded client\n");
}
static void parse_args(int argc, char **argv, options_t *opts)
@@ -460,7 +449,6 @@ static void parse_args(int argc, char **argv,
options_t *opts)
{"gossip-mask",1,0,0},
{"path",1,0,0},
{"logstamp",1,0,0},
- {"threaded",0,0,0},
{0,0,0,0}
};
@@ -569,11 +557,6 @@ static void parse_args(int argc, char **argv,
options_t *opts)
opts->gossip_mask = optarg;
break;
}
- else if (strcmp("threaded", cur_option) == 0)
- {
- opts->threaded = 1;
- break;
- }
break;
case 'h':
do_help:
@@ -644,17 +627,7 @@ static void parse_args(int argc, char **argv,
options_t *opts)
if (!opts->path)
{
- if(opts->threaded)
- {
- sprintf(s_client_core_path,
- "%s" PVFS2_CLIENT_CORE_SUFFIX
PVFS2_CLIENT_CORE_THR_SUFFIX,
- argv[0]);
- }
- else
- {
- sprintf(s_client_core_path, "%s"
PVFS2_CLIENT_CORE_SUFFIX,
- argv[0]);
- }
+ sprintf(s_client_core_path, "%s" PVFS2_CLIENT_CORE_SUFFIX,
argv[0]);
opts->path = s_client_core_path;
}
--
1.5.3.8
_______________________________________________
Pvfs2-developers mailing list
[email protected]
http://www.beowulf-underground.org/mailman/listinfo/pvfs2-developers