Skip to content

Commit 72ac464

Browse files
brianrobvancem
authored andcommitted
Log Events to EventPipe on Linux (dotnet#11433)
* Implement the EventPipe object model for providers and events. * Plumb Runtime Events into EventPipe (dotnet#11145) Plumb runtime ETW events into the EventPipe. * Fix bug where all events except for SampleProfiler events were never enabled. * Plumb EventPipeEventInstance through the EventPipe. * Implement EventPipeFile and FastSerializer. * Write event contents to the EventPipeFile. * Only build EventPipe on Linux. * Conditionally add a sentinel value marking event end. * Send SampleProfiler events to the EventPipeFile. * Fix provider ID printing to JSON file. * Write the start date/time, timestamp, and clock frequency into the trace file. * Support unloading of EventPipeProviders. * Handle failure cases when we can't walk the stack or are shutting down. * Fix a bug where we pass a null src pointer to memcpy.
1 parent 3ababc2 commit 72ac464

27 files changed

+2603
-85
lines changed

build.sh

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -154,15 +154,27 @@ generate_event_logging_sources()
154154
# Event Logging Infrastructure
155155
__GeneratedIntermediate="$__IntermediatesDir/Generated"
156156
__GeneratedIntermediateEventProvider="$__GeneratedIntermediate/eventprovider_new"
157+
__GeneratedIntermediateEventPipe="$__GeneratedIntermediate/eventpipe_new"
158+
157159
if [[ -d "$__GeneratedIntermediateEventProvider" ]]; then
158160
rm -rf "$__GeneratedIntermediateEventProvider"
159161
fi
160162

163+
if [[ -d "$__GeneratedIntermediateEventPipe" ]]; then
164+
rm -rf "$__GeneratedIntermediateEventPipe"
165+
fi
166+
161167
if [[ ! -d "$__GeneratedIntermediate/eventprovider" ]]; then
162168
mkdir -p "$__GeneratedIntermediate/eventprovider"
163169
fi
164170

171+
if [[ ! -d "$__GeneratedIntermediate/eventpipe" ]]; then
172+
mkdir -p "$__GeneratedIntermediate/eventpipe"
173+
fi
174+
165175
mkdir -p "$__GeneratedIntermediateEventProvider"
176+
mkdir -p "$__GeneratedIntermediateEventPipe"
177+
166178
if [[ $__SkipCoreCLR == 0 || $__ConfigureOnly == 1 ]]; then
167179
echo "Laying out dynamically generated files consumed by the build system "
168180
echo "Laying out dynamically generated Event Logging Test files"
@@ -172,6 +184,18 @@ generate_event_logging_sources()
172184
exit
173185
fi
174186

187+
case $__BuildOS in
188+
Linux)
189+
echo "Laying out dynamically generated EventPipe Implementation"
190+
$PYTHON -B -Wall -Werror "$__ProjectRoot/src/scripts/genEventPipe.py" --man "$__ProjectRoot/src/vm/ClrEtwAll.man" --intermediate "$__GeneratedIntermediateEventPipe" --exc "$__ProjectRoot/src/vm/ClrEtwAllMeta.lst"
191+
if [[ $? != 0 ]]; then
192+
exit
193+
fi
194+
;;
195+
*)
196+
;;
197+
esac
198+
175199
#determine the logging system
176200
case $__BuildOS in
177201
Linux)
@@ -193,6 +217,14 @@ generate_event_logging_sources()
193217
fi
194218

195219
rm -rf "$__GeneratedIntermediateEventProvider"
220+
221+
echo "Cleaning the temp folder of dynamically generated EventPipe files"
222+
$PYTHON -B -Wall -Werror -c "import sys;sys.path.insert(0,\"$__ProjectRoot/src/scripts\"); from Utilities import *;UpdateDirectory(\"$__GeneratedIntermediate/eventpipe\",\"$__GeneratedIntermediateEventPipe\")"
223+
if [[ $? != 0 ]]; then
224+
exit
225+
fi
226+
227+
rm -rf "$__GeneratedIntermediateEventPipe"
196228
}
197229

198230
build_native()

clrdefinitions.cmake

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,9 @@ endif(FEATURE_DBGIPC)
111111
if(FEATURE_EVENT_TRACE)
112112
add_definitions(-DFEATURE_EVENT_TRACE=1)
113113
endif(FEATURE_EVENT_TRACE)
114-
add_definitions(-DFEATURE_PERFTRACING)
114+
if(CLR_CMAKE_PLATFORM_LINUX)
115+
add_definitions(-DFEATURE_PERFTRACING)
116+
endif(CLR_CMAKE_PLATFORM_LINUX)
115117
if(CLR_CMAKE_PLATFORM_UNIX)
116118
add_definitions(-DFEATURE_EVENTSOURCE_XPLAT=1)
117119
endif(CLR_CMAKE_PLATFORM_UNIX)

src/dlls/mscoree/coreclr/CMakeLists.txt

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -141,6 +141,12 @@ if(CLR_CMAKE_PLATFORM_UNIX AND FEATURE_EVENT_TRACE)
141141
)
142142
endif(CLR_CMAKE_PLATFORM_UNIX AND FEATURE_EVENT_TRACE)
143143

144+
if(CLR_CMAKE_PLATFORM_LINUX)
145+
list(APPEND CORECLR_LIBRARIES
146+
eventpipe
147+
)
148+
endif(CLR_CMAKE_PLATFORM_LINUX)
149+
144150
target_link_libraries(coreclr ${CORECLR_LIBRARIES})
145151

146152
if(WIN32)

0 commit comments

Comments
 (0)