Title: [245499] trunk
Revision
245499
Author
[email protected]
Date
2019-05-18 00:12:17 -0700 (Sat, 18 May 2019)

Log Message

Add extra information to dumpJITMemory
https://bugs.webkit.org/show_bug.cgi?id=197998

Reviewed by Saam Barati.

Source/_javascript_Core:

Add ktrace events around the memory dump and mach_absolute_time to link the
events with the entries in the dump. Additionally, add a background queue
to flush on a configurable interval, since the atexit callback does not work
in every situation.

* jit/ExecutableAllocator.cpp:
(JSC::dumpJITMemory):
* runtime/Options.h:

Source/WTF:

Add a new trace point code for JSC::dumpJITMemory

* wtf/SystemTracing.h:

Tools:

Add description for the new dumpJITMemory trace point code.

* Tracing/SystemTracePoints.plist:

Modified Paths

Diff

Modified: trunk/Source/_javascript_Core/ChangeLog (245498 => 245499)


--- trunk/Source/_javascript_Core/ChangeLog	2019-05-18 05:27:06 UTC (rev 245498)
+++ trunk/Source/_javascript_Core/ChangeLog	2019-05-18 07:12:17 UTC (rev 245499)
@@ -1,3 +1,19 @@
+2019-05-18  Tadeu Zagallo  <[email protected]>
+
+        Add extra information to dumpJITMemory
+        https://bugs.webkit.org/show_bug.cgi?id=197998
+
+        Reviewed by Saam Barati.
+
+        Add ktrace events around the memory dump and mach_absolute_time to link the
+        events with the entries in the dump. Additionally, add a background queue
+        to flush on a configurable interval, since the atexit callback does not work
+        in every situation.
+
+        * jit/ExecutableAllocator.cpp:
+        (JSC::dumpJITMemory):
+        * runtime/Options.h:
+
 2019-05-17  Justin Michaud  <[email protected]>
 
         [WASM-References] Add support for Anyref in parameters and return types, Ref.null and Ref.is_null for Anyref values.

Modified: trunk/Source/_javascript_Core/jit/ExecutableAllocator.cpp (245498 => 245499)


--- trunk/Source/_javascript_Core/jit/ExecutableAllocator.cpp	2019-05-18 05:27:06 UTC (rev 245498)
+++ trunk/Source/_javascript_Core/jit/ExecutableAllocator.cpp	2019-05-18 07:12:17 UTC (rev 245499)
@@ -33,8 +33,11 @@
 #include "JSCInlines.h"
 #include <wtf/MetaAllocator.h>
 #include <wtf/PageReservation.h>
+#include <wtf/SystemTracing.h>
+#include <wtf/WorkQueue.h>
 
 #if OS(DARWIN)
+#include <mach/mach_time.h>
 #include <sys/mman.h>
 #endif
 
@@ -559,7 +562,9 @@
     static uint8_t* buffer;
     static constexpr size_t bufferSize = fixedExecutableMemoryPoolSize;
     static size_t offset = 0;
