NFSv4.2/pnfs: Make the layoutstats timer configurable

Allow advanced users to set the layoutstats timer in order to lengthen
or shorten the period between layoutstat transmissions to the server.

Signed-off-by: Trond Myklebust <trond.myklebust@primarydata.com>
This commit is contained in:
Trond Myklebust 2015-08-24 20:39:18 -04:00
parent 266d12d42e
commit bbf58bf348
4 changed files with 20 additions and 1 deletions

View File

@ -2279,6 +2279,15 @@ bytes respectively. Such letter suffixes can also be entirely omitted.
The default parameter value of '0' causes the kernel The default parameter value of '0' causes the kernel
not to attempt recovery of lost locks. not to attempt recovery of lost locks.
nfs4.layoutstats_timer =
[NFSv4.2] Change the rate at which the kernel sends
layoutstats to the pNFS metadata server.
Setting this to value to 0 causes the kernel to use
whatever value is the default set by the layout
driver. A non-zero value sets the minimum interval
in seconds between layoutstats transmissions.
nfsd.nfs4_disable_idmapping= nfsd.nfs4_disable_idmapping=
[NFSv4] When set to the default of '1', the NFSv4 [NFSv4] When set to the default of '1', the NFSv4
server will return only numeric uids and gids to server will return only numeric uids and gids to

View File

@ -533,14 +533,17 @@ nfs4_ff_layoutstat_start_io(struct nfs4_ff_layout_mirror *mirror,
ktime_t now) ktime_t now)
{ {
static const ktime_t notime = {0}; static const ktime_t notime = {0};
s64 report_interval = FF_LAYOUTSTATS_REPORT_INTERVAL;
nfs4_ff_start_busy_timer(&layoutstat->busy_timer, now); nfs4_ff_start_busy_timer(&layoutstat->busy_timer, now);
if (ktime_equal(mirror->start_time, notime)) if (ktime_equal(mirror->start_time, notime))
mirror->start_time = now; mirror->start_time = now;
if (ktime_equal(mirror->last_report_time, notime)) if (ktime_equal(mirror->last_report_time, notime))
mirror->last_report_time = now; mirror->last_report_time = now;
if (layoutstats_timer != 0)
report_interval = (s64)layoutstats_timer * 1000LL;
if (ktime_to_ms(ktime_sub(now, mirror->last_report_time)) >= if (ktime_to_ms(ktime_sub(now, mirror->last_report_time)) >=
FF_LAYOUTSTATS_REPORT_INTERVAL) { report_interval) {
mirror->last_report_time = now; mirror->last_report_time = now;
return true; return true;
} }

View File

@ -2285,3 +2285,7 @@ pnfs_report_layoutstat(struct inode *inode, gfp_t gfp_flags)
} }
EXPORT_SYMBOL_GPL(pnfs_report_layoutstat); EXPORT_SYMBOL_GPL(pnfs_report_layoutstat);
#endif #endif
unsigned int layoutstats_timer;
module_param(layoutstats_timer, uint, 0644);
EXPORT_SYMBOL_GPL(layoutstats_timer);

View File

@ -528,12 +528,15 @@ pnfs_use_threshold(struct nfs4_threshold **dst, struct nfs4_threshold *src,
nfss->pnfs_curr_ld->id == src->l_type); nfss->pnfs_curr_ld->id == src->l_type);
} }
extern unsigned int layoutstats_timer;
#ifdef NFS_DEBUG #ifdef NFS_DEBUG
void nfs4_print_deviceid(const struct nfs4_deviceid *dev_id); void nfs4_print_deviceid(const struct nfs4_deviceid *dev_id);
#else #else
static inline void nfs4_print_deviceid(const struct nfs4_deviceid *dev_id) static inline void nfs4_print_deviceid(const struct nfs4_deviceid *dev_id)
{ {
} }
#endif /* NFS_DEBUG */ #endif /* NFS_DEBUG */
#else /* CONFIG_NFS_V4_1 */ #else /* CONFIG_NFS_V4_1 */