diff --git a/src/dhtrunner.cpp b/src/dhtrunner.cpp
index 6084f1d52c1ab3f5e795857a97e0fade1e944a9b..825dca1c9aa8204bbbe2b23ed5695e2dedf2fe6e 100644
--- a/src/dhtrunner.cpp
+++ b/src/dhtrunner.cpp
@@ -410,15 +410,25 @@ DhtRunner::loop_()
         received = std::move(rcv);
     }
     if (not received.empty()) {
+        size_t packet_num = received.size();
+        auto start = clock::now();
         while (not received.empty()) {
             auto& pck = received.front();
-            auto delay = clock::now() - pck.received;
+            auto now = clock::now();
+            auto delay = now - pck.received;
             if (delay > std::chrono::seconds(1))
                 std::cerr << "Dropping packet with high delay: " << print_dt(delay) << std::endl;
-            else
+            else {
                 wakeup = dht->periodic(pck.data.data(), pck.data.size()-1, pck.from);
+                auto end = clock::now();
+                std::cerr << "periodic took " << print_dt(end - now)*1000 << std::endl;
+            }
             received.pop();
         }
+        if (packet_num > 1) {
+            auto time_all = print_dt(clock::now() - start);
+            std::cerr << "Treating " << packet_num << " packets took " << time_all << " - " << (packet_num/time_all) << " packets/sec" << std::endl;
+        }
     } else {
         wakeup = dht->periodic(nullptr, 0, nullptr, 0);
     }