Use RUSAGE_THREAD, if available
authorHuadong Liu <HLiu@fusionio.com>
Thu, 24 Jan 2013 21:07:20 +0000 (14:07 -0700)
committerJens Axboe <axboe@kernel.dk>
Thu, 24 Jan 2013 21:07:20 +0000 (14:07 -0700)
Signed-off-by: Jens Axboe <axboe@kernel.dk>
backend.c
os/windows/posix.c
os/windows/posix/include/sys/resource.h

index e025dbffe01b4f6a667f2b7d561603d1664eef06..2362123a5abf57cdccbc12ba15c5d0268ba7b2b9 100644 (file)
--- a/backend.c
+++ b/backend.c
@@ -1210,8 +1210,11 @@ static void *thread_main(void *data)
        }
 
        fio_gettime(&td->epoch, NULL);
+#ifdef RUSAGE_THREAD
+       getrusage(RUSAGE_THREAD, &td->ru_start);
+#else
        getrusage(RUSAGE_SELF, &td->ru_start);
-
+#endif
        clear_state = 0;
        while (keep_running(td)) {
                uint64_t verify_bytes;
index 67e71c8eabe57a0f2041c78a10cab9ac7c133ec0..05fa5a97a6e115c3c424563e8d832ef4761eeb1c 100755 (executable)
@@ -547,11 +547,21 @@ int getrusage(int who, struct rusage *r_usage)
        const uint64_t SECONDS_BETWEEN_1601_AND_1970 = 11644473600;
        FILETIME cTime, eTime, kTime, uTime;
        time_t time;
+       HANDLE h;
 
        memset(r_usage, 0, sizeof(*r_usage));
 
-       HANDLE hProcess = GetCurrentProcess();
-       GetProcessTimes(hProcess, &cTime, &eTime, &kTime, &uTime);
+       if (who == RUSAGE_SELF) {
+               h = GetCurrentProcess();
+               GetProcessTimes(h, &cTime, &eTime, &kTime, &uTime);
+       } else if (who == RUSAGE_THREAD) {
+               h = GetCurrentThread();
+               GetThreadTimes(h, &cTime, &eTime, &kTime, &uTime);
+       } else {
+               log_err("fio: getrusage %d is not implemented\n", who);
+               return -1;
+       }
+
        time = ((uint64_t)uTime.dwHighDateTime << 32) + uTime.dwLowDateTime;
        /* Divide by 10,000,000 to get the number of seconds and move the epoch from
         * 1601 to 1970 */
index 837d65778456a7cb51db564569c1a37c824abc09..fd46b2887fc4e7a97532aed79c50bdf0ea735914 100644 (file)
@@ -2,6 +2,7 @@
 #define SYS_RESOURCE_H\r
 \r
 #define RUSAGE_SELF    0\r
+#define RUSAGE_THREAD  1\r
 \r
 struct rusage\r
 {\r