From 24a2bb13ec8e449fd5e30967420894f88cdad11a Mon Sep 17 00:00:00 2001 From: Bruce Cran Date: Wed, 12 Oct 2016 03:22:47 +0100 Subject: [PATCH] Implement nice() for Windows Map the following ranges for the "nice" option: Less than -15: High -1 through -15: Above normal 0: Normal 1 through 15: Below normal More than 15: Low/Idle Signed-off-by: Jens Axboe --- HOWTO | 4 ++++ os/windows/posix.c | 17 +++++++++++++---- 2 files changed, 17 insertions(+), 4 deletions(-) diff --git a/HOWTO b/HOWTO index 07419a12..cf1024cf 100644 --- a/HOWTO +++ b/HOWTO @@ -1066,6 +1066,10 @@ random_generator=str Fio supports the following engines for generating nice=int Run the job with the given nice value. See man nice(2). + On Windows, values less than -15 set the process class to "High"; + -1 through -15 set "Above Normal"; 1 through 15 "Below Normal"; + and above 15 "Idle" priority class. + prio=int Set the io priority value of this job. Linux limits us to a positive value between 0 and 7, with 0 being the highest. See man ionice(1). Refer to an appropriate manpage for diff --git a/os/windows/posix.c b/os/windows/posix.c index 33881278..bbd93e97 100755 --- a/os/windows/posix.c +++ b/os/windows/posix.c @@ -647,10 +647,19 @@ int setgid(gid_t gid) int nice(int incr) { - if (incr != 0) { - errno = EINVAL; - return -1; - } + DWORD prioclass = NORMAL_PRIORITY_CLASS; + + if (incr < -15) + prioclass = HIGH_PRIORITY_CLASS; + else if (incr < 0) + prioclass = ABOVE_NORMAL_PRIORITY_CLASS; + else if (incr > 15) + prioclass = IDLE_PRIORITY_CLASS; + else if (incr > 0) + prioclass = BELOW_NORMAL_PRIORITY_CLASS; + + if (!SetPriorityClass(GetCurrentProcess(), prioclass)) + log_err("fio: SetPriorityClass failed\n"); return 0; } -- 2.25.1