-    static auto flush = [] {
+    static Lock dumpJITMemoryLock;
+    static bool needsToFlush = false;
+    static auto flush = [](const AbstractLocker&) {
         if (fd == -1) {
             fd = open(Options::dumpJITMemoryPath(), O_CREAT | O_TRUNC | O_APPEND | O_WRONLY | O_EXLOCK | O_NONBLOCK, 0666);
             RELEASE_ASSERT(fd != -1);
@@ -566,32 +571,52 @@
         }
         write(fd, buffer, offset);
         offset = 0;
+        needsToFlush = false;
     };
 
-    static Lock dumpJITMemoryLock;
     static std::once_flag once;
+    static LazyNeverDestroyed<Ref<WorkQueue>> flushQueue;
     std::call_once(once, [] {
         buffer = bitwise_cast<uint8_t*>(malloc(bufferSize));
+        flushQueue.construct(WorkQueue::create("jsc.dumpJITMemory.queue", WorkQueue::Type::Serial, WorkQueue::QOS::Background));
         std::atexit([] {
             LockHolder locker(dumpJITMemoryLock);
-            flush();
+            flush(locker);
             close(fd);
+            fd = -1;
         });
     });
 
-    static auto write = [](const void* src, size_t size) {
+    static auto enqueueFlush = [](const AbstractLocker&) {
+        if (needsToFlush)
+            return;
+
+        needsToFlush = true;
+        flushQueue.get()->dispatchAfter(Seconds(Options::dumpJITMemoryFlushInterval()), [] {
+            LockHolder locker(dumpJITMemoryLock);
+            if (!needsToFlush)
+                return;
+            flush(locker);
+        });
+    };
+
+    static auto write = [](const AbstractLocker& locker, const void* src, size_t size) {
         if (UNLIKELY(offset + size > bufferSize))
-            flush();
+            flush(locker);
         memcpy(buffer + offset, src, size);
         offset += size;
+        enqueueFlush(locker);
     };
 
     LockHolder locker(dumpJITMemoryLock);
+    uint64_t time = mach_absolute_time();
     uint64_t dst64 = bitwise_cast<uintptr_t>(dst);
-    write(&dst64, sizeof(dst64));
     uint64_t size64 = size;
-    write(&size64, sizeof(size64));
-    write(src, size);
+    TraceScope(DumpJITMemoryStart, DumpJITMemoryStop, time, dst64, size64);
+    write(locker, &time, sizeof(time));
+    write(locker, &dst64, sizeof(dst64));
+    write(locker, &size64, sizeof(size64));
+    write(locker, src, size);
 #else
     UNUSED_PARAM(dst);
     UNUSED_PARAM(src);

Modified: trunk/Source/_javascript_Core/runtime/Options.h (245498 => 245499)


--- trunk/Source/_javascript_Core/runtime/Options.h	2019-05-18 05:27:06 UTC (rev 245498)
+++ trunk/Source/_javascript_Core/runtime/Options.h	2019-05-18 07:12:17 UTC (rev 245499)
@@ -519,6 +519,7 @@
     v(bool, validateAbstractInterpreterState, false, Restricted, nullptr) \
     v(double, validateAbstractInterpreterStateProbability, 0.5, Normal, nullptr) \
     v(optionString, dumpJITMemoryPath, nullptr, Restricted, nullptr) \
+    v(double, dumpJITMemoryFlushInterval, 10, Restricted, "Maximum time in between flushes of the JIT memory dump in seconds.") \
 
 
 enum OptionEquivalence {

Modified: trunk/Source/WTF/ChangeLog (245498 => 245499)


--- trunk/Source/WTF/ChangeLog	2019-05-18 05:27:06 UTC (rev 245498)
+++ trunk/Source/WTF/ChangeLog	2019-05-18 07:12:17 UTC (rev 245499)
@@ -1,3 +1,14 @@
+2019-05-18  Tadeu Zagallo  <[email protected]>
+
+        Add extra information to dumpJITMemory
+        https://bugs.webkit.org/show_bug.cgi?id=197998
+
+        Reviewed by Saam Barati.
+
+        Add a new trace point code for JSC::dumpJITMemory
+
+        * wtf/SystemTracing.h:
+
 2019-05-17  Don Olmstead  <[email protected]>
 
         [CMake] Use builtin FindICU

Modified: trunk/Source/WTF/wtf/SystemTracing.h (245498 => 245499)


--- trunk/Source/WTF/wtf/SystemTracing.h	2019-05-18 05:27:06 UTC (rev 245498)
+++ trunk/Source/WTF/wtf/SystemTracing.h	2019-05-18 07:12:17 UTC (rev 245499)
@@ -47,6 +47,8 @@
     WebAssemblyCompileEnd,
     WebAssemblyExecuteStart,
     WebAssemblyExecuteEnd,
+    DumpJITMemoryStart,
+    DumpJITMemoryStop,
 
     WebCoreRange = 5000,
     MainResourceLoadDidStartProvisional,

Modified: trunk/Tools/ChangeLog (245498 => 245499)


--- trunk/Tools/ChangeLog	2019-05-18 05:27:06 UTC (rev 245498)
+++ trunk/Tools/ChangeLog	2019-05-18 07:12:17 UTC (rev 245499)
@@ -1,3 +1,14 @@
+2019-05-18  Tadeu Zagallo  <[email protected]>
+
+        Add extra information to dumpJITMemory
+        https://bugs.webkit.org/show_bug.cgi?id=197998
+
+        Reviewed by Saam Barati.
+
+        Add description for the new dumpJITMemory trace point code.
+
+        * Tracing/SystemTracePoints.plist:
+
 2019-05-17  Justin Michaud  <[email protected]>
 
         [WASM-References] Add support for Anyref in parameters and return types, Ref.null and Ref.is_null for Anyref values.

Modified: trunk/Tools/Tracing/SystemTracePoints.plist (245498 => 245499)


--- trunk/Tools/Tracing/SystemTracePoints.plist	2019-05-18 05:27:06 UTC (rev 245498)
+++ trunk/Tools/Tracing/SystemTracePoints.plist	2019-05-18 07:12:17 UTC (rev 245499)
@@ -45,6 +45,18 @@
              </dict>
              <dict>
                  <key>Name</key>
+                 <string>Dump JIT Memory</string>
+                 <key>Type</key>
+                 <string>Interval</string>
+                 <key>Component</key>
+                 <string>47</string>
+                 <key>CodeBegin</key>
+                 <string>2507</string>
+                 <key>CodeEnd</key>
+                 <string>2508</string>
+             </dict>
+             <dict>
+                 <key>Name</key>
                  <string>Main Resource Load</string>
                  <key>Type</key>
                  <string>Interval</string>
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to