diff --git a/utils/netty/src/main/java/org/onlab/netty/SimpleClient.java b/utils/netty/src/main/java/org/onlab/netty/SimpleClient.java
index 1573780..7020e31 100644
--- a/utils/netty/src/main/java/org/onlab/netty/SimpleClient.java
+++ b/utils/netty/src/main/java/org/onlab/netty/SimpleClient.java
@@ -2,16 +2,43 @@
 
 import java.util.concurrent.TimeUnit;
 
+import org.onlab.metrics.MetricsComponent;
+import org.onlab.metrics.MetricsFeature;
+import org.onlab.metrics.MetricsManager;
+
+import com.codahale.metrics.Timer;
+
 public final class SimpleClient {
     private SimpleClient() {}
 
     public static void main(String... args) throws Exception {
         NettyMessagingService messaging = new TestNettyMessagingService(9081);
+        MetricsManager metrics = new MetricsManager();
         messaging.activate();
+        metrics.activate();
+        MetricsFeature feature = new MetricsFeature("timers");
+        MetricsComponent component = metrics.registerComponent("NettyMessaging");
+        Timer sendAsyncTimer = metrics.createTimer(component, feature, "AsyncSender");
+        final int warmup = 100;
+        for (int i = 0; i < warmup; i++) {
+            Timer.Context context = sendAsyncTimer.time();
+            messaging.sendAsync(new Endpoint("localhost", 8080), "simple", "Hello World");
+            context.stop();
+        }
+        metrics.registerMetric(component, feature, "AsyncTimer", sendAsyncTimer);
 
-        messaging.sendAsync(new Endpoint("localhost", 8080), "simple", "Hello World");
-        Response<String> response = messaging.sendAndReceive(new Endpoint("localhost", 8080), "echo", "Hello World");
-        System.out.println("Got back:" + response.get(2, TimeUnit.SECONDS));
+        Timer sendAndRecieveTimer = metrics.createTimer(component, feature, "SendAndReceive");
+        final int iterations = 1000000;
+        for (int i=0; i < iterations; i++) {
+            Timer.Context context = sendAndRecieveTimer.time();
+            Response<String> response = messaging
+                    .sendAndReceive(new Endpoint("localhost", 8080), "echo",
+                            "Hello World");
+            System.out.println("Got back:" + response.get(2, TimeUnit.SECONDS));
+            context.stop();
+        }
+        metrics.registerMetric(component, feature, "AsyncTimer", sendAndRecieveTimer);
+
     }
 
     public static class TestNettyMessagingService extends NettyMessagingService {
