digraph {
	Cgo -> SCgo_t;
	Sgo -> SCgo_t;

	SCgo_t -> Mgo;
	SCgo_t -> Sgo;
	SCgo_t -> Cgo;

	Sgo -> io_cancel;
	Sgo -> load_serial_next;
	Sgo -> Sgo_speed;

	//Sgo_speed -> B_link_recv;
	Sgo_speed -> garbage;
	//Sgo_speed -> gosched;
	Sgo_speed -> diskio;
	Sgo_speed -> ConnClose_notimer;

	Sgo_speed -> osnet_latency;
	Sgo_speed -> QSgo_speed;

	QSgo_speed -> prefetch_slow;
	QSgo_speed -> parallel_slow;
	QSgo_speed -> Mmap_go;
	QSgo_speed -> sha1_index;

	garbage	-> pktbuf_alloc;
	garbage -> msg_alloc;
	garbage -> conn_alloc;

	diskio	-> gosched;
	diskio	-> GOMAXPROCS;


	Cpy_r_Sgo -> Sgo;
	//Cpy_r_Sgo -> Protog_fix;
	//Cpy_r_Sgo -> Cpy_patch;
	//Cpy_r_Sgo -> Mpy_vs_Sgo;

	Cgo_r_Sgo -> Cgo;
	Cgo_r_Sgo -> Sgo;

	Cgo_r_Spy -> Cgo;
	//Cgo_r_Spy -> Protog_fix;


	Cgo		[label=<C<sub>go</sub>> style=filled fillcolor=lightyellow];
	Sgo		[label=<S<sub>go</sub>> style=filled fillcolor=lightyellow];
	Mgo		[label=<M<sub>go</sub>> style=filled fillcolor=lightyellow];
	SCgo_t		[label=<S<sub>go</sub>  / C<sub>go</sub>  tests> style=filled fillcolor=lightyellow];
	Sgo_speed	[label=<S<sub>go</sub>  speed/latency>];
	Cpy_r_Sgo	[label=<C<sub>py</sub>  read S<sub>go</sub>> style=filled fillcolor=lightyellow];
	Cgo_r_Sgo	[label=<C<sub>go</sub>  read S<sub>go</sub>> style=filled fillcolor=lightyellow];
	Cgo_r_Spy	[label=<C<sub>go</sub>  read S<sub>py</sub>> style=filled fillcolor=lightyellow];
	Cleanup		[label="Cleanup history"];
	Post		[label="Post"];
	//Cpy_patch	[label=<py patch: ConnID py=go> style=filled fillcolor=lightyellow];	// C<sub>py</sub>  patch for ConnID interop. with S<sub>go</sub>>];
	Mmap_go		[label="? io.ReaderAt via mmap"];
	//Protog_fix	[label="proto(go/py) compat fix" style=filled fillcolor=lightyellow];
	//Mpy_vs_Sgo	[label=<M<sub>py</sub> vs S<sub>go</sub>: try/fix> style=filled fillcolor=lightyellow];

	io_cancel		[label="? conn IO vs ctx cancel"];
	load_serial_next	[label=<? GetObject return += serial<sub>next</sub>>];

	sha1_index	[label="? sha1 index"];
	//B_link_recv	[label="Bench link.Recv1/Ask1" style=filled fillcolor=lightyellow];
	garbage		[label="garbage" style=filled fillcolor=lightyellow];
	gosched		[label="?\ngo scheduling" style=filled fillcolor=grey95];

	//Cgo -> Cgo_tasks;
	//Cgo_tasks	[label="- talkMaster\n- update nodeTab/partTab\n- dial S on demand\n..." style=filled fillcolor=lightyellow];

	QSgo_speed	[label=<?>];

	pktbuf_alloc	[label=<PktBuf> style=filled fillcolor=lightyellow];
	msg_alloc	[label=<Msg>	style=filled fillcolor=lightyellow];
	conn_alloc	[label=<Conn>	style=filled fillcolor=lightyellow];

	ConnClose_notimer	[label="Conn.Close\nno timer" style=filled fillcolor=lightyellow];
	diskio		[label="disk io"];
	GOMAXPROCS	[label="?\nGOMAXPROCS"];


	osnet_latency	-> rx_no_delay;
	osnet_latency	-> nocstates;
	osnet_latency	-> tcp_latency;
	tcp_latency	-> rtl_tcp_2eth;

	rx_no_delay	-> rtl_patch;

	osnet_latency	[label="OS/Network\nlatency"];
	rx_no_delay	[label="net rx\nno delay" style=filled fillcolor=lightyellow];
	nocstates	[label="disable >C1" style=filled fillcolor=lightyellow];
	tcp_latency	[label="TCP RR\nlatency"];
	rtl_tcp_2eth	[label="RTL: TCP RR ↑ 400μs\n on 1 eth.f -> 2 eth.f" style=filled fillcolor=oldlace];

	rtl_patch	[label="r8169 patch\nethtool -C" style=filled fillcolor=lightyellow];

	prefetch_slow	[label="? prefetch\nslow"];
	parallel_slow	[label="? many clients\nSgo slower"];
}
