[compiler-rt] r337443 - [XRay][compiler-rt] Profiling: No files when empty

Dean Michael Berris via llvm-commits llvm-commits at lists.llvm.org
Thu Jul 19 02:20:20 PDT 2018


Author: dberris
Date: Thu Jul 19 02:20:19 2018
New Revision: 337443

URL: http://llvm.org/viewvc/llvm-project?rev=337443&view=rev
Log:
[XRay][compiler-rt] Profiling: No files when empty

This change makes it so that the profiling mode implementation will only
write files when there are buffers to write. Before this change, we'd
always open a file even if there were no profiles collected when
flushing.

Modified:
    compiler-rt/trunk/lib/xray/xray_profiling.cc
    compiler-rt/trunk/test/xray/TestCases/Posix/profiling-multi-threaded.cc
    compiler-rt/trunk/test/xray/TestCases/Posix/profiling-single-threaded.cc

Modified: compiler-rt/trunk/lib/xray/xray_profiling.cc
URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/xray/xray_profiling.cc?rev=337443&r1=337442&r2=337443&view=diff
==============================================================================
--- compiler-rt/trunk/lib/xray/xray_profiling.cc (original)
+++ compiler-rt/trunk/lib/xray/xray_profiling.cc Thu Jul 19 02:20:19 2018
@@ -132,31 +132,35 @@ XRayLogFlushStatus profilingFlush() XRAY
   // At this point, we'll create the file that will contain the profile, but
   // only if the options say so.
   if (!profilingFlags()->no_flush) {
-    int Fd = -1;
-    Fd = getLogFD();
-    if (Fd == -1) {
-      if (__sanitizer::Verbosity())
-        Report(
-            "profiler: Failed to acquire a file descriptor, dropping data.\n");
+    // First check whether we have data in the profile collector service
+    // before we try and write anything down.
+    XRayBuffer B = profileCollectorService::nextBuffer({nullptr, 0});
+    if (B.Data == nullptr) {
+      if (Verbosity())
+        Report("profiling: No data to flush.\n");
     } else {
-      XRayProfilingFileHeader Header;
-      Header.Timestamp = NanoTime();
-      Header.PID = internal_getpid();
-      retryingWriteAll(Fd, reinterpret_cast<const char *>(&Header),
-                       reinterpret_cast<const char *>(&Header) +
-                           sizeof(Header));
+      int Fd = getLogFD();
+      if (Fd == -1) {
+        if (Verbosity())
+          Report("profiling: Failed to flush to file, dropping data.\n");
+      } else {
+        XRayProfilingFileHeader Header;
+        Header.Timestamp = NanoTime();
+        Header.PID = internal_getpid();
+        retryingWriteAll(Fd, reinterpret_cast<const char *>(&Header),
+                         reinterpret_cast<const char *>(&Header) +
+                             sizeof(Header));
 
-      // Now for each of the threads, write out the profile data as we would see
-      // it in memory, verbatim.
-      XRayBuffer B = profileCollectorService::nextBuffer({nullptr, 0});
-      while (B.Data != nullptr && B.Size != 0) {
-        retryingWriteAll(Fd, reinterpret_cast<const char *>(B.Data),
-                         reinterpret_cast<const char *>(B.Data) + B.Size);
-        B = profileCollectorService::nextBuffer(B);
+        // Now for each of the threads, write out the profile data as we would
+        // see it in memory, verbatim.
+        while (B.Data != nullptr && B.Size != 0) {
+          retryingWriteAll(Fd, reinterpret_cast<const char *>(B.Data),
+                           reinterpret_cast<const char *>(B.Data) + B.Size);
+          B = profileCollectorService::nextBuffer(B);
+        }
+        // Then we close out the file.
+        internal_close(Fd);
       }
-
-      // Then we close out the file.
-      internal_close(Fd);
     }
   }
 

Modified: compiler-rt/trunk/test/xray/TestCases/Posix/profiling-multi-threaded.cc
URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/test/xray/TestCases/Posix/profiling-multi-threaded.cc?rev=337443&r1=337442&r2=337443&view=diff
==============================================================================
--- compiler-rt/trunk/test/xray/TestCases/Posix/profiling-multi-threaded.cc (original)
+++ compiler-rt/trunk/test/xray/TestCases/Posix/profiling-multi-threaded.cc Thu Jul 19 02:20:19 2018
@@ -8,7 +8,7 @@
 // RUN:     XRAY_PROFILING_OPTIONS=no_flush=1 %run %t
 // RUN: XRAY_OPTIONS=verbosity=1 %run %t
 // RUN: PROFILES=`ls xray-log.profiling-multi-* | wc -l`
-// RUN: [ $PROFILES -ge 1 ]
+// RUN: [ $PROFILES -eq 1 ]
 // RUN: rm -f xray-log.profiling-multi-*
 //
 // REQUIRES: x86_64-target-arch

Modified: compiler-rt/trunk/test/xray/TestCases/Posix/profiling-single-threaded.cc
URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/test/xray/TestCases/Posix/profiling-single-threaded.cc?rev=337443&r1=337442&r2=337443&view=diff
==============================================================================
--- compiler-rt/trunk/test/xray/TestCases/Posix/profiling-single-threaded.cc (original)
+++ compiler-rt/trunk/test/xray/TestCases/Posix/profiling-single-threaded.cc Thu Jul 19 02:20:19 2018
@@ -8,7 +8,7 @@
 // RUN:     XRAY_PROFILING_OPTIONS=no_flush=true %run %t
 // RUN: XRAY_OPTIONS=verbosity=1 %run %t
 // RUN: PROFILES=`ls xray-log.profiling-single-* | wc -l`
-// RUN: [ $PROFILES -ge 2 ]
+// RUN: [ $PROFILES -eq 2 ]
 // RUN: rm -f xray-log.profiling-single-*
 //
 // REQUIRES: x86_64-target-arch




More information about the llvm-commits mailing list