diff --git a/.github/copilot-instructions.md b/.github/copilot-instructions.md index 9d91db2..e8c40c6 100644 --- a/.github/copilot-instructions.md +++ b/.github/copilot-instructions.md @@ -199,6 +199,8 @@ Run sequence: https://www.kernel.org/doc/html/latest/ - Project docs: `docs/*.md` +- System architecture diagram (Mermaid, procfs flow + kernel data sources): + `README.md` — Architecture Diagram section --- diff --git a/README.md b/README.md index 59778d0..e42fcde 100644 --- a/README.md +++ b/README.md @@ -19,6 +19,7 @@ - [Release Binaries](#release-binaries) - [Makefile Targets](#makefile-targets) - [Testing](#testing) +- [Architecture Diagram](#architecture-diagram) - [Project Structure](#project-structure) - [Output Notes](#output-notes) - [Code Quality](#code-quality) @@ -192,6 +193,68 @@ sudo ./e2e/qemu-run.sh # Start VM sudo ./e2e/qemu-test.sh # Run automated tests ``` +## Architecture Diagram + +```mermaid +flowchart TB + subgraph UserSpace[User Space] + User[User] + CLI["proclens CLI
one-shot · live dashboard"] + Tests[Unit tests and QEMU E2E] + User --> CLI + Tests --> CLI + end + + subgraph ProcFS[ProcFS Interface] + PID["/proc/proclens_module/pid
write target PID"] + DET["/proc/proclens_module/det
read process details"] + THR["/proc/proclens_module/threads
read thread details"] + end + + subgraph KernelModule[Kernel Module: proclens_module] + PIDBuf[PID buffer and proc write handler] + Show["proclens_module_show
seq_file render path"] + ThreadShow["proclens_module_threads_show
thread listing render path"] + Memory["Memory section builders
pressure · layout · visualization"] + Network["Network + socket builders
brief stats · open sockets"] + IO[I/O stats builder] + ThreadInfo[Thread info line builder] + end + + subgraph KernelData[Kernel Data Sources] + Task["task_struct
pid · comm · utime · stime · faults"] + MM["mm_struct + VMA maple tree
code · data · bss
heap · stack · ELF base"] + Signal["signal_struct
oom_score_adj"] + Files["files_struct + fdtable
process file descriptors"] + Sock["socket / sock
tcp_sock / inet_sock
protocol · state · addresses · traffic"] + IOAcct["task I/O accounting
rchar · wchar · syscr · syscw
storage bytes"] + Threads["thread group + sched state
priority · nice · cpumask"] + end + + CLI -->|write selected PID| PID + CLI -->|read details| DET + CLI -->|read thread list| THR + PID --> PIDBuf + DET --> Show + THR --> ThreadShow + PIDBuf --> Show + PIDBuf --> ThreadShow + Show --> Memory + Show --> Network + Show --> IO + ThreadShow --> ThreadInfo + Memory --> Task + Memory --> MM + Memory --> Signal + Network --> Files + Network --> Sock + IO --> IOAcct + IO --> Task + ThreadInfo --> Threads + ThreadInfo --> Task + KernelModule -->|formatted seq_file output| ProcFS +``` + ## Project Structure ``` diff --git a/docs/demo.gif b/docs/demo.gif index 5b1dd49..f36a9ce 100644 Binary files a/docs/demo.gif and b/docs/demo.gif differ