1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-27 01:07:36 +00:00

Kernel/Profiling: Add profiling to read syscall

Syscalls to read can now be profiled, allowing us to monitor
filesystem usage by different applications.
This commit is contained in:
Jakub Berkop 2021-12-04 13:26:13 +01:00 committed by Andreas Kling
parent bd821982e0
commit 4916c892b2
6 changed files with 86 additions and 9 deletions

View file

@ -68,8 +68,16 @@ struct [[gnu::packed]] SignpostPerformanceEvent {
FlatPtr arg2;
};
struct [[gnu::packed]] ReadPerformanceEvent {
int fd;
size_t size;
size_t filename_index;
size_t start_timestamp;
bool success;
};
struct [[gnu::packed]] PerformanceEvent {
u16 type { 0 };
u32 type { 0 };
u8 stack_size { 0 };
u32 pid { 0 };
u32 tid { 0 };
@ -87,6 +95,7 @@ struct [[gnu::packed]] PerformanceEvent {
KMallocPerformanceEvent kmalloc;
KFreePerformanceEvent kfree;
SignpostPerformanceEvent signpost;
ReadPerformanceEvent read;
} data;
static constexpr size_t max_stack_frame_count = 64;
FlatPtr stack[max_stack_frame_count];
@ -101,11 +110,11 @@ class PerformanceEventBuffer {
public:
static OwnPtr<PerformanceEventBuffer> try_create_with_size(size_t buffer_size);
ErrorOr<void> append(int type, FlatPtr arg1, FlatPtr arg2, StringView arg3, Thread* current_thread = Thread::current());
ErrorOr<void> append(int type, FlatPtr arg1, FlatPtr arg2, StringView arg3, Thread* current_thread = Thread::current(), FlatPtr arg4 = 0, u64 arg5 = 0, ErrorOr<FlatPtr> arg6 = 0);
ErrorOr<void> append_with_ip_and_bp(ProcessID pid, ThreadID tid, FlatPtr eip, FlatPtr ebp,
int type, u32 lost_samples, FlatPtr arg1, FlatPtr arg2, StringView arg3);
int type, u32 lost_samples, FlatPtr arg1, FlatPtr arg2, StringView arg3, FlatPtr arg4 = 0, u64 arg5 = {}, ErrorOr<FlatPtr> arg6 = 0);
ErrorOr<void> append_with_ip_and_bp(ProcessID pid, ThreadID tid, const RegisterState& regs,
int type, u32 lost_samples, FlatPtr arg1, FlatPtr arg2, StringView arg3);
int type, u32 lost_samples, FlatPtr arg1, FlatPtr arg2, StringView arg3, FlatPtr arg4 = 0, u64 arg5 = {}, ErrorOr<FlatPtr> arg6 = 0);
void clear()
{