diff --git a/test/cpp/interop/interop_client.cc b/test/cpp/interop/interop_client.cc
index 49ecf2620e288904b8bb4b8069c62d9edb251f78..f323090ebf066b6f489e6db98051eb5ebfc1eae0 100644
--- a/test/cpp/interop/interop_client.cc
+++ b/test/cpp/interop/interop_client.cc
@@ -849,7 +849,7 @@ bool InteropClient::DoCacheableUnary() {
   gpr_log(GPR_DEBUG, "Sending RPC with cacheable response");
 
   // Create request with current timestamp
-  gpr_timespec ts = gpr_now(GPR_CLOCK_REALTIME);
+  gpr_timespec ts = gpr_now(GPR_CLOCK_PRECISE);
   std::string timestamp = std::to_string(ts.tv_nsec);
   SimpleRequest request;
   request.mutable_payload()->set_body(timestamp.c_str(), timestamp.size());
diff --git a/test/cpp/interop/interop_server.cc b/test/cpp/interop/interop_server.cc
index 06d1bdb7965e1b7a612b58146c58e2803db54a5f..e5e62dfc1ae5b37877d8dea573a1e5c3e83a6c76 100644
--- a/test/cpp/interop/interop_server.cc
+++ b/test/cpp/interop/interop_server.cc
@@ -156,7 +156,7 @@ class TestServiceImpl : public TestService::Service {
   // Response contains current timestamp. We ignore everything in the request.
   Status CacheableUnaryCall(ServerContext* context, const SimpleRequest* request,
                    SimpleResponse* response) {
-    gpr_timespec ts = gpr_now(GPR_CLOCK_REALTIME);
+    gpr_timespec ts = gpr_now(GPR_CLOCK_PRECISE);
     std::string timestamp = std::to_string(ts.tv_nsec);
     response->mutable_payload()->set_body(timestamp.c_str(), timestamp.size());
     context->AddInitialMetadata("cache-control", "max-age=60, public");