os-linux.h revision 22f78b320a8d2ffa32b5736fe754c108a8d21525
1ebac4655dd3624f3296ff83be48e0cdc02852f1Jens Axboe#ifndef FIO_OS_LINUX_H 2ebac4655dd3624f3296ff83be48e0cdc02852f1Jens Axboe#define FIO_OS_LINUX_H 3ebac4655dd3624f3296ff83be48e0cdc02852f1Jens Axboe 4ebac4655dd3624f3296ff83be48e0cdc02852f1Jens Axboe#include <sys/ioctl.h> 58756e4d421722eaeb089067aeaaf317d05d53a57Jens Axboe#include <sys/uio.h> 63c39a379542fd819dbc5cf6daf59380911c39141Jens Axboe#include <sys/syscall.h> 73c39a379542fd819dbc5cf6daf59380911c39141Jens Axboe#include <unistd.h> 88756e4d421722eaeb089067aeaaf317d05d53a57Jens Axboe#include <asm/unistd.h> 9ebac4655dd3624f3296ff83be48e0cdc02852f1Jens Axboe 10ebac4655dd3624f3296ff83be48e0cdc02852f1Jens Axboe#define FIO_HAVE_LIBAIO 11ebac4655dd3624f3296ff83be48e0cdc02852f1Jens Axboe#define FIO_HAVE_POSIXAIO 12ebac4655dd3624f3296ff83be48e0cdc02852f1Jens Axboe#define FIO_HAVE_FADVISE 13ebac4655dd3624f3296ff83be48e0cdc02852f1Jens Axboe#define FIO_HAVE_CPU_AFFINITY 14ebac4655dd3624f3296ff83be48e0cdc02852f1Jens Axboe#define FIO_HAVE_DISK_UTIL 15ebac4655dd3624f3296ff83be48e0cdc02852f1Jens Axboe#define FIO_HAVE_SGIO 16ba4f8923a7d7b02e69f6daee8dee5ed6e44722ceJens Axboe#define FIO_HAVE_IOPRIO 178756e4d421722eaeb089067aeaaf317d05d53a57Jens Axboe#define FIO_HAVE_SPLICE 1822f78b320a8d2ffa32b5736fe754c108a8d21525Jens Axboe#define FIO_HAVE_IOSCHED_SWITCH 19ebac4655dd3624f3296ff83be48e0cdc02852f1Jens Axboe 20ebac4655dd3624f3296ff83be48e0cdc02852f1Jens Axboe#define OS_MAP_ANON (MAP_ANONYMOUS) 21ebac4655dd3624f3296ff83be48e0cdc02852f1Jens Axboe 22ebac4655dd3624f3296ff83be48e0cdc02852f1Jens Axboetypedef cpu_set_t os_cpu_mask_t; 23ebac4655dd3624f3296ff83be48e0cdc02852f1Jens Axboe 24ebac4655dd3624f3296ff83be48e0cdc02852f1Jens Axboe/* 25ebac4655dd3624f3296ff83be48e0cdc02852f1Jens Axboe * we want fadvise64 really, but it's so tangled... later 26ebac4655dd3624f3296ff83be48e0cdc02852f1Jens Axboe */ 27ebac4655dd3624f3296ff83be48e0cdc02852f1Jens Axboe#define fadvise(fd, off, len, advice) \ 28ebac4655dd3624f3296ff83be48e0cdc02852f1Jens Axboe posix_fadvise((fd), (off_t)(off), (len), (advice)) 29ebac4655dd3624f3296ff83be48e0cdc02852f1Jens Axboe 30ebac4655dd3624f3296ff83be48e0cdc02852f1Jens Axboe#define fio_setaffinity(td) \ 31ebac4655dd3624f3296ff83be48e0cdc02852f1Jens Axboe sched_setaffinity((td)->pid, sizeof((td)->cpumask), &(td)->cpumask) 32ebac4655dd3624f3296ff83be48e0cdc02852f1Jens Axboe#define fio_getaffinity(pid, ptr) \ 33ebac4655dd3624f3296ff83be48e0cdc02852f1Jens Axboe sched_getaffinity((pid), sizeof(cpu_set_t), (ptr)) 34ebac4655dd3624f3296ff83be48e0cdc02852f1Jens Axboe 35ebac4655dd3624f3296ff83be48e0cdc02852f1Jens Axboestatic inline int ioprio_set(int which, int who, int ioprio) 36ebac4655dd3624f3296ff83be48e0cdc02852f1Jens Axboe{ 37ebac4655dd3624f3296ff83be48e0cdc02852f1Jens Axboe return syscall(__NR_ioprio_set, which, who, ioprio); 38ebac4655dd3624f3296ff83be48e0cdc02852f1Jens Axboe} 39ebac4655dd3624f3296ff83be48e0cdc02852f1Jens Axboe 408756e4d421722eaeb089067aeaaf317d05d53a57Jens Axboestatic _syscall6(int, sys_splice, int, fdin, loff_t *, off_in, int, fdout, loff_t *, off_out, size_t, len, unsigned int, flags); 418756e4d421722eaeb089067aeaaf317d05d53a57Jens Axboestatic _syscall4(int, sys_vmsplice, int, fd, const struct iovec *, iov, unsigned long, nr_segs, unsigned int, flags); 428756e4d421722eaeb089067aeaaf317d05d53a57Jens Axboestatic _syscall4(int, sys_tee, int, fdin, int, fdout, size_t, len, unsigned int, flags); 438756e4d421722eaeb089067aeaaf317d05d53a57Jens Axboe 448756e4d421722eaeb089067aeaaf317d05d53a57Jens Axboestatic inline int splice(int fdin, loff_t *off_in, int fdout, loff_t *off_out, 458756e4d421722eaeb089067aeaaf317d05d53a57Jens Axboe size_t len, unsigned long flags) 468756e4d421722eaeb089067aeaaf317d05d53a57Jens Axboe{ 478756e4d421722eaeb089067aeaaf317d05d53a57Jens Axboe return sys_splice(fdin, off_in, fdout, off_out, len, flags); 488756e4d421722eaeb089067aeaaf317d05d53a57Jens Axboe} 498756e4d421722eaeb089067aeaaf317d05d53a57Jens Axboe 508756e4d421722eaeb089067aeaaf317d05d53a57Jens Axboestatic inline int tee(int fdin, int fdout, size_t len, unsigned int flags) 518756e4d421722eaeb089067aeaaf317d05d53a57Jens Axboe{ 528756e4d421722eaeb089067aeaaf317d05d53a57Jens Axboe return sys_tee(fdin, fdout, len, flags); 538756e4d421722eaeb089067aeaaf317d05d53a57Jens Axboe} 548756e4d421722eaeb089067aeaaf317d05d53a57Jens Axboe 558756e4d421722eaeb089067aeaaf317d05d53a57Jens Axboestatic inline int vmsplice(int fd, const struct iovec *iov, 568756e4d421722eaeb089067aeaaf317d05d53a57Jens Axboe unsigned long nr_segs, unsigned int flags) 578756e4d421722eaeb089067aeaaf317d05d53a57Jens Axboe{ 588756e4d421722eaeb089067aeaaf317d05d53a57Jens Axboe return sys_vmsplice(fd, iov, nr_segs, flags); 598756e4d421722eaeb089067aeaaf317d05d53a57Jens Axboe} 608756e4d421722eaeb089067aeaaf317d05d53a57Jens Axboe 618756e4d421722eaeb089067aeaaf317d05d53a57Jens Axboe#define SPLICE_F_MOVE (0x01) /* move pages instead of copying */ 628756e4d421722eaeb089067aeaaf317d05d53a57Jens Axboe#define SPLICE_F_NONBLOCK (0x02) /* don't block on the pipe splicing (but */ 638756e4d421722eaeb089067aeaaf317d05d53a57Jens Axboe /* we may still block on the fd we splice */ 648756e4d421722eaeb089067aeaaf317d05d53a57Jens Axboe /* from/to, of course */ 658756e4d421722eaeb089067aeaaf317d05d53a57Jens Axboe#define SPLICE_F_MORE (0x04) /* expect more data */ 668756e4d421722eaeb089067aeaaf317d05d53a57Jens Axboe#define SPLICE_F_GIFT (0x08) /* pages passed in are a gift */ 678756e4d421722eaeb089067aeaaf317d05d53a57Jens Axboe 683feedc608f168479bde2f2e079cedd6852cb3b3bJens Axboe#define SPLICE_DEF_SIZE (64*1024) 693feedc608f168479bde2f2e079cedd6852cb3b3bJens Axboe 70ebac4655dd3624f3296ff83be48e0cdc02852f1Jens Axboeenum { 71ebac4655dd3624f3296ff83be48e0cdc02852f1Jens Axboe IOPRIO_WHO_PROCESS = 1, 72ebac4655dd3624f3296ff83be48e0cdc02852f1Jens Axboe IOPRIO_WHO_PGRP, 73ebac4655dd3624f3296ff83be48e0cdc02852f1Jens Axboe IOPRIO_WHO_USER, 74ebac4655dd3624f3296ff83be48e0cdc02852f1Jens Axboe}; 75ebac4655dd3624f3296ff83be48e0cdc02852f1Jens Axboe 76ebac4655dd3624f3296ff83be48e0cdc02852f1Jens Axboe#define IOPRIO_CLASS_SHIFT 13 77ebac4655dd3624f3296ff83be48e0cdc02852f1Jens Axboe 78ebac4655dd3624f3296ff83be48e0cdc02852f1Jens Axboe#ifndef BLKGETSIZE64 79ebac4655dd3624f3296ff83be48e0cdc02852f1Jens Axboe#define BLKGETSIZE64 _IOR(0x12,114,size_t) 80ebac4655dd3624f3296ff83be48e0cdc02852f1Jens Axboe#endif 81ebac4655dd3624f3296ff83be48e0cdc02852f1Jens Axboe 829104f874d726e84739d3b4008eee0f6ddfe96714Jens Axboestatic inline int blockdev_size(int fd, unsigned long long *bytes) 83ebac4655dd3624f3296ff83be48e0cdc02852f1Jens Axboe{ 84ebac4655dd3624f3296ff83be48e0cdc02852f1Jens Axboe if (!ioctl(fd, BLKGETSIZE64, bytes)) 85ebac4655dd3624f3296ff83be48e0cdc02852f1Jens Axboe return 0; 86ebac4655dd3624f3296ff83be48e0cdc02852f1Jens Axboe 87ebac4655dd3624f3296ff83be48e0cdc02852f1Jens Axboe return errno; 88ebac4655dd3624f3296ff83be48e0cdc02852f1Jens Axboe} 89ebac4655dd3624f3296ff83be48e0cdc02852f1Jens Axboe 90ebac4655dd3624f3296ff83be48e0cdc02852f1Jens Axboe#endif 91