summaryrefslogtreecommitdiff
path: root/os/os-solaris.h
diff options
context:
space:
mode:
authorJens Axboe <jens.axboe@oracle.com>2008-12-12 20:42:26 +0100
committerJens Axboe <jens.axboe@oracle.com>2008-12-12 20:42:26 +0100
commit6f7024e49e41fafcb838acbebf0c31fbcf35132f (patch)
tree0ed42f9ca6e5ae7dd6b3e823b4b0f575de3ca47b /os/os-solaris.h
parent4e78e405a12b31291aa88fffc1da2cf43b782ef5 (diff)
downloadfio-6f7024e49e41fafcb838acbebf0c31fbcf35132f.tar.gz
fio-6f7024e49e41fafcb838acbebf0c31fbcf35132f.tar.bz2
Support for CPU binding in Solaris
Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
Diffstat (limited to 'os/os-solaris.h')
-rw-r--r--os/os-solaris.h22
1 files changed, 21 insertions, 1 deletions
diff --git a/os/os-solaris.h b/os/os-solaris.h
index 759f3c1b..de948952 100644
--- a/os/os-solaris.h
+++ b/os/os-solaris.h
@@ -3,11 +3,13 @@
#include <sys/types.h>
#include <sys/fcntl.h>
+#include <sys/pset.h>
#define FIO_HAVE_POSIXAIO
#define FIO_HAVE_SOLARISAIO
#define FIO_HAVE_FALLOCATE
#define FIO_HAVE_POSIXAIO_FSYNC
+#define FIO_HAVE_CPU_AFFINITY
#define OS_MAP_ANON MAP_ANON
#define OS_RAND_MAX 2147483648UL
@@ -16,7 +18,7 @@ struct solaris_rand_seed {
unsigned short r[3];
};
-typedef unsigned long os_cpu_mask_t;
+typedef psetid_t os_cpu_mask_t;
typedef struct solaris_rand_seed os_random_state_t;
/*
@@ -62,4 +64,22 @@ static inline int fio_set_odirect(int fd)
return 0;
}
+/*
+ * pset binding hooks for fio
+ */
+#define fio_setaffinity(td) \
+ pset_bind((td)->o.cpumask, P_PID, (td)->pid)
+#define fio_getaffinity(pid, ptr) \
+ sched_getaffinity((pid), sizeof(cpu_set_t), (ptr))
+
+#define fio_cpu_clear(mask, cpu) pset_assign(*(mask), (cpu), PS_NONE)
+#define fio_cpu_set(mask, cpu) pset_assign(*(mask), (cpu), PS_MYID)
+#define fio_cpuset_init(td) pset_create(&(td)->o.cpumask)
+#define fio_cpuset_exit(td) pset_destroy((td)->o.cpumask)
+
+/*
+ * Should be enough, not aware of what (if any) restrictions Solaris has
+ */
+#define FIO_MAX_CPUS 16384
+
#endif