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 d7c83a796f29401752e9c6030988732dd1e1d4ad..f8f81d2b2a54e9a7692cdb41289ac8c5ff472c2c 100644 (file)
@@ -303,9 +303,12 @@ static int __file_invalidate_cache(struct thread_data *td, struct fio_file *f,
        /*
         * FIXME: add blockdev flushing too
         */
        /*
         * FIXME: add blockdev flushing too
         */
-       if (f->mmap_ptr)
+       if (f->mmap_ptr) {
                ret = madvise(f->mmap_ptr, f->mmap_sz, MADV_DONTNEED);
                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);
                ret = fadvise(f->fd, off, len, POSIX_FADV_DONTNEED);
        } else if (f->filetype == FIO_TYPE_BD) {
                ret = blockdev_invalidate_cache(f->fd);
index 88de7138e88becdf8747a85f0975a890b936cad5..26bb8a096790b40d4f4194b2288d1a955596f3b9 100644 (file)
@@ -51,4 +51,8 @@ static inline long os_random_long(os_random_state_t *rs)
        return val;
 }
 
        return val;
 }
 
+#ifdef MADV_FREE
+#define FIO_MADV_FREE  MADV_FREE
+#endif
+
 #endif
 #endif
index dd9c5aaf493ce6ff403e5b1ec92c5390d7b82bb1..e4c4c3fd2f094eceaad485f1d53b2d35def66367 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
 
 #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"
 
 #define CACHE_LINE_FILE        \
        "/sys/devices/system/cpu/cpu0/cache/index0/coherency_line_size"
 
index 943d387da4d748a10b07ac3fb0af8d270f23af7c..5029d38f356e5983992bb58ae04cfffa77773a5d 100644 (file)
@@ -108,4 +108,8 @@ static inline int fio_cpuset_exit(os_cpu_mask_t *mask)
  */
 #define FIO_MAX_CPUS                   16384
 
  */
 #define FIO_MAX_CPUS                   16384
 
+#ifdef MADV_FREE
+#define FIO_MADV_FREE  MADV_FREE
+#endif
+
 #endif
 #endif