Add high-resolution timekeeping functions (primarily for benchmarking).
authorMichael Vrable <mvrable@cs.ucsd.edu>
Tue, 27 Oct 2009 19:29:28 +0000 (12:29 -0700)
committerMichael Vrable <mvrable@cs.ucsd.edu>
Tue, 27 Oct 2009 19:29:28 +0000 (12:29 -0700)
bluesky/bluesky.h
bluesky/file.c
bluesky/util.c

index f37a537..e141dd3 100644 (file)
@@ -104,6 +104,10 @@ typedef struct {
 /* Timestamp, measured in microseconds since the Unix epoch. */
 typedef int64_t bluesky_time;
 
+/* High-resolution timer, measured in nanoseconds. */
+typedef int64_t bluesky_time_hires;
+bluesky_time_hires bluesky_now_hires();
+
 /* In-memory representation of an inode within a Blue Sky server.  This
  * corresponds roughly with information that is committed to persistent
  * storage.  Locking/refcounting rules:
index 5f7d9cd..14de372 100644 (file)
@@ -87,6 +87,7 @@ void bluesky_file_truncate(BlueSkyInode *inode, uint64_t size)
 void bluesky_file_write(BlueSkyInode *inode, uint64_t offset,
                         const char *data, gint len)
 {
+    g_print("Start write: %ld\n", bluesky_now_hires());
     g_return_if_fail(inode->type == BLUESKY_REGULAR);
     g_return_if_fail(offset < inode->size);
     g_return_if_fail(len <= inode->size - offset);
@@ -112,6 +113,7 @@ void bluesky_file_write(BlueSkyInode *inode, uint64_t offset,
 
     bluesky_inode_update_ctime(inode, 1);
     bluesky_inode_flush(inode->fs, inode);
+    g_print("End write: %ld\n", bluesky_now_hires());
 }
 
 void bluesky_file_read(BlueSkyInode *inode, uint64_t offset,
index 85f6a70..6a36169 100644 (file)
 
 /* Miscellaneous useful functions that don't really fit anywhere else. */
 
+bluesky_time_hires bluesky_now_hires()
+{
+    struct timespec time;
+
+    if (clock_gettime(CLOCK_REALTIME, &time) != 0) {
+        perror("clock_gettime");
+        return 0;
+    }
+
+    return (int64_t)(time.tv_sec) * 1000000000 + time.tv_nsec;
+}
 
 /* Convert a UTF-8 string to lowercase.  This can be used to implement
  * case-insensitive lookups and comparisons, by normalizing all values to