digraph uploading { node [shape=box]; subgraph user_space { rank=same; "disk cache" -> "send buffer" [label="copy into peer's send buffer (copy)"] "send buffer" -> "encrypted send buffer" [label="encrypt in-place (no copy)" style=dashed]; } subgraph kernel { rank=same; "kernel page cache"; "socket kernel buffer" } "encrypted send buffer" -> "socket kernel buffer" [label="write() to socket (copy)"]; "kernel page cache" -> "disk cache" [label="read() from file (copy)"] }