Skip to content

Commit

Permalink
Use clock_gettime with CLOCK_MONOTONIC if available
Browse files Browse the repository at this point in the history
  • Loading branch information
desbma committed Feb 22, 2016
1 parent 27d4db2 commit 1170563
Show file tree
Hide file tree
Showing 6 changed files with 248 additions and 43 deletions.
48 changes: 41 additions & 7 deletions pipe_lat.c
Expand Up @@ -32,6 +32,11 @@
#include <sys/socket.h>
#include <time.h>
#include <stdint.h>
#include <unistd.h>

#if defined(_POSIX_TIMERS) && (_POSIX_TIMERS > 0) && defined(_POSIX_MONOTONIC_CLOCK)
#define HAS_CLOCK_GETTIME_MONOTONIC
#endif


int main(int argc, char *argv[])
Expand All @@ -42,7 +47,11 @@ int main(int argc, char *argv[])
int size;
char *buf;
int64_t count, i, delta;
#ifdef HAS_CLOCK_GETTIME_MONOTONIC
struct timespec start, stop;
#else
struct timeval start, stop;
#endif

if (argc != 3) {
printf ("usage: pipe_lat <message-size> <roundtrip-count>\n");
Expand Down Expand Up @@ -85,8 +94,18 @@ int main(int argc, char *argv[])
}
}
} else { /* parent */

gettimeofday(&start, NULL);

#ifdef HAS_CLOCK_GETTIME_MONOTONIC
if (clock_gettime(CLOCK_MONOTONIC, &start) == -1) {
perror("clock_gettime");
return 1;
}
#else
if (gettimeofday(&start, NULL) == -1) {
perror("gettimeofday");
return 1;
}
#endif

for (i = 0; i < count; i++) {

Expand All @@ -99,14 +118,29 @@ int main(int argc, char *argv[])
perror("read");
return 1;
}

}

gettimeofday(&stop, NULL);
#ifdef HAS_CLOCK_GETTIME_MONOTONIC
if (clock_gettime(CLOCK_MONOTONIC, &stop) == -1) {
perror("clock_gettime");
return 1;
}

delta = ((stop.tv_sec - start.tv_sec) * 1000000 +
(stop.tv_nsec - start.tv_nsec) / 1000);

#else
if (gettimeofday(&stop, NULL) == -1) {
perror("gettimeofday");
return 1;
}

delta = (stop.tv_sec - start.tv_sec) * 1000000 +
(stop.tv_usec - start.tv_usec);

#endif

delta = ((stop.tv_sec - start.tv_sec) * (int64_t) 1000000 +
stop.tv_usec - start.tv_usec);

printf("average latency: %lli us\n", delta / (count * 2));

}
Expand Down
46 changes: 40 additions & 6 deletions pipe_thr.c
Expand Up @@ -32,6 +32,11 @@
#include <sys/socket.h>
#include <time.h>
#include <stdint.h>
#include <unistd.h>

#if defined(_POSIX_TIMERS) && (_POSIX_TIMERS > 0) && defined(_POSIX_MONOTONIC_CLOCK)
#define HAS_CLOCK_GETTIME_MONOTONIC
#endif


int main(int argc, char *argv[])
Expand All @@ -41,7 +46,11 @@ int main(int argc, char *argv[])
int size;
char *buf;
int64_t count, i, delta;
#ifdef HAS_CLOCK_GETTIME_MONOTONIC
struct timespec start, stop;
#else
struct timeval start, stop;
#endif

if (argc != 3) {
printf ("usage: pipe_thr <message-size> <message-count>\n");
Expand Down Expand Up @@ -77,7 +86,17 @@ int main(int argc, char *argv[])
} else {
/* parent */

gettimeofday(&start, NULL);
#ifdef HAS_CLOCK_GETTIME_MONOTONIC
if (clock_gettime(CLOCK_MONOTONIC, &start) == -1) {
perror("clock_gettime");
return 1;
}
#else
if (gettimeofday(&start, NULL) == -1) {
perror("gettimeofday");
return 1;
}
#endif

for (i = 0; i < count; i++) {
if (write(fds[1], buf, size) != size) {
Expand All @@ -86,13 +105,28 @@ int main(int argc, char *argv[])
}
}

gettimeofday(&stop, NULL);
#ifdef HAS_CLOCK_GETTIME_MONOTONIC
if (clock_gettime(CLOCK_MONOTONIC, &stop) == -1) {
perror("clock_gettime");
return 1;
}

delta = ((stop.tv_sec - start.tv_sec) * 1000000 +
(stop.tv_nsec - start.tv_nsec) / 1000);

#else
if (gettimeofday(&stop, NULL) == -1) {
perror("gettimeofday");
return 1;
}

delta = (stop.tv_sec - start.tv_sec) * 1000000 +
(stop.tv_usec - start.tv_usec);

delta = ((stop.tv_sec - start.tv_sec) * (int64_t) 1e6 +
stop.tv_usec - start.tv_usec);
#endif

printf("average throughput: %lli msg/s\n", (count * (int64_t) 1e6) / delta);
printf("average throughput: %lli Mb/s\n", (((count * (int64_t) 1e6) / delta) * size * 8) / (int64_t) 1e6);
printf("average throughput: %lli msg/s\n", (count * 1000000) / delta);
printf("average throughput: %lli Mb/s\n", (((count * 1000000) / delta) * size * 8) / 1000000);
}

return 0;
Expand Down
46 changes: 40 additions & 6 deletions tcp_lat.c
Expand Up @@ -34,14 +34,23 @@
#include <time.h>
#include <stdint.h>
#include <netdb.h>
#include <unistd.h>

#if defined(_POSIX_TIMERS) && (_POSIX_TIMERS > 0) && defined(_POSIX_MONOTONIC_CLOCK)
#define HAS_CLOCK_GETTIME_MONOTONIC
#endif


int main(int argc, char *argv[])
{
int size;
char *buf;
int64_t count, i, delta;
#ifdef HAS_CLOCK_GETTIME_MONOTONIC
struct timespec start, stop;
#else
struct timeval start, stop;
#endif

ssize_t len;
size_t sofar;
Expand Down Expand Up @@ -139,7 +148,17 @@ int main(int argc, char *argv[])
return 1;
}

gettimeofday(&start, NULL);
#ifdef HAS_CLOCK_GETTIME_MONOTONIC
if (clock_gettime(CLOCK_MONOTONIC, &start) == -1) {
perror("clock_gettime");
return 1;
}
#else
if (gettimeofday(&start, NULL) == -1) {
perror("gettimeofday");
return 1;
}
#endif

for (i = 0; i < count; i++) {

Expand All @@ -156,14 +175,29 @@ int main(int argc, char *argv[])
}
sofar += len;
}


}

#ifdef HAS_CLOCK_GETTIME_MONOTONIC
if (clock_gettime(CLOCK_MONOTONIC, &stop) == -1) {
perror("clock_gettime");
return 1;
}

gettimeofday(&stop, NULL);
delta = ((stop.tv_sec - start.tv_sec) * 1000000 +
(stop.tv_nsec - start.tv_nsec) / 1000);

#else
if (gettimeofday(&stop, NULL) == -1) {
perror("gettimeofday");
return 1;
}

delta = (stop.tv_sec - start.tv_sec) * 1000000 +
(stop.tv_usec - start.tv_usec);

#endif

delta = ((stop.tv_sec - start.tv_sec) * (int64_t) 1e6 +
stop.tv_usec - start.tv_usec);

printf("average latency: %lli us\n", delta / (count * 2));

}
Expand Down
53 changes: 44 additions & 9 deletions tcp_thr.c
Expand Up @@ -35,14 +35,24 @@
#include <stdint.h>
#include <netdb.h>
#include <netinet/tcp.h>
#include <unistd.h>

#if defined(_POSIX_TIMERS) && (_POSIX_TIMERS > 0) && defined(_POSIX_MONOTONIC_CLOCK)
#define HAS_CLOCK_GETTIME_MONOTONIC
#endif



int main(int argc, char *argv[])
{
int size;
char *buf;
int64_t count, i, delta;
#ifdef HAS_CLOCK_GETTIME_MONOTONIC
struct timespec start, stop;
#else
struct timeval start, stop;
#endif

ssize_t len;
size_t sofar;
Expand Down Expand Up @@ -138,8 +148,18 @@ int main(int argc, char *argv[])
perror("setsockopt");
return 1;
}

