mirror of
https://github.com/RGBCube/serenity
synced 2025-07-25 15:07:45 +00:00
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
This commit is contained in:
parent
f259d96871
commit
5dafb72370
20 changed files with 195 additions and 310 deletions
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (c) 2018-2020, Andreas Kling <kling@serenityos.org>
|
||||
* Copyright (c) 2018-2021, Andreas Kling <kling@serenityos.org>
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
|
@ -205,18 +205,6 @@ static void create_tmp_coredump_directory()
|
|||
umask(old_umask);
|
||||
}
|
||||
|
||||
static void create_tmp_profiler_coredumps_directory()
|
||||
{
|
||||
dbgln("Creating /tmp/profiler_coredumps directory");
|
||||
auto old_umask = umask(0);
|
||||
auto rc = mkdir("/tmp/profiler_coredumps", 0755);
|
||||
if (rc < 0) {
|
||||
perror("mkdir(/tmp/profiler_coredumps)");
|
||||
ASSERT_NOT_REACHED();
|
||||
}
|
||||
umask(old_umask);
|
||||
}
|
||||
|
||||
int main(int, char**)
|
||||
{
|
||||
prepare_devfs();
|
||||
|
@ -229,7 +217,6 @@ int main(int, char**)
|
|||
mount_all_filesystems();
|
||||
create_tmp_rpc_directory();
|
||||
create_tmp_coredump_directory();
|
||||
create_tmp_profiler_coredumps_directory();
|
||||
parse_boot_mode();
|
||||
|
||||
Core::EventLoop event_loop;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue