ladybird/Kernel
Andreas Kling 5dafb72370 Kernel+Profiler: Make profiling per-process and without core dumps
This patch merges the profiling functionality in the kernel with the
performance events mechanism. A profiler sample is now just another
perf event, rather than a dedicated thing.

Since perf events were already per-process, this now makes profiling
per-process as well.

Processes with perf events would already write out a perfcore.PID file
to the current directory on death, but since we may want to profile
a process and then let it continue running, recorded perf events can
now be accessed at any time via /proc/PID/perf_events.

This patch also adds information about process memory regions to the
perfcore JSON format. This removes the need to supply a core dump to
the Profiler app for symbolication, and so the "profiler coredump"
mechanism is removed entirely.

There's still a hard limit of 4MB worth of perf events per process,
so this is by no means a perfect final design, but it's a nice step
forward for both simplicity and stability.

Fixes #4848
Fixes #4849
2021-01-11 11:36:00 +01:00
..
ACPI Everywhere: Replace a bundle of dbg with dbgln. 2021-01-09 21:11:09 +01:00
API Syscall: Changed 'setkeymap' to take also the Shift+AltGr map. 2021-01-06 09:32:08 +01:00
Arch Everywhere: Replace a bundle of dbg with dbgln. 2021-01-09 21:11:09 +01:00
Devices Everywhere: Replace a bundle of dbg with dbgln. 2021-01-09 21:11:09 +01:00
FileSystem Kernel+Profiler: Make profiling per-process and without core dumps 2021-01-11 11:36:00 +01:00
Heap Kernel: Specify default memory order for some non-synchronizing Atomics 2021-01-04 19:13:52 +01:00
Interrupts Everywhere: Replace a bundle of dbg with dbgln. 2021-01-09 21:11:09 +01:00
Modules Kernel: Module symbol declarations for type-checking 2020-08-12 20:40:59 +02:00
Net Everywhere: Replace a bundle of dbg with dbgln. 2021-01-09 21:11:09 +01:00
PCI Everywhere: Replace a bundle of dbg with dbgln. 2021-01-09 21:11:09 +01:00
Storage Everywhere: Replace a bundle of dbg with dbgln. 2021-01-09 21:11:09 +01:00
Syscalls Kernel+Profiler: Make profiling per-process and without core dumps 2021-01-11 11:36:00 +01:00
Tasks Everywhere: Replace a bundle of dbg with dbgln. 2021-01-09 21:11:09 +01:00
Time Everywhere: Replace a bundle of dbg with dbgln. 2021-01-09 21:11:09 +01:00
TTY Kernel: Defer handling of key press events in VirtualConsole 2021-01-10 21:50:08 +01:00
VM Everywhere: Replace a bundle of dbg with dbgln. 2021-01-09 21:11:09 +01:00
.gitignore Meta: Removed all gitignore in the source tree only keeping the root one 2019-06-30 10:41:26 +02:00
Assertions.h Everywhere: Switch from (void) to [[maybe_unused]] (#4473) 2020-12-21 00:09:48 +01:00
CMakeLists.txt Kernel+Profiler: Make profiling per-process and without core dumps 2021-01-11 11:36:00 +01:00
CMOS.cpp Kernel: Absorb LibBareMetal back into the kernel 2020-05-16 12:00:04 +02:00
CMOS.h Meta: Add license header to source files 2020-01-18 09:45:54 +01:00
CommandLine.cpp Meta+Kernel: Make clang-format-10 clean 2020-09-25 21:18:17 +02:00
CommandLine.h Kernel: Copy command line to a safe place 2020-08-25 09:48:48 +02:00
Console.cpp Meta+Kernel: Make clang-format-10 clean 2020-09-25 21:18:17 +02:00
Console.h Kernel: Add a method to determine the desired permissions of a Device 2020-12-27 23:07:44 +01:00
CoreDump.cpp Kernel+SystemServer+CrashDaemon: Better control where we put core dumps 2021-01-10 11:38:28 +01:00
CoreDump.h Kernel: Embed a Metadata notes entry in coredumps 2020-12-30 16:28:27 +01:00
DoubleBuffer.cpp Kernel: Merge PurgeableVMObject into AnonymousVMObject 2021-01-01 23:43:44 +01:00
DoubleBuffer.h Kernel: Move block condition evaluation out of the Scheduler 2020-11-30 13:17:02 +01:00
Forward.h Kernel: Generate a coredump file when a process crashes 2020-12-14 23:05:53 +01:00
init.cpp Everywhere: Replace a bundle of dbg with dbgln. 2021-01-09 21:11:09 +01:00
IO.h Everywhere: Replace a bundle of dbg with dbgln. 2021-01-09 21:11:09 +01:00
KBuffer.h Kernel: Improve ProcFS behavior in low memory conditions 2021-01-03 22:12:19 +01:00
KBufferBuilder.cpp Kernel: Improve ProcFS behavior in low memory conditions 2021-01-03 22:12:19 +01:00
KBufferBuilder.h Kernel: Improve ProcFS behavior in low memory conditions 2021-01-03 22:12:19 +01:00
kprintf.cpp Everywhere: Replace a bundle of dbg with dbgln. 2021-01-09 21:11:09 +01:00
KResult.h Everywhere: Re-format with clang-format-11 2020-12-31 21:51:00 +01:00
kstdio.h LibC: Enable compiler warnings for printf format strings 2020-12-26 10:05:50 +01:00
KSyms.cpp Everywhere: Replace a bundle of dbg with dbgln. 2021-01-09 21:11:09 +01:00
KSyms.h Kernel: Update cryptically-named functions related to symbolication 2020-04-08 17:19:46 +02:00
linker.ld Kernel: Invoke heap constructors separately early on 2020-08-10 20:05:18 +02:00
Lock.cpp Kernel: Specify default memory order for some non-synchronizing Atomics 2021-01-04 19:13:52 +01:00
Lock.h Kernel: Specify default memory order for some non-synchronizing Atomics 2021-01-04 19:13:52 +01:00
LockMode.h Kernel: Fix Lock race causing infinite spinning between two threads 2020-12-16 23:38:17 +01:00
mkmap.sh Build: Switch to CMake :^) 2020-05-14 20:15:18 +02:00
Module.h Kernel: Move all code into the Kernel namespace 2020-02-16 01:27:42 +01:00
Multiboot.h Meta: Add license header to source files 2020-01-18 09:45:54 +01:00
PerformanceEventBuffer.cpp Kernel+Profiler: Make profiling per-process and without core dumps 2021-01-11 11:36:00 +01:00
PerformanceEventBuffer.h Kernel+Profiler: Make profiling per-process and without core dumps 2021-01-11 11:36:00 +01:00
PhysicalAddress.h Everywhere: Replace a bundle of dbg with dbgln. 2021-01-09 21:11:09 +01:00
Process.cpp Kernel+Profiler: Make profiling per-process and without core dumps 2021-01-11 11:36:00 +01:00
Process.h Kernel+Profiler: Make profiling per-process and without core dumps 2021-01-11 11:36:00 +01:00
ProcessGroup.cpp Kernel: Move block condition evaluation out of the Scheduler 2020-11-30 13:17:02 +01:00
ProcessGroup.h Kernel: Move block condition evaluation out of the Scheduler 2020-11-30 13:17:02 +01:00
Ptrace.cpp Kernel: Release scheduler_lock in ptrace once we know tracee is stopped 2021-01-02 11:52:19 +01:00
Ptrace.h Meta+Kernel: Make clang-format-10 clean 2020-09-25 21:18:17 +02:00
Random.cpp Kernel: Fix some issues related to fixes and block conditions 2020-12-12 21:28:12 +01:00
Random.h Kernel: Tag more methods and types as [[nodiscard]] 2020-12-27 11:09:30 +01:00
RTC.cpp Kernel: Minor tweak to now() computation 2020-08-26 08:52:07 +02:00
RTC.h Meta: Add license header to source files 2020-01-18 09:45:54 +01:00
Scheduler.cpp Kernel+Profiler: Make profiling per-process and without core dumps 2021-01-11 11:36:00 +01:00
Scheduler.h Kernel: Fix some issues related to fixes and block conditions 2020-12-12 21:28:12 +01:00
SharedBuffer.cpp Everywhere: Replace a bundle of dbg with dbgln. 2021-01-09 21:11:09 +01:00
SharedBuffer.h Kernel: Merge PurgeableVMObject into AnonymousVMObject 2021-01-01 23:43:44 +01:00
SpinLock.h Kernel: Tag more methods and types as [[nodiscard]] 2020-12-27 11:09:30 +01:00
StdLib.cpp Kernel: Make copy_to/from_user safe and remove unnecessary checks 2020-09-13 21:19:15 +02:00
StdLib.h Kernel: Add checks for is_trivially_copyable to copy_to/from_user 2020-10-02 15:38:07 +02:00
Syscall.cpp Kernel: Don't allow modifying IOPL via sys$ptrace() or sys$sigreturn() 2020-12-22 19:38:25 +01:00
Thread.cpp Kernel+Profiler: Make profiling per-process and without core dumps 2021-01-11 11:36:00 +01:00
Thread.h Everywhere: Replace a bundle of dbg with dbgln. 2021-01-09 21:11:09 +01:00
ThreadBlockers.cpp Kernel: Consolidate the various BlockCondition::unblock variants 2020-12-30 13:23:17 +01:00
ThreadTracer.cpp Kernel: PID/TID typing 2020-08-10 11:51:45 +02:00
ThreadTracer.h Kernel: PID/TID typing 2020-08-10 11:51:45 +02:00
TimerQueue.cpp Kernel: Improve time keeping and dramatically reduce interrupt load 2020-12-21 18:26:12 +01:00
TimerQueue.h Kernel: Specify default memory order for some non-synchronizing Atomics 2021-01-04 19:13:52 +01:00
UnixTypes.h Kernel+Profiler: Make profiling per-process and without core dumps 2021-01-11 11:36:00 +01:00
UnveilNode.h Kernel: Allow 'elevating' unveil permissions if implicitly inherited from '/' 2020-12-26 16:10:04 +01:00
UserOrKernelBuffer.cpp AK: Add StringBuilder::appendff using the new format. 2020-09-22 15:06:40 +02:00
UserOrKernelBuffer.h FileSystem: Use OutputMemoryStream instead of BufferStream. 2020-09-15 20:36:45 +02:00
VirtualAddress.h AK: Add Formatter<FormatString> as helper class. 2021-01-09 21:11:09 +01:00
WaitQueue.cpp Everywhere: Fix more typos 2020-12-31 01:47:41 +01:00
WaitQueue.h Kernel: Fix Lock race causing infinite spinning between two threads 2020-12-16 23:38:17 +01:00