]> git.proxmox.com Git - mirror_zfs.git/commitdiff
OpenZFS 6672 - arc_reclaim_thread() should use gethrtime()
authorDavid Quigley <dpquigl@users.noreply.github.com>
Fri, 6 May 2016 16:35:52 +0000 (12:35 -0400)
committerBrian Behlendorf <behlendorf1@llnl.gov>
Fri, 6 May 2016 16:35:52 +0000 (09:35 -0700)
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

lib/libspl/include/sys/time.h
module/zfs/arc.c

index 03da3f7e348eac7d21add19c383ad899757756fe..f05fcaa1c6637ff59f7e30dc0a0ff0849a912790 100644 (file)
 #define        NSEC2MSEC(n)    ((n) / (NANOSEC / MILLISEC))
 #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        struct  timespec        timestruc_t;
 typedef        struct  timespec        timespec_t;
index faed67aa4ae5481fe3a9c51db6356705eb657dfc..89d11ef42013a559a52baec1fe51eed5a5b3e377 100644 (file)
@@ -3430,7 +3430,7 @@ static void
 arc_reclaim_thread(void)
 {
        fstrans_cookie_t        cookie = spl_fstrans_mark();
-       clock_t                 growtime = 0;
+       hrtime_t                growtime = 0;
        callb_cpr_t             cpr;
 
        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
                         * before considering growing.
                         */
-                       growtime = ddi_get_lbolt() + (arc_grow_retry * hz);
+                       growtime = gethrtime() + SEC2NSEC(arc_grow_retry);
 
                        arc_kmem_reap_now();
 
@@ -3473,7 +3473,7 @@ arc_reclaim_thread(void)
                        }
                } else if (free_memory < arc_c >> arc_no_grow_shift) {
                        arc_no_grow = B_TRUE;
-               } else if (ddi_get_lbolt() >= growtime) {
+               } else if (gethrtime() >= growtime) {
                        arc_no_grow = B_FALSE;
                }
 
@@ -3506,8 +3506,8 @@ arc_reclaim_thread(void)
                         * even if we aren't being signalled)
                         */
                        CALLB_CPR_SAFE_BEGIN(&cpr);
-                       (void) cv_timedwait_sig(&arc_reclaim_thread_cv,
-                           &arc_reclaim_lock, ddi_get_lbolt() + hz);
+                       (void) cv_timedwait_hires(&arc_reclaim_thread_cv,
+                           &arc_reclaim_lock, SEC2NSEC(1), MSEC2NSEC(1), 0);
                        CALLB_CPR_SAFE_END(&cpr, &arc_reclaim_lock);
                }
        }