gettimeofday(&start, NULL);

#ifdef HAS_CLOCK_GETTIME_MONOTONIC
if (clock_gettime(CLOCK_MONOTONIC, &start) == -1) {
perror("clock_gettime");
return 1;
}
#else
if (gettimeofday(&start, NULL) == -1) {
perror("gettimeofday");
return 1;
}
#endif

for (i = 0; i < count; i++) {
if (write(sockfd, buf, size) != size) {
Expand All @@ -148,13 +168,28 @@ int main(int argc, char *argv[])
}
}

gettimeofday(&stop, NULL);

delta = ((stop.tv_sec - start.tv_sec) * (int64_t) 1e6 +
stop.tv_usec - start.tv_usec);

printf("average throughput: %lli msg/s\n", (count * (int64_t) 1e6) / delta);
printf("average throughput: %lli Mb/s\n", (((count * (int64_t) 1e6) / delta) * size * 8) / (int64_t) 1e6);
#ifdef HAS_CLOCK_GETTIME_MONOTONIC
if (clock_gettime(CLOCK_MONOTONIC, &stop) == -1) {
perror("clock_gettime");
return 1;
}

delta = ((stop.tv_sec - start.tv_sec) * 1000000 +
(stop.tv_nsec - start.tv_nsec) / 1000);

#else
if (gettimeofday(&stop, NULL) == -1) {
perror("gettimeofday");
return 1;
}

delta = (stop.tv_sec - start.tv_sec) * 1000000 +
(stop.tv_usec - start.tv_usec);

#endif

printf("average throughput: %lli msg/s\n", (count * 1000000) / delta);
printf("average throughput: %lli Mb/s\n", (((count * 1000000) / delta) * size * 8) / 1000000);
}

return 0;
Expand Down
46 changes: 40 additions & 6 deletions unix_lat.c
Expand Up @@ -32,6 +32,11 @@
#include <sys/socket.h>
#include <time.h>
#include <stdint.h>
#include <unistd.h>

#if defined(_POSIX_TIMERS) && (_POSIX_TIMERS > 0) && defined(_POSIX_MONOTONIC_CLOCK)
#define HAS_CLOCK_GETTIME_MONOTONIC
#endif


int main(int argc, char *argv[])
Expand All @@ -40,7 +45,11 @@ int main(int argc, char *argv[])
int size;
char *buf;
int64_t count, i, delta;
#ifdef HAS_CLOCK_GETTIME_MONOTONIC
struct timespec start, stop;
#else
struct timeval start, stop;
#endif

if (argc != 3) {
printf ("usage: unix_lat <message-size> <roundtrip-count>\n");
Expand Down Expand Up @@ -79,7 +88,17 @@ int main(int argc, char *argv[])
}
} else { /* parent */

gettimeofday(&start, NULL);
#ifdef HAS_CLOCK_GETTIME_MONOTONIC
if (clock_gettime(CLOCK_MONOTONIC, &start) == -1) {
perror("clock_gettime");
return 1;
}
#else
if (gettimeofday(&start, NULL) == -1) {
perror("gettimeofday");
return 1;
}
#endif

for (i = 0; i < count; i++) {

Expand All @@ -92,14 +111,29 @@ int main(int argc, char *argv[])
perror("read");
return 1;
}


}

#ifdef HAS_CLOCK_GETTIME_MONOTONIC
if (clock_gettime(CLOCK_MONOTONIC, &stop) == -1) {
perror("clock_gettime");
return 1;
}

gettimeofday(&stop, NULL);
delta = ((stop.tv_sec - start.tv_sec) * 1000000 +
(stop.tv_nsec - start.tv_nsec) / 1000);

#else
if (gettimeofday(&stop, NULL) == -1) {
perror("gettimeofday");
return 1;
}

delta = (stop.tv_sec - start.tv_sec) * 1000000 +
(stop.tv_usec - start.tv_usec);

#endif

delta = ((stop.tv_sec - start.tv_sec) * (int64_t) 1e6 +
stop.tv_usec - start.tv_usec);

printf("average latency: %lli us\n", delta / (count * 2));

}
Expand Down

0 comments on commit 1170563

Please sign in to comment.