From: deen Date: Wed, 22 Aug 2007 23:00:06 +0000 (+0000) Subject: Add ability to start more than one create thread per OSS. X-Git-Tag: v1_7_91~26 X-Git-Url: https://git.whamcloud.com/?a=commitdiff_plain;h=313f87df046b0dfe31d56b902bb66d9bf98d8709;p=fs%2Flustre-release.git Add ability to start more than one create thread per OSS. b=12446 i=adilger i=nathan --- diff --git a/lustre/ChangeLog b/lustre/ChangeLog index cd254c5..f745d47 100644 --- a/lustre/ChangeLog +++ b/lustre/ChangeLog @@ -134,6 +134,11 @@ Details : The journal checksum feature adds two new flags i.e blocks to be written to disk. This behavior is controlled using JBD2_FEATURE_ASYNC_COMMIT flag. +Severity : minor +Bugzilla : 12446 +Description: OSS needs mutliple precreate threads +Details : Add ability to start more than one create thread per OSS. + -------------------------------------------------------------------------------- 2007-08-10 Cluster File Systems, Inc. diff --git a/lustre/ost/ost_handler.c b/lustre/ost/ost_handler.c index 966728b..e72d6d1 100644 --- a/lustre/ost/ost_handler.c +++ b/lustre/ost/ost_handler.c @@ -59,6 +59,10 @@ static int ost_num_threads; CFS_MODULE_PARM(ost_num_threads, "i", int, 0444, "number of OST service threads to start (deprecated)"); +static int oss_num_create_threads; +CFS_MODULE_PARM(oss_num_create_threads, "i", int, 0444, + "number of OSS create threads to start"); + void oti_to_request(struct obd_trans_info *oti, struct ptlrpc_request *req) { struct oti_req_ack_lock *ack_lock; @@ -1712,6 +1716,8 @@ static int ost_setup(struct obd_device *obd, struct lustre_cfg* lcfg) struct lprocfs_static_vars lvars; int oss_min_threads; int oss_max_threads; + int oss_min_create_threads; + int oss_max_create_threads; int rc; ENTRY; @@ -1765,12 +1771,26 @@ static int ost_setup(struct obd_device *obd, struct lustre_cfg* lcfg) if (rc) GOTO(out_service, rc = -EINVAL); + if (oss_num_create_threads) { + if (oss_num_create_threads > OSS_MAX_CREATE_THREADS) + oss_num_create_threads = OSS_MAX_CREATE_THREADS; + if (oss_num_create_threads < OSS_DEF_CREATE_THREADS) + oss_num_create_threads = OSS_DEF_CREATE_THREADS; + oss_min_create_threads = oss_max_create_threads = + oss_num_create_threads; + } else { + oss_min_create_threads = OSS_DEF_CREATE_THREADS; + oss_max_create_threads = OSS_MAX_CREATE_THREADS; + } + ost->ost_create_service = ptlrpc_init_svc(OST_NBUFS, OST_BUFSIZE, OST_MAXREQSIZE, OST_MAXREPSIZE, OST_CREATE_PORTAL, OSC_REPLY_PORTAL, OST_WATCHDOG_TIMEOUT, ost_handle, "ost_create", - obd->obd_proc_entry, ost_print_req, 1, 1, + obd->obd_proc_entry, ost_print_req, + oss_min_create_threads, + oss_max_create_threads, "ll_ost_creat", LCT_DT_THREAD); if (ost->ost_create_service == NULL) { CERROR("failed to start OST create service\n"); diff --git a/lustre/ost/ost_internal.h b/lustre/ost/ost_internal.h index ecc977ae..82a40b9 100644 --- a/lustre/ost/ost_internal.h +++ b/lustre/ost/ost_internal.h @@ -37,6 +37,9 @@ struct ost_thread_local_cache { struct ost_thread_local_cache *ost_tls(struct ptlrpc_request *r); +#define OSS_DEF_CREATE_THREADS 1UL +#define OSS_MAX_CREATE_THREADS 16UL + /* Quota stuff */ extern quota_interface_t *quota_interface;