digraph downloading { label="" node [shape=box]; subgraph user_space { rank=same; "receive buffer" -> "plain text buffer" [label="decrypt in-place (no copy)" style=dashed]; "plain text buffer" -> "disk cache" [label="move buffer reference (no copy)" style=dashed] } subgraph kernel { rank=same; "socket kernel buffer"; "kernel page cache" } "socket kernel buffer" -> "receive buffer" [label="read() on socket (copy)"]; "disk cache" -> "kernel page cache" [label="write() to file (copy)"] }