Add strong madvise() hint for cache pruning
authorJens Axboe <jens.axboe@oracle.com>
Tue, 4 Aug 2009 21:17:02 +0000 (23:17 +0200)
committerJens Axboe <jens.axboe@oracle.com>
Tue, 4 Aug 2009 21:17:02 +0000 (23:17 +0200)
Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
filesetup.c
os/os-freebsd.h
os/os-linux.h
os/os-solaris.h

index d7c83a7..f8f81d2 100644 (file)
@@ -303,9 +303,12 @@ static int __file_invalidate_cache(struct thread_data *td, struct fio_file *f,
        /*
         * FIXME: add blockdev flushing too
         */
-       if (f->mmap_ptr)
+       if (f->mmap_ptr) {
                ret = madvise(f->mmap_ptr, f->mmap_sz, MADV_DONTNEED);
-       else if (f->filetype == FIO_TYPE_FILE) {
+#ifdef FIO_MADV_FREE
+               (void) madvise(f->mmap_ptr, f->mmap_sz, FIO_MADV_FREE);
+#endif
+       } else if (f->filetype == FIO_TYPE_FILE) {
                ret = fadvise(f->fd, off, len, POSIX_FADV_DONTNEED);
        } else if (f->filetype == FIO_TYPE_BD) {
                ret = blockdev_invalidate_cache(f->fd);
index 88de713..26bb8a0 100644 (file)
@@ -51,4 +51,8 @@ static inline long os_random_long(os_random_state_t *rs)
        return val;
 }
 
+#ifdef MADV_FREE
+#define FIO_MADV_FREE  MADV_FREE
+#endif
+
 #endif
index dd9c5aa..e4c4c3f 100644 (file)
@@ -250,6 +250,10 @@ static inline int fio_lookup_raw(dev_t dev, int *majdev, int *mindev)
 #define FIO_O_NOATIME  0
 #endif
 
+#ifdef MADV_REMOVE
+#define FIO_MADV_FREE  MADV_REMOVE
+#endif
+
 #define CACHE_LINE_FILE        \
        "/sys/devices/system/cpu/cpu0/cache/index0/coherency_line_size"
 
index 943d387..5029d38 100644 (file)
@@ -108,4 +108,8 @@ static inline int fio_cpuset_exit(os_cpu_mask_t *mask)
  */
 #define FIO_MAX_CPUS                   16384
 
+#ifdef MADV_FREE
+#define FIO_MADV_FREE  MADV_FREE
+#endif
+
 #endif