OpenZFS 6672 - arc_reclaim_thread() should use gethrtime()
6672 arc_reclaim_thread() should use gethrtime() instead of ddi_get_lbolt() Reviewed by: Matthew Ahrens <mahrens@delphix.com> Reviewed by: Prakash Surya <prakash.surya@delphix.com> Reviewed by: Josef 'Jeff' Sipek <jeffpc@josefsipek.net> Reviewed by: Robert Mustacchi <rm@joyent.com> Approved by: Dan McDonald <danmcd@omniti.com> Ported-by: David Quigley <dpquigl@davequigley.com> Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov> OpenZFS-issue: https://www.illumos.org/issues/6672 OpenZFS-commit: https://github.com/openzfs/openzfs/commit/571be5c Closes #4600
This commit is contained in:
parent
4b2a3e0c9d
commit
ae6d0c601e
|
@ -58,6 +58,15 @@
|
||||||
#define NSEC2MSEC(n) ((n) / (NANOSEC / MILLISEC))
|
#define NSEC2MSEC(n) ((n) / (NANOSEC / MILLISEC))
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifndef NSEC2SEC
|
||||||
|
#define NSEC2SEC(n) ((n) / (NANOSEC / SEC))
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef SEC2NSEC
|
||||||
|
#define SEC2NSEC(m) ((hrtime_t)(m) * (NANOSEC / SEC))
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
typedef long long hrtime_t;
|
typedef long long hrtime_t;
|
||||||
typedef struct timespec timestruc_t;
|
typedef struct timespec timestruc_t;
|
||||||
typedef struct timespec timespec_t;
|
typedef struct timespec timespec_t;
|
||||||
|
|
|
@ -3430,7 +3430,7 @@ static void
|
||||||
arc_reclaim_thread(void)
|
arc_reclaim_thread(void)
|
||||||
{
|
{
|
||||||
fstrans_cookie_t cookie = spl_fstrans_mark();
|
fstrans_cookie_t cookie = spl_fstrans_mark();
|
||||||
clock_t growtime = 0;
|
hrtime_t growtime = 0;
|
||||||
callb_cpr_t cpr;
|
callb_cpr_t cpr;
|
||||||
|
|
||||||
CALLB_CPR_INIT(&cpr, &arc_reclaim_lock, callb_generic_cpr, FTAG);
|
CALLB_CPR_INIT(&cpr, &arc_reclaim_lock, callb_generic_cpr, FTAG);
|
||||||
|
@ -3454,7 +3454,7 @@ arc_reclaim_thread(void)
|
||||||
* Wait at least zfs_grow_retry (default 5) seconds
|
* Wait at least zfs_grow_retry (default 5) seconds
|
||||||
* before considering growing.
|
* before considering growing.
|
||||||
*/
|
*/
|
||||||
growtime = ddi_get_lbolt() + (arc_grow_retry * hz);
|
growtime = gethrtime() + SEC2NSEC(arc_grow_retry);
|
||||||
|
|
||||||
arc_kmem_reap_now();
|
arc_kmem_reap_now();
|
||||||
|
|
||||||
|
@ -3473,7 +3473,7 @@ arc_reclaim_thread(void)
|
||||||
}
|
}
|
||||||
} else if (free_memory < arc_c >> arc_no_grow_shift) {
|
} else if (free_memory < arc_c >> arc_no_grow_shift) {
|
||||||
arc_no_grow = B_TRUE;
|
arc_no_grow = B_TRUE;
|
||||||
} else if (ddi_get_lbolt() >= growtime) {
|
} else if (gethrtime() >= growtime) {
|
||||||
arc_no_grow = B_FALSE;
|
arc_no_grow = B_FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3506,8 +3506,8 @@ arc_reclaim_thread(void)
|
||||||
* even if we aren't being signalled)
|
* even if we aren't being signalled)
|
||||||
*/
|
*/
|
||||||
CALLB_CPR_SAFE_BEGIN(&cpr);
|
CALLB_CPR_SAFE_BEGIN(&cpr);
|
||||||
(void) cv_timedwait_sig(&arc_reclaim_thread_cv,
|
(void) cv_timedwait_hires(&arc_reclaim_thread_cv,
|
||||||
&arc_reclaim_lock, ddi_get_lbolt() + hz);
|
&arc_reclaim_lock, SEC2NSEC(1), MSEC2NSEC(1), 0);
|
||||||
CALLB_CPR_SAFE_END(&cpr, &arc_reclaim_lock);
|
CALLB_CPR_SAFE_END(&cpr, &arc_reclaim_lock);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue