os.h revision 901ebe18bdca90032e2fe107a1410385da80d18b
1#ifndef FIO_OS_H 2#define FIO_OS_H 3 4#include <sys/types.h> 5#include <pthread.h> 6#include <unistd.h> 7#include <stdlib.h> 8 9#if defined(__linux__) 10#include "os-linux.h" 11#elif defined(__FreeBSD__) 12#include "os-freebsd.h" 13#elif defined(__NetBSD__) 14#include "os-netbsd.h" 15#elif defined(__sun__) 16#include "os-solaris.h" 17#elif defined(__APPLE__) 18#include "os-mac.h" 19#elif defined(_AIX) 20#include "os-aix.h" 21#elif defined(__hpux) 22#include "os-hpux.h" 23#elif defined(__CYGWIN__) 24#include "os-windows.h" 25#else 26#error "unsupported os" 27#endif 28 29#ifdef FIO_HAVE_LIBAIO 30#include <libaio.h> 31#endif 32 33#ifdef FIO_HAVE_POSIXAIO 34#include <aio.h> 35#ifndef FIO_OS_HAVE_AIOCB_TYPEDEF 36typedef struct aiocb os_aiocb_t; 37#endif 38#endif 39 40#ifdef FIO_HAVE_SGIO 41#include <linux/fs.h> 42#include <scsi/sg.h> 43#endif 44 45#ifndef FIO_HAVE_STRSEP 46#include "../lib/strsep.h" 47#endif 48 49#ifdef MSG_DONTWAIT 50#define OS_MSG_DONTWAIT MSG_DONTWAIT 51#endif 52 53#ifndef FIO_HAVE_FADVISE 54#define posix_fadvise(fd, off, len, advice) (0) 55 56#ifndef POSIX_FADV_DONTNEED 57#define POSIX_FADV_DONTNEED (0) 58#define POSIX_FADV_SEQUENTIAL (0) 59#define POSIX_FADV_RANDOM (0) 60#endif 61#endif /* FIO_HAVE_FADVISE */ 62 63#ifndef FIO_HAVE_CPU_AFFINITY 64#define fio_setaffinity(pid, mask) (0) 65#define fio_getaffinity(pid, mask) do { } while (0) 66#define fio_cpu_clear(mask, cpu) do { } while (0) 67#define fio_cpuset_exit(mask) (-1) 68typedef unsigned long os_cpu_mask_t; 69#endif 70 71#ifndef FIO_HAVE_IOPRIO 72#define ioprio_set(which, who, prio) (0) 73#endif 74 75#ifndef FIO_HAVE_ODIRECT 76#define OS_O_DIRECT 0 77#else 78#define OS_O_DIRECT O_DIRECT 79#endif 80 81#ifndef FIO_HAVE_HUGETLB 82#define SHM_HUGETLB 0 83#ifndef FIO_HUGE_PAGE 84#define FIO_HUGE_PAGE 0 85#endif 86#else 87#ifndef FIO_HUGE_PAGE 88#define FIO_HUGE_PAGE 4194304 89#endif 90#endif 91 92#ifndef FIO_O_NOATIME 93#define FIO_O_NOATIME 0 94#endif 95 96#ifndef OS_RAND_MAX 97#define OS_RAND_MAX RAND_MAX 98#endif 99 100#ifdef FIO_HAVE_CLOCK_MONOTONIC 101#define FIO_TIMER_CLOCK CLOCK_MONOTONIC 102#else 103#define FIO_TIMER_CLOCK CLOCK_REALTIME 104#endif 105 106#ifndef FIO_HAVE_RAWBIND 107#define fio_lookup_raw(dev, majdev, mindev) 1 108#endif 109 110#ifndef FIO_PREFERRED_ENGINE 111#define FIO_PREFERRED_ENGINE "sync" 112#endif 113 114#ifndef FIO_MAX_JOBS 115#define FIO_MAX_JOBS 2048 116#endif 117 118#ifdef FIO_USE_GENERIC_SWAP 119static inline uint16_t fio_swap16(uint16_t val) 120{ 121 return (val << 8) | (val >> 8); 122} 123 124static inline uint32_t fio_swap32(uint32_t val) 125{ 126 val = ((val & 0xff00ff00UL) >> 8) | ((val & 0x00ff00ffUL) << 8); 127 128 return (val >> 16) | (val << 16); 129} 130 131static inline uint64_t fio_swap64(uint64_t val) 132{ 133 val = ((val & 0xff00ff00ff00ff00ULL) >> 8) | 134 ((val & 0x00ff00ff00ff00ffULL) << 8); 135 val = ((val & 0xffff0000ffff0000ULL) >> 16) | 136 ((val & 0x0000ffff0000ffffULL) << 16); 137 138 return (val >> 32) | (val << 32); 139} 140#endif 141 142#ifndef FIO_HAVE_BLKTRACE 143static inline int is_blktrace(const char *fname) 144{ 145 return 0; 146} 147struct thread_data; 148static inline int load_blktrace(struct thread_data *td, const char *fname) 149{ 150 return 1; 151} 152#endif 153 154#define FIO_DEF_CL_SIZE 128 155 156static inline int os_cache_line_size(void) 157{ 158#ifdef FIO_HAVE_CL_SIZE 159 int ret = arch_cache_line_size(); 160 161 if (ret <= 0) 162 return FIO_DEF_CL_SIZE; 163 164 return ret; 165#else 166 return FIO_DEF_CL_SIZE; 167#endif 168} 169 170#ifdef FIO_USE_GENERIC_BDEV_SIZE 171static inline int blockdev_size(struct fio_file *f, unsigned long long *bytes) 172{ 173 off_t end; 174 175 *bytes = 0; 176 177 end = lseek(f->fd, 0, SEEK_END); 178 if (end < 0) 179 return errno; 180 181 *bytes = end; 182 return 0; 183} 184#endif 185 186#ifdef FIO_USE_GENERIC_RAND 187typedef unsigned int os_random_state_t; 188 189static inline void os_random_seed(unsigned long seed, os_random_state_t *rs) 190{ 191 srand(seed); 192} 193 194static inline long os_random_long(os_random_state_t *rs) 195{ 196 long val; 197 198 val = rand_r(rs); 199 return val; 200} 201#endif 202 203#ifndef FIO_HAVE_FS_STAT 204static inline unsigned long long get_fs_size(const char *path) 205{ 206 return 0; 207} 208#endif 209 210#ifndef FIO_HAVE_CPU_ONLINE_SYSCONF 211static inline unsigned int cpus_online(void) 212{ 213 return sysconf(_SC_NPROCESSORS_ONLN); 214} 215#endif 216 217#ifndef FIO_HAVE_GETTID 218static inline int gettid(void) 219{ 220 return getpid(); 221} 222#endif 223 224#endif 225