mirror of
https://github.com/eunomia-bpf/bpf-developer-tutorial.git
synced 2026-10-30 12:15:40 +08:00
Add advanced eBPF tutorials 51–54 and tutorial agent skills (#220)
* Add targeted TCP connection quarantine tool * Document TCP quarantine workflow * Refresh package indexes before CI install * Document TCP quarantine namespace scope * Require BPF events for TCP iterator * Add production fsession latency tracer * Document fsession latency workflow * Reject empty fsession CLI values * Preserve successful fsession exit status * Document fsession deadline regression test * Drain fsession events before summary * Document fsession PID and shutdown semantics * Simplify fsession polling control flow * Add bounded BPF egress pacer tutorial * Test queued packet cleanup on signal * Document the BPF egress pacer * Polish and review the BPF egress pacer * Refactor egress pacer option parsing * Add executable image inspector lesson * Build the exec image inspector in CI * Document executable image inspection * Handle re-exec chains in the image inspector * Polish exec image inspector guidance * Reduce exec inspector wait complexity * Rewrite the egress pacer tutorial * Rewrite the exec image inspector tutorial * Polish the exec image inspector tutorial * Correct the egress pacer tutorial * Make the exec tutorial Chinese natural * Fix egress tutorial prose checks * Finish the exec tutorial style pass * Clarify exec tutorial runtime evidence * Polish exec tutorial scope wording * Rewrite the egress pacer tutorial for readers * Regenerate tutorial indexes * Teach the egress pacer component by component * Use standard Markdown in the egress tutorial * Strengthen the egress pacer tutorial narrative * jiji * Use positive framing in the egress tutorial * Rewrite the exec image inspector tutorial * Rewrite the TCP quarantine tutorial * Add the egress pacer lifecycle diagram * Refresh TCP tutorial indexes * Add the exec image inspection flow diagram * Use one source directory link * Rewrite the fsession latency tutorial * Add fsession feature background * Add BPF qdisc feature background * Add TCP iterator feature background * Add exec inspection feature background * Require feature background in tutorial openings * Polish fsession background prose * Simplify repository tutorial skills * Update exec inspector tooling revisions * Restructure tutorials 51-54 following advanced guideline - Update SKILL.md with strict section ordering and "why" requirements - Rewrite README.zh.md for tutorials 51-54: - Add background sections explaining why traditional approaches fail - Move compilation/execution sections after code analysis - Add high-level mechanism explanation before code - Use paragraph style instead of bullet lists * Consolidate skill guidelines and remove duplicates - Update write-bpf-production-tutorial skill to reference 47, 48, 49 - Add structure requirements section with "Why" section emphasis - Remove duplicate advanced-tutorial-guidelines.md (use scripts/guideline_advance.md instead) * Rewrite English READMEs 51-54 to match Chinese structure Restructure all four English tutorials to match their Chinese counterparts: - Add "Why this approach is needed" sections explaining traditional limitations - Add high-level mechanism sections before code - Move compilation/execution sections after code analysis - Add environment requirements tables - Use consistent section ordering across all tutorials * Regenerate TOC after tutorial title changes Run generate_toc.py to sync SUMMARY and README files with updated tutorial titles from the restructuring. * Regenerate compatibility tables after title changes --------- Co-authored-by: LinuxDev9002 <i@littlefisher.me>
This commit is contained in:
121
src/54-exec-image-inspector/exec-image-flow.dot
Normal file
121
src/54-exec-image-inspector/exec-image-flow.dot
Normal file
@@ -0,0 +1,121 @@
|
||||
digraph exec_image_flow {
|
||||
graph [
|
||||
rankdir=TB,
|
||||
bgcolor="white",
|
||||
pad="0.25",
|
||||
nodesep="0.34",
|
||||
ranksep="0.46",
|
||||
splines=spline,
|
||||
size="10,7.5",
|
||||
ratio=compress,
|
||||
newrank=true,
|
||||
fontname="DejaVu Sans"
|
||||
];
|
||||
node [
|
||||
shape=box,
|
||||
style="rounded,filled",
|
||||
fillcolor="#F7FAFC",
|
||||
color="#4A5568",
|
||||
fontcolor="#1A202C",
|
||||
fontname="DejaVu Sans",
|
||||
fontsize=12,
|
||||
margin="0.16,0.10"
|
||||
];
|
||||
edge [
|
||||
color="#4A5568",
|
||||
fontcolor="#2D3748",
|
||||
fontname="DejaVu Sans",
|
||||
fontsize=10,
|
||||
arrowsize=0.75
|
||||
];
|
||||
|
||||
fork [
|
||||
label="User space\nfork child\nchild waits on pipe",
|
||||
fillcolor="#EBF8FF",
|
||||
color="#3182CE"
|
||||
];
|
||||
prepare [
|
||||
label="target_tgid + probe_offset\nload LSM + ring buffer",
|
||||
fillcolor="#EBF8FF",
|
||||
color="#3182CE"
|
||||
];
|
||||
exec [
|
||||
label="release pipe\nchild calls execvp",
|
||||
fillcolor="#EBF8FF",
|
||||
color="#3182CE"
|
||||
];
|
||||
hook [
|
||||
label="bprm_committed_creds\nmatch target_tgid",
|
||||
fillcolor="#FFFAF0",
|
||||
color="#DD6B20"
|
||||
];
|
||||
probe [
|
||||
label="probe_offset set?",
|
||||
shape=diamond,
|
||||
style="filled",
|
||||
fillcolor="#FFFAF0",
|
||||
color="#DD6B20",
|
||||
margin="0.10,0.05"
|
||||
];
|
||||
direct [
|
||||
label="non-sleepable direct probe\nstore result",
|
||||
fillcolor="#FFFAF0",
|
||||
color="#DD6B20"
|
||||
];
|
||||
pending [
|
||||
label="pending[0]\nscheduled_ns + direct result",
|
||||
shape=cylinder,
|
||||
fillcolor="#FFF5F5",
|
||||
color="#C05621"
|
||||
];
|
||||
schedule [
|
||||
label="bpf_task_work_schedule_signal\ninspect_executable",
|
||||
fillcolor="#FAF5FF",
|
||||
color="#805AD5"
|
||||
];
|
||||
callback [
|
||||
label="sleepable task-work callback\nrecord callback latency",
|
||||
fillcolor="#FAF5FF",
|
||||
color="#805AD5"
|
||||
];
|
||||
file [
|
||||
label="bpf_get_task_exe_file\nresolve path",
|
||||
fillcolor="#FAF5FF",
|
||||
color="#805AD5"
|
||||
];
|
||||
read [
|
||||
label="file-backed dynptr\nread ELF header + marker\ndiscard dynptr + put file",
|
||||
fillcolor="#FAF5FF",
|
||||
color="#805AD5"
|
||||
];
|
||||
event [
|
||||
label="ring buffer event\npath + ELF + probe + latency",
|
||||
fillcolor="#F0FFF4",
|
||||
color="#38A169"
|
||||
];
|
||||
collect [
|
||||
label="User space\npoll + waitpid\nfinal drain + stats",
|
||||
fillcolor="#EBF8FF",
|
||||
color="#3182CE"
|
||||
];
|
||||
|
||||
{ rank=same; fork; prepare; exec; }
|
||||
{ rank=same; hook; probe; direct; }
|
||||
{ rank=same; pending; schedule; }
|
||||
{ rank=same; callback; file; read; }
|
||||
{ rank=same; event; collect; }
|
||||
|
||||
fork -> prepare [label="parent knows child TGID"];
|
||||
prepare -> exec [label="attach completes"];
|
||||
exec -> hook [label="each committed exec"];
|
||||
hook -> probe;
|
||||
probe -> direct [label="yes"];
|
||||
probe -> pending [label="no"];
|
||||
direct -> pending;
|
||||
pending -> schedule;
|
||||
schedule -> callback [label="task work runs"];
|
||||
callback -> file;
|
||||
file -> read;
|
||||
read -> event;
|
||||
event -> collect;
|
||||
}
|
||||
Reference in New Issue
Block a user