Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
N
neoppod
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
1
Issues
1
List
Boards
Labels
Milestones
Merge Requests
2
Merge Requests
2
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
nexedi
neoppod
Commits
d28d7cef
Commit
d28d7cef
authored
Sep 07, 2017
by
Kirill Smelkov
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
.
parent
7a97206e
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
243 additions
and
120 deletions
+243
-120
go/NOTES-go
go/NOTES-go
+14
-0
go/neo/connection_test.go
go/neo/connection_test.go
+13
-4
go/todo.dot
go/todo.dot
+31
-7
go/todo.svg
go/todo.svg
+185
-109
No files found.
go/NOTES-go
View file @
d28d7cef
...
@@ -3,6 +3,20 @@
...
@@ -3,6 +3,20 @@
? random access -> mmap
? random access -> mmap
- scheduler won't use free P if a G is taking time and other Gs are queued after it on the same P:
https://groups.google.com/forum/#!topic/golang-nuts/8KYER1ALelg
e870f06c (runtime: yield time slice to most recently readied G)
ea0386f8 (runtime: improve randomized stealing logic)
4bb491b1 (runtime: improve scheduler fairness)
/s steal
findrunnable
runqsteal
? runqgrab
schedule <- top entry
https://golang.org/s/go11sched -> syscall/M partking and Unparking/Spinning
----------------------------------------
----------------------------------------
- TODO stats for events (packets received, errors, etc)
- TODO stats for events (packets received, errors, etc)
...
...
go/neo/connection_test.go
View file @
d28d7cef
...
@@ -36,6 +36,8 @@ import (
...
@@ -36,6 +36,8 @@ import (
"github.com/kylelemons/godebug/pretty"
"github.com/kylelemons/godebug/pretty"
"github.com/pkg/errors"
"github.com/pkg/errors"
"runtime"
)
)
func
xclose
(
c
io
.
Closer
)
{
func
xclose
(
c
io
.
Closer
)
{
...
@@ -721,11 +723,9 @@ func TestHandshake(t *testing.T) {
...
@@ -721,11 +723,9 @@ func TestHandshake(t *testing.T) {
// ---- benchmarks ----
// ---- benchmarks ----
// rtt over chan - for comparision as base
// rtt over chan - for comparision as base
func
BenchmarkChanRTT
(
b
*
testing
.
B
)
{
func
benchmarkChanRTT
(
b
*
testing
.
B
,
c12
,
c21
chan
byte
)
{
c12
:=
make
(
chan
byte
)
c21
:=
make
(
chan
byte
)
go
func
()
{
go
func
()
{
runtime
.
LockOSThread
()
for
{
for
{
c
,
ok
:=
<-
c12
c
,
ok
:=
<-
c12
if
!
ok
{
if
!
ok
{
...
@@ -748,6 +748,15 @@ func BenchmarkChanRTT(b *testing.B) {
...
@@ -748,6 +748,15 @@ func BenchmarkChanRTT(b *testing.B) {
close
(
c12
)
close
(
c12
)
}
}
func
BenchmarkSyncChanRTT
(
b
*
testing
.
B
)
{
benchmarkChanRTT
(
b
,
make
(
chan
byte
),
make
(
chan
byte
))
}
func
BenchmarkBufChanRTT
(
b
*
testing
.
B
)
{
benchmarkChanRTT
(
b
,
make
(
chan
byte
,
1
),
make
(
chan
byte
,
1
))
}
// rtt over net.Conn Read/Write
// rtt over net.Conn Read/Write
func
benchmarkNetConnRTT
(
b
*
testing
.
B
,
c1
,
c2
net
.
Conn
)
{
func
benchmarkNetConnRTT
(
b
*
testing
.
B
,
c1
,
c2
net
.
Conn
)
{
buf1
:=
make
([]
byte
,
1
)
buf1
:=
make
([]
byte
,
1
)
...
...
go/todo.dot
View file @
d28d7cef
...
@@ -10,11 +10,24 @@ digraph {
...
@@ -10,11 +10,24 @@ digraph {
Sgo
->
load_serial_next
;
Sgo
->
load_serial_next
;
Sgo
->
Sgo_speed
;
Sgo
->
Sgo_speed
;
Sgo_speed
->
Mmap_go
;
Sgo_speed
->
sha1_index
;
//Sgo_speed -> B_link_recv;
//Sgo_speed -> B_link_recv;
Sgo_speed
->
garbage
;
Sgo_speed
->
garbage
;
Sgo_speed
->
gosched
;
//Sgo_speed -> gosched;
Sgo_speed
->
diskio
;
Sgo_speed
->
ConnClose_notimer
;
Sgo_speed
->
QSgo_speed
;
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
->
Sgo
;
//Cpy_r_Sgo -> Protog_fix;
//Cpy_r_Sgo -> Protog_fix;
...
@@ -33,12 +46,13 @@ digraph {
...
@@ -33,12 +46,13 @@ digraph {
Mgo
[
label
=<
M
<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
]
;
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
>
]
;
Sgo_speed
[
label
=<
S
<sub>
go
</sub>
speed/latency
>
]
;
Cpy_r_Sgo
[
label
=<
C
<sub>
py
</sub>
read S
<sub>
go
</sub>
>
]
;
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>
>
]
;
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>
>
]
;
Cgo_r_Spy
[
label
=<
C
<sub>
go
</sub>
read S
<sub>
py
</sub>
>
style
=
filled
fillcolor
=
lightyellow
]
;
Cleanup
[
label
=
"Cleanup history"
]
;
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>>];
//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"
]
;
Mmap_go
[
label
=
"
?
io.ReaderAt via mmap"
]
;
//Protog_fix [label="proto(go/py) compat fix" style=filled fillcolor=lightyellow];
//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];
//Mpy_vs_Sgo [label=<M<sub>py</sub> vs S<sub>go</sub>: try/fix> style=filled fillcolor=lightyellow];
...
@@ -52,4 +66,14 @@ digraph {
...
@@ -52,4 +66,14 @@ digraph {
//Cgo -> Cgo_tasks;
//Cgo -> Cgo_tasks;
//Cgo_tasks [label="- talkMaster\n- update nodeTab/partTab\n- dial S on demand\n..." style=filled fillcolor=lightyellow];
//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
>
]
;
msg_alloc
[
label
=<
Msg
>
]
;
conn_alloc
[
label
=<
Conn
>
]
;
ConnClose_notimer
[
label
=
"Conn.Close\nno timer"
]
;
diskio
[
label
=
"disk io"
]
;
GOMAXPROCS
[
label
=
"? GOMAXPROCS"
]
;
}
}
go/todo.svg
View file @
d28d7cef
...
@@ -4,184 +4,260 @@
...
@@ -4,184 +4,260 @@
<!-- Generated by graphviz version 2.38.0 (20140413.2041)
<!-- Generated by graphviz version 2.38.0 (20140413.2041)
-->
-->
<!-- Title: %3 Pages: 1 -->
<!-- Title: %3 Pages: 1 -->
<svg
width=
"
805pt"
height=
"40
4pt"
<svg
width=
"
1033pt"
height=
"49
4pt"
viewBox=
"0.00 0.00
804.54 404.00
"
xmlns=
"http://www.w3.org/2000/svg"
xmlns:xlink=
"http://www.w3.org/1999/xlink"
>
viewBox=
"0.00 0.00
1033.03 493.74
"
xmlns=
"http://www.w3.org/2000/svg"
xmlns:xlink=
"http://www.w3.org/1999/xlink"
>
<g
id=
"graph0"
class=
"graph"
transform=
"scale(1 1) rotate(0) translate(4 4
00
)"
>
<g
id=
"graph0"
class=
"graph"
transform=
"scale(1 1) rotate(0) translate(4 4
89.74
)"
>
<title>
%3
</title>
<title>
%3
</title>
<polygon
fill=
"white"
stroke=
"none"
points=
"-4,4 -4,-4
00 800.536,-400 800.536
,4 -4,4"
/>
<polygon
fill=
"white"
stroke=
"none"
points=
"-4,4 -4,-4
89.74 1029.03,-489.74 1029.03
,4 -4,4"
/>
<!-- Cgo -->
<!-- Cgo -->
<g
id=
"node1"
class=
"node"
><title>
Cgo
</title>
<g
id=
"node1"
class=
"node"
><title>
Cgo
</title>
<ellipse
fill=
"lightyellow"
stroke=
"black"
cx=
"416.242"
cy=
"-3
06
"
rx=
"27"
ry=
"18"
/>
<ellipse
fill=
"lightyellow"
stroke=
"black"
cx=
"416.242"
cy=
"-3
95.74
"
rx=
"27"
ry=
"18"
/>
<text
text-anchor=
"start"
x=
"404.742"
y=
"-3
03.3
"
font-family=
"Times,serif"
font-size=
"14.00"
>
C
</text>
<text
text-anchor=
"start"
x=
"404.742"
y=
"-3
93.04
"
font-family=
"Times,serif"
font-size=
"14.00"
>
C
</text>
<text
text-anchor=
"start"
x=
"414.742"
y=
"-3
03.3
"
font-family=
"Times,serif"
baseline-shift=
"sub"
font-size=
"14.00"
>
go
</text>
<text
text-anchor=
"start"
x=
"414.742"
y=
"-3
93.04
"
font-family=
"Times,serif"
baseline-shift=
"sub"
font-size=
"14.00"
>
go
</text>
</g>
</g>
<!-- SCgo_t -->
<!-- SCgo_t -->
<g
id=
"node2"
class=
"node"
><title>
SCgo_t
</title>
<g
id=
"node2"
class=
"node"
><title>
SCgo_t
</title>
<ellipse
fill=
"lightyellow"
stroke=
"black"
cx=
"416.242"
cy=
"-
23
4"
rx=
"69.5877"
ry=
"18"
/>
<ellipse
fill=
"lightyellow"
stroke=
"black"
cx=
"416.242"
cy=
"-
323.7
4"
rx=
"69.5877"
ry=
"18"
/>
<text
text-anchor=
"start"
x=
"370.742"
y=
"-
231.3
"
font-family=
"Times,serif"
font-size=
"14.00"
>
S
</text>
<text
text-anchor=
"start"
x=
"370.742"
y=
"-
321.04
"
font-family=
"Times,serif"
font-size=
"14.00"
>
S
</text>
<text
text-anchor=
"start"
x=
"378.742"
y=
"-
231.3
"
font-family=
"Times,serif"
baseline-shift=
"sub"
font-size=
"14.00"
>
go
</text>
<text
text-anchor=
"start"
x=
"378.742"
y=
"-
321.04
"
font-family=
"Times,serif"
baseline-shift=
"sub"
font-size=
"14.00"
>
go
</text>
<text
text-anchor=
"start"
x=
"391.742"
y=
"-
231.3
"
font-family=
"Times,serif"
font-size=
"14.00"
>
 
/ C
</text>
<text
text-anchor=
"start"
x=
"391.742"
y=
"-
321.04
"
font-family=
"Times,serif"
font-size=
"14.00"
>
 
/ C
</text>
<text
text-anchor=
"start"
x=
"416.742"
y=
"-
231.3
"
font-family=
"Times,serif"
baseline-shift=
"sub"
font-size=
"14.00"
>
go
</text>
<text
text-anchor=
"start"
x=
"416.742"
y=
"-
321.04
"
font-family=
"Times,serif"
baseline-shift=
"sub"
font-size=
"14.00"
>
go
</text>
<text
text-anchor=
"start"
x=
"429.742"
y=
"-
231.3
"
font-family=
"Times,serif"
font-size=
"14.00"
>
 
tests
</text>
<text
text-anchor=
"start"
x=
"429.742"
y=
"-
321.04
"
font-family=
"Times,serif"
font-size=
"14.00"
>
 
tests
</text>
</g>
</g>
<!-- Cgo->SCgo_t -->
<!-- Cgo->SCgo_t -->
<g
id=
"edge1"
class=
"edge"
><title>
Cgo
->
SCgo_t
</title>
<g
id=
"edge1"
class=
"edge"
><title>
Cgo
->
SCgo_t
</title>
<path
fill=
"none"
stroke=
"black"
d=
"M410.402,-
288.411C409.539,-280.507 409.29,-270.852 409.654,-261.93
5"
/>
<path
fill=
"none"
stroke=
"black"
d=
"M410.402,-
378.151C409.539,-370.247 409.29,-360.592 409.654,-351.67
5"
/>
<polygon
fill=
"black"
stroke=
"black"
points=
"413.145,-
262.179 410.362,-251.956 406.162,-261.683 413.145,-262.17
9"
/>
<polygon
fill=
"black"
stroke=
"black"
points=
"413.145,-
351.919 410.362,-341.696 406.162,-351.423 413.145,-351.91
9"
/>
</g>
</g>
<!-- SCgo_t->Cgo -->
<!-- SCgo_t->Cgo -->
<g
id=
"edge5"
class=
"edge"
><title>
SCgo_t
->
Cgo
</title>
<g
id=
"edge5"
class=
"edge"
><title>
SCgo_t
->
Cgo
</title>
<path
fill=
"none"
stroke=
"black"
d=
"M422.121,-
251.956C422.956,-259.827 423.19,-269.374 422.825,-278.18
7"
/>
<path
fill=
"none"
stroke=
"black"
d=
"M422.121,-
341.696C422.956,-349.567 423.19,-359.114 422.825,-367.92
7"
/>
<polygon
fill=
"black"
stroke=
"black"
points=
"419.316,-
278.184 422.082,-288.411 426.297,-278.691 419.316,-278.18
4"
/>
<polygon
fill=
"black"
stroke=
"black"
points=
"419.316,-
367.924 422.082,-378.151 426.297,-368.431 419.316,-367.92
4"
/>
</g>
</g>
<!-- Sgo -->
<!-- Sgo -->
<g
id=
"node3"
class=
"node"
><title>
Sgo
</title>
<g
id=
"node3"
class=
"node"
><title>
Sgo
</title>
<ellipse
fill=
"lightyellow"
stroke=
"black"
cx=
"331.242"
cy=
"-
162
"
rx=
"27"
ry=
"18"
/>
<ellipse
fill=
"lightyellow"
stroke=
"black"
cx=
"331.242"
cy=
"-
251.74
"
rx=
"27"
ry=
"18"
/>
<text
text-anchor=
"start"
x=
"320.742"
y=
"-
159.3
"
font-family=
"Times,serif"
font-size=
"14.00"
>
S
</text>
<text
text-anchor=
"start"
x=
"320.742"
y=
"-
249.04
"
font-family=
"Times,serif"
font-size=
"14.00"
>
S
</text>
<text
text-anchor=
"start"
x=
"328.742"
y=
"-
159.3
"
font-family=
"Times,serif"
baseline-shift=
"sub"
font-size=
"14.00"
>
go
</text>
<text
text-anchor=
"start"
x=
"328.742"
y=
"-
249.04
"
font-family=
"Times,serif"
baseline-shift=
"sub"
font-size=
"14.00"
>
go
</text>
</g>
</g>
<!-- SCgo_t->Sgo -->
<!-- SCgo_t->Sgo -->
<g
id=
"edge4"
class=
"edge"
><title>
SCgo_t
->
Sgo
</title>
<g
id=
"edge4"
class=
"edge"
><title>
SCgo_t
->
Sgo
</title>
<path
fill=
"none"
stroke=
"black"
d=
"M391.193,-
217.116C378.555,-207.611 363.535,-195.394 351.607,-184.97
3"
/>
<path
fill=
"none"
stroke=
"black"
d=
"M391.193,-
306.856C378.555,-297.351 363.535,-285.134 351.607,-274.71
3"
/>
<polygon
fill=
"black"
stroke=
"black"
points=
"353.702,-
182.151 343.911,-178.101 349.039,-187.373 353.702,-182.15
1"
/>
<polygon
fill=
"black"
stroke=
"black"
points=
"353.702,-
271.891 343.911,-267.842 349.039,-277.113 353.702,-271.89
1"
/>
</g>
</g>
<!-- Mgo -->
<!-- Mgo -->
<g
id=
"node4"
class=
"node"
><title>
Mgo
</title>
<g
id=
"node4"
class=
"node"
><title>
Mgo
</title>
<ellipse
fill=
"lightyellow"
stroke=
"black"
cx=
"416.242"
cy=
"-
162
"
rx=
"27.0966"
ry=
"18"
/>
<ellipse
fill=
"lightyellow"
stroke=
"black"
cx=
"416.242"
cy=
"-
251.74
"
rx=
"27.0966"
ry=
"18"
/>
<text
text-anchor=
"start"
x=
"403.242"
y=
"-
159.3
"
font-family=
"Times,serif"
font-size=
"14.00"
>
M
</text>
<text
text-anchor=
"start"
x=
"403.242"
y=
"-
249.04
"
font-family=
"Times,serif"
font-size=
"14.00"
>
M
</text>
<text
text-anchor=
"start"
x=
"416.242"
y=
"-
159.3
"
font-family=
"Times,serif"
baseline-shift=
"sub"
font-size=
"14.00"
>
go
</text>
<text
text-anchor=
"start"
x=
"416.242"
y=
"-
249.04
"
font-family=
"Times,serif"
baseline-shift=
"sub"
font-size=
"14.00"
>
go
</text>
</g>
</g>
<!-- SCgo_t->Mgo -->
<!-- SCgo_t->Mgo -->
<g
id=
"edge3"
class=
"edge"
><title>
SCgo_t
->
Mgo
</title>
<g
id=
"edge3"
class=
"edge"
><title>
SCgo_t
->
Mgo
</title>
<path
fill=
"none"
stroke=
"black"
d=
"M416.242,-
215.697C416.242,-207.983 416.242,-198.712 416.242,-190.112
"
/>
<path
fill=
"none"
stroke=
"black"
d=
"M416.242,-
305.437C416.242,-297.723 416.242,-288.453 416.242,-279.853
"
/>
<polygon
fill=
"black"
stroke=
"black"
points=
"419.742,-
190.104 416.242,-180.104 412.742,-190.104 419.742,-190.10
4"
/>
<polygon
fill=
"black"
stroke=
"black"
points=
"419.742,-
279.844 416.242,-269.844 412.742,-279.844 419.742,-279.84
4"
/>
</g>
</g>
<!-- Sgo->SCgo_t -->
<!-- Sgo->SCgo_t -->
<g
id=
"edge2"
class=
"edge"
><title>
Sgo
->
SCgo_t
</title>
<g
id=
"edge2"
class=
"edge"
><title>
Sgo
->
SCgo_t
</title>
<path
fill=
"none"
stroke=
"black"
d=
"M350.708,-
174.751C363.576,-184.113 380.277,-197.526 393.685,-209.12
2"
/>
<path
fill=
"none"
stroke=
"black"
d=
"M350.708,-
264.491C363.576,-273.853 380.277,-287.267 393.685,-298.86
2"
/>
<polygon
fill=
"black"
stroke=
"black"
points=
"391.729,-
212.064 401.544,-216.055 396.36,-206.815 391.729,-212.06
4"
/>
<polygon
fill=
"black"
stroke=
"black"
points=
"391.729,-
301.804 401.544,-305.795 396.36,-296.555 391.729,-301.80
4"
/>
</g>
</g>
<!-- io_cancel -->
<!-- io_cancel -->
<g
id=
"node5"
class=
"node"
><title>
io_cancel
</title>
<g
id=
"node5"
class=
"node"
><title>
io_cancel
</title>
<ellipse
fill=
"none"
stroke=
"black"
cx=
"94.2416"
cy=
"-
90
"
rx=
"94.4839"
ry=
"18"
/>
<ellipse
fill=
"none"
stroke=
"black"
cx=
"94.2416"
cy=
"-
179.74
"
rx=
"94.4839"
ry=
"18"
/>
<text
text-anchor=
"middle"
x=
"94.2416"
y=
"-
86.3
"
font-family=
"Times,serif"
font-size=
"14.00"
>
? conn IO vs ctx cancel
</text>
<text
text-anchor=
"middle"
x=
"94.2416"
y=
"-
176.04
"
font-family=
"Times,serif"
font-size=
"14.00"
>
? conn IO vs ctx cancel
</text>
</g>
</g>
<!-- Sgo->io_cancel -->
<!-- Sgo->io_cancel -->
<g
id=
"edge6"
class=
"edge"
><title>
Sgo
->
io_cancel
</title>
<g
id=
"edge6"
class=
"edge"
><title>
Sgo
->
io_cancel
</title>
<path
fill=
"none"
stroke=
"black"
d=
"M306.771,-
153.772C270.736,-143.129 202.325,-122.923 152.833,-108.30
6"
/>
<path
fill=
"none"
stroke=
"black"
d=
"M306.771,-
243.513C270.736,-232.869 202.325,-212.664 152.833,-198.04
6"
/>
<polygon
fill=
"black"
stroke=
"black"
points=
"153.784,-1
04.937 143.202,-105.461 151.801,-111.65 153.784,-104.93
7"
/>
<polygon
fill=
"black"
stroke=
"black"
points=
"153.784,-1
94.677 143.202,-195.201 151.801,-201.39 153.784,-194.67
7"
/>
</g>
</g>
<!-- load_serial_next -->
<!-- load_serial_next -->
<g
id=
"node6"
class=
"node"
><title>
load_serial_next
</title>
<g
id=
"node6"
class=
"node"
><title>
load_serial_next
</title>
<ellipse
fill=
"none"
stroke=
"black"
cx=
"331.242"
cy=
"-
90
"
rx=
"124.578"
ry=
"18"
/>
<ellipse
fill=
"none"
stroke=
"black"
cx=
"331.242"
cy=
"-
179.74
"
rx=
"124.578"
ry=
"18"
/>
<text
text-anchor=
"start"
x=
"243.242"
y=
"-
87.3
"
font-family=
"Times,serif"
font-size=
"14.00"
>
? GetObject return += serial
</text>
<text
text-anchor=
"start"
x=
"243.242"
y=
"-
177.04
"
font-family=
"Times,serif"
font-size=
"14.00"
>
? GetObject return += serial
</text>
<text
text-anchor=
"start"
x=
"398.242"
y=
"-
87.3
"
font-family=
"Times,serif"
baseline-shift=
"sub"
font-size=
"14.00"
>
next
</text>
<text
text-anchor=
"start"
x=
"398.242"
y=
"-
177.04
"
font-family=
"Times,serif"
baseline-shift=
"sub"
font-size=
"14.00"
>
next
</text>
</g>
</g>
<!-- Sgo->load_serial_next -->
<!-- Sgo->load_serial_next -->
<g
id=
"edge7"
class=
"edge"
><title>
Sgo
->
load_serial_next
</title>
<g
id=
"edge7"
class=
"edge"
><title>
Sgo
->
load_serial_next
</title>
<path
fill=
"none"
stroke=
"black"
d=
"M331.242,-
143.697C331.242,-135.983 331.242,-126.712 331.242,-118.112
"
/>
<path
fill=
"none"
stroke=
"black"
d=
"M331.242,-
233.437C331.242,-225.723 331.242,-216.453 331.242,-207.853
"
/>
<polygon
fill=
"black"
stroke=
"black"
points=
"334.742,-
118.104 331.242,-108.104 327.742,-118.104 334.742,-118.10
4"
/>
<polygon
fill=
"black"
stroke=
"black"
points=
"334.742,-
207.844 331.242,-197.844 327.742,-207.844 334.742,-207.84
4"
/>
</g>
</g>
<!-- Sgo_speed -->
<!-- Sgo_speed -->
<g
id=
"node7"
class=
"node"
><title>
Sgo_speed
</title>
<g
id=
"node7"
class=
"node"
><title>
Sgo_speed
</title>
<ellipse
fill=
"none"
stroke=
"black"
cx=
"551.242"
cy=
"-
90
"
rx=
"77.1866"
ry=
"18"
/>
<ellipse
fill=
"none"
stroke=
"black"
cx=
"551.242"
cy=
"-
179.74
"
rx=
"77.1866"
ry=
"18"
/>
<text
text-anchor=
"start"
x=
"499.742"
y=
"-
87.3
"
font-family=
"Times,serif"
font-size=
"14.00"
>
S
</text>
<text
text-anchor=
"start"
x=
"499.742"
y=
"-
177.04
"
font-family=
"Times,serif"
font-size=
"14.00"
>
S
</text>
<text
text-anchor=
"start"
x=
"507.742"
y=
"-
87.3
"
font-family=
"Times,serif"
baseline-shift=
"sub"
font-size=
"14.00"
>
go
</text>
<text
text-anchor=
"start"
x=
"507.742"
y=
"-
177.04
"
font-family=
"Times,serif"
baseline-shift=
"sub"
font-size=
"14.00"
>
go
</text>
<text
text-anchor=
"start"
x=
"520.742"
y=
"-
87.3
"
font-family=
"Times,serif"
font-size=
"14.00"
>
 
speed/latency
</text>
<text
text-anchor=
"start"
x=
"520.742"
y=
"-
177.04
"
font-family=
"Times,serif"
font-size=
"14.00"
>
 
speed/latency
</text>
</g>
</g>
<!-- Sgo->Sgo_speed -->
<!-- Sgo->Sgo_speed -->
<g
id=
"edge8"
class=
"edge"
><title>
Sgo
->
Sgo_speed
</title>
<g
id=
"edge8"
class=
"edge"
><title>
Sgo
->
Sgo_speed
</title>
<path
fill=
"none"
stroke=
"black"
d=
"M354.616,-
152.712C362.712,-149.889 371.858,-146.753 380.242,-144 418.81,-131.337 462.533,-117.799 496.113,-107.57
6"
/>
<path
fill=
"none"
stroke=
"black"
d=
"M354.616,-
242.452C362.712,-239.629 371.858,-236.493 380.242,-233.74 418.81,-221.077 462.533,-207.539 496.113,-197.31
6"
/>
<polygon
fill=
"black"
stroke=
"black"
points=
"497.196,-
110.905 505.746,-104.649 495.161,-104.207 497.196,-110.90
5"
/>
<polygon
fill=
"black"
stroke=
"black"
points=
"497.196,-
200.645 505.746,-194.389 495.161,-193.947 497.196,-200.64
5"
/>
</g>
</g>
<!--
Mmap_go
-->
<!--
garbage
-->
<g
id=
"node8"
class=
"node"
><title>
Mmap_go
</title>
<g
id=
"node8"
class=
"node"
><title>
garbage
</title>
<ellipse
fill=
"none"
stroke=
"black"
cx=
"
329.242"
cy=
"-18"
rx=
"92.0841
"
ry=
"18"
/>
<ellipse
fill=
"none"
stroke=
"black"
cx=
"
277.242"
cy=
"-98.8701"
rx=
"38.1938
"
ry=
"18"
/>
<text
text-anchor=
"middle"
x=
"
329.242"
y=
"-14.3"
font-family=
"Times,serif"
font-size=
"14.00"
>
io.ReaderAt via mmap
</text>
<text
text-anchor=
"middle"
x=
"
277.242"
y=
"-95.1701"
font-family=
"Times,serif"
font-size=
"14.00"
>
garbage
</text>
</g>
</g>
<!-- Sgo_speed->Mmap_go -->
<!-- Sgo_speed->garbage -->
<g
id=
"edge9"
class=
"edge"
><title>
Sgo_speed
->
Mmap_go
</title>
<g
id=
"edge9"
class=
"edge"
><title>
Sgo_speed
->
garbage
</title>
<path
fill=
"none"
stroke=
"black"
d=
"M507.382,-75.1703C472.467,-64.161 423.355,-48.6754 385.539,-36.7513"
/>
<path
fill=
"none"
stroke=
"black"
d=
"M504.451,-165.271C452.4,-150.289 369.077,-126.304 319.106,-111.921"
/>
<polygon
fill=
"black"
stroke=
"black"
points=
"386.279,-33.3149 375.689,-33.6457 384.174,-39.9909 386.279,-33.3149"
/>
<polygon
fill=
"black"
stroke=
"black"
points=
"319.852,-108.493 309.274,-109.091 317.916,-115.22 319.852,-108.493"
/>
</g>
<!-- diskio -->
<g
id=
"node9"
class=
"node"
><title>
diskio
</title>
<ellipse
fill=
"none"
stroke=
"black"
cx=
"497.242"
cy=
"-98.8701"
rx=
"34.394"
ry=
"18"
/>
<text
text-anchor=
"middle"
x=
"497.242"
y=
"-95.1701"
font-family=
"Times,serif"
font-size=
"14.00"
>
disk io
</text>
</g>
<!-- Sgo_speed->diskio -->
<g
id=
"edge10"
class=
"edge"
><title>
Sgo_speed
->
diskio
</title>
<path
fill=
"none"
stroke=
"black"
d=
"M539.524,-161.626C532.086,-150.762 522.34,-136.528 514.08,-124.464"
/>
<polygon
fill=
"black"
stroke=
"black"
points=
"516.92,-122.416 508.382,-116.142 511.144,-126.37 516.92,-122.416"
/>
</g>
<!-- ConnClose_notimer -->
<g
id=
"node10"
class=
"node"
><title>
ConnClose_notimer
</title>
<ellipse
fill=
"none"
stroke=
"black"
cx=
"606.242"
cy=
"-98.8701"
rx=
"56.6372"
ry=
"26.7407"
/>
<text
text-anchor=
"middle"
x=
"606.242"
y=
"-102.67"
font-family=
"Times,serif"
font-size=
"14.00"
>
Conn.Close
</text>
<text
text-anchor=
"middle"
x=
"606.242"
y=
"-87.6701"
font-family=
"Times,serif"
font-size=
"14.00"
>
no timer
</text>
</g>
<!-- Sgo_speed->ConnClose_notimer -->
<g
id=
"edge11"
class=
"edge"
><title>
Sgo_speed
->
ConnClose_notimer
</title>
<path
fill=
"none"
stroke=
"black"
d=
"M563.176,-161.626C568.992,-153.287 576.192,-142.961 583.03,-133.156"
/>
<polygon
fill=
"black"
stroke=
"black"
points=
"586.053,-134.94 588.902,-124.735 580.311,-130.936 586.053,-134.94"
/>
</g>
<!-- QSgo_speed -->
<g
id=
"node11"
class=
"node"
><title>
QSgo_speed
</title>
<ellipse
fill=
"none"
stroke=
"black"
cx=
"754.242"
cy=
"-98.8701"
rx=
"27"
ry=
"18"
/>
<text
text-anchor=
"start"
x=
"750.742"
y=
"-95.1701"
font-family=
"Times,serif"
font-size=
"14.00"
>
?
</text>
</g>
<!-- Sgo_speed->QSgo_speed -->
<g
id=
"edge12"
class=
"edge"
><title>
Sgo_speed
->
QSgo_speed
</title>
<path
fill=
"none"
stroke=
"black"
d=
"M589.424,-163.905C627.638,-149.059 685.787,-126.466 721.825,-112.465"
/>
<polygon
fill=
"black"
stroke=
"black"
points=
"723.314,-115.641 731.368,-108.757 720.779,-109.116 723.314,-115.641"
/>
</g>
<!-- pktbuf_alloc -->
<g
id=
"node14"
class=
"node"
><title>
pktbuf_alloc
</title>
<ellipse
fill=
"none"
stroke=
"black"
cx=
"319.242"
cy=
"-18"
rx=
"35.9954"
ry=
"18"
/>
<text
text-anchor=
"start"
x=
"299.742"
y=
"-14.3"
font-family=
"Times,serif"
font-size=
"14.00"
>
PktBuf
</text>
</g>
<!-- garbage->pktbuf_alloc -->
<g
id=
"edge15"
class=
"edge"
><title>
garbage
->
pktbuf_alloc
</title>
<path
fill=
"none"
stroke=
"black"
d=
"M286.149,-81.1437C291.773,-70.5825 299.152,-56.7249 305.515,-44.7762"
/>
<polygon
fill=
"black"
stroke=
"black"
points=
"308.736,-46.1738 310.347,-35.7022 302.558,-42.8836 308.736,-46.1738"
/>
</g>
<!-- msg_alloc -->
<g
id=
"node15"
class=
"node"
><title>
msg_alloc
</title>
<ellipse
fill=
"none"
stroke=
"black"
cx=
"160.242"
cy=
"-18"
rx=
"27"
ry=
"18"
/>
<text
text-anchor=
"start"
x=
"147.742"
y=
"-14.3"
font-family=
"Times,serif"
font-size=
"14.00"
>
Msg
</text>
</g>
<!-- garbage->msg_alloc -->
<g
id=
"edge16"
class=
"edge"
><title>
garbage
->
msg_alloc
</title>
<path
fill=
"none"
stroke=
"black"
d=
"M256.324,-83.7697C237,-70.743 208.187,-51.3204 187.155,-37.1423"
/>
<polygon
fill=
"black"
stroke=
"black"
points=
"188.916,-34.1085 178.668,-31.4211 185.003,-39.9129 188.916,-34.1085"
/>
</g>
<!-- conn_alloc -->
<g
id=
"node16"
class=
"node"
><title>
conn_alloc
</title>
<ellipse
fill=
"none"
stroke=
"black"
cx=
"235.242"
cy=
"-18"
rx=
"29.795"
ry=
"18"
/>
<text
text-anchor=
"start"
x=
"220.242"
y=
"-14.3"
font-family=
"Times,serif"
font-size=
"14.00"
>
Conn
</text>
</g>
<!-- garbage->conn_alloc -->
<g
id=
"edge17"
class=
"edge"
><title>
garbage
->
conn_alloc
</title>
<path
fill=
"none"
stroke=
"black"
d=
"M268.335,-81.1437C262.672,-70.5112 255.231,-56.5375 248.839,-44.5342"
/>
<polygon
fill=
"black"
stroke=
"black"
points=
"251.782,-42.6131 243.992,-35.4318 245.603,-45.9034 251.782,-42.6131"
/>
</g>
</g>
<!--
sha1_index
-->
<!--
gosched
-->
<g
id=
"node
9"
class=
"node"
><title>
sha1_index
</title>
<g
id=
"node
17"
class=
"node"
><title>
gosched
</title>
<ellipse
fill=
"none"
stroke=
"black"
cx=
"
495.242"
cy=
"-18"
rx=
"55.4913
"
ry=
"18"
/>
<ellipse
fill=
"none"
stroke=
"black"
cx=
"
614.242"
cy=
"-18"
rx=
"66.0889
"
ry=
"18"
/>
<text
text-anchor=
"middle"
x=
"
495.242"
y=
"-14.3"
font-family=
"Times,serif"
font-size=
"14.00"
>
? sha1 index
</text>
<text
text-anchor=
"middle"
x=
"
614.242"
y=
"-14.3"
font-family=
"Times,serif"
font-size=
"14.00"
>
? go scheduling
</text>
</g>
</g>
<!--
Sgo_speed->sha1_index
-->
<!--
diskio->gosched
-->
<g
id=
"edge1
0"
class=
"edge"
><title>
Sgo_speed
->
sha1_index
</title>
<g
id=
"edge1
8"
class=
"edge"
><title>
diskio
->
gosched
</title>
<path
fill=
"none"
stroke=
"black"
d=
"M5
37.686,-72.055C530.876,-63.5427 522.496,-53.0684 514.987,-43.6815
"
/>
<path
fill=
"none"
stroke=
"black"
d=
"M5
17.621,-84.1319C535.381,-72.1605 561.441,-54.5929 582.023,-40.7187
"
/>
<polygon
fill=
"black"
stroke=
"black"
points=
"5
17.653,-41.4113 508.673,-35.789 512.187,-45.7842 517.653,-41.4113
"
/>
<polygon
fill=
"black"
stroke=
"black"
points=
"5
84.132,-43.5177 590.468,-35.0259 580.22,-37.7133 584.132,-43.5177
"
/>
</g>
</g>
<!--
garbage
-->
<!--
GOMAXPROCS
-->
<g
id=
"node1
0"
class=
"node"
><title>
garbage
</title>
<g
id=
"node1
8"
class=
"node"
><title>
GOMAXPROCS
</title>
<ellipse
fill=
"none"
stroke=
"black"
cx=
"
607.242"
cy=
"-18"
rx=
"38.1938
"
ry=
"18"
/>
<ellipse
fill=
"none"
stroke=
"black"
cx=
"
451.242"
cy=
"-18"
rx=
"78.7863
"
ry=
"18"
/>
<text
text-anchor=
"middle"
x=
"
607.242"
y=
"-14.3"
font-family=
"Times,serif"
font-size=
"14.00"
>
garbage
</text>
<text
text-anchor=
"middle"
x=
"
451.242"
y=
"-14.3"
font-family=
"Times,serif"
font-size=
"14.00"
>
? GOMAXPROCS
</text>
</g>
</g>
<!--
Sgo_speed->garbage
-->
<!--
diskio->GOMAXPROCS
-->
<g
id=
"edge1
1"
class=
"edge"
><title>
Sgo_speed
->
garbage
</title>
<g
id=
"edge1
9"
class=
"edge"
><title>
diskio
->
GOMAXPROCS
</title>
<path
fill=
"none"
stroke=
"black"
d=
"M
564.798,-72.055C571.708,-63.4175 580.234,-52.7599 587.827,-43.2681
"
/>
<path
fill=
"none"
stroke=
"black"
d=
"M
487.71,-81.5281C481.503,-70.8854 473.275,-56.7779 466.206,-44.6568
"
/>
<polygon
fill=
"black"
stroke=
"black"
points=
"
590.682,-45.3022 594.196,-35.307 585.216,-40.9293 590.682,-45.3022
"
/>
<polygon
fill=
"black"
stroke=
"black"
points=
"
469.14,-42.74 461.078,-35.8652 463.093,-46.2667 469.14,-42.74
"
/>
</g>
</g>
<!-- gosched -->
<!-- Mmap_go -->
<g
id=
"node11"
class=
"node"
><title>
gosched
</title>
<g
id=
"node12"
class=
"node"
><title>
Mmap_go
</title>
<ellipse
fill=
"none"
stroke=
"black"
cx=
"730.242"
cy=
"-18"
rx=
"66.0889"
ry=
"18"
/>
<ellipse
fill=
"none"
stroke=
"black"
cx=
"926.242"
cy=
"-18"
rx=
"98.5829"
ry=
"18"
/>
<text
text-anchor=
"middle"
x=
"730.242"
y=
"-14.3"
font-family=
"Times,serif"
font-size=
"14.00"
>
? go scheduling
</text>
<text
text-anchor=
"middle"
x=
"926.242"
y=
"-14.3"
font-family=
"Times,serif"
font-size=
"14.00"
>
? io.ReaderAt via mmap
</text>
</g>
<!-- QSgo_speed->Mmap_go -->
<g
id=
"edge13"
class=
"edge"
><title>
QSgo_speed
->
Mmap_go
</title>
<path
fill=
"none"
stroke=
"black"
d=
"M776.026,-87.8811C802.632,-75.681 848.289,-54.7449 882.302,-39.1484"
/>
<polygon
fill=
"black"
stroke=
"black"
points=
"883.93,-42.2524 891.561,-34.9027 881.012,-35.8894 883.93,-42.2524"
/>
</g>
<!-- sha1_index -->
<g
id=
"node13"
class=
"node"
><title>
sha1_index
</title>
<ellipse
fill=
"none"
stroke=
"black"
cx=
"754.242"
cy=
"-18"
rx=
"55.4913"
ry=
"18"
/>
<text
text-anchor=
"middle"
x=
"754.242"
y=
"-14.3"
font-family=
"Times,serif"
font-size=
"14.00"
>
? sha1 index
</text>
</g>
</g>
<!--
Sgo_speed->gosched
-->
<!--
QSgo_speed->sha1_index
-->
<g
id=
"edge1
2"
class=
"edge"
><title>
Sgo_speed
->
gosched
</title>
<g
id=
"edge1
4"
class=
"edge"
><title>
QSgo_speed
->
sha1_index
</title>
<path
fill=
"none"
stroke=
"black"
d=
"M
589.203,-74.1548C617.048,-63.2657 654.989,-48.4284 684.506,-36.8854
"
/>
<path
fill=
"none"
stroke=
"black"
d=
"M
754.242,-80.7564C754.242,-70.7312 754.242,-57.8362 754.242,-46.4246
"
/>
<polygon
fill=
"black"
stroke=
"black"
points=
"
686.128,-40.0093 694.166,-33.1076 683.578,-33.4901 686.128,-40.0093
"
/>
<polygon
fill=
"black"
stroke=
"black"
points=
"
757.742,-46.0802 754.242,-36.0802 750.742,-46.0803 757.742,-46.0802
"
/>
</g>
</g>
<!-- Cpy_r_Sgo -->
<!-- Cpy_r_Sgo -->
<g
id=
"node1
2
"
class=
"node"
><title>
Cpy_r_Sgo
</title>
<g
id=
"node1
9
"
class=
"node"
><title>
Cpy_r_Sgo
</title>
<ellipse
fill=
"
none"
stroke=
"black"
cx=
"228.242"
cy=
"-23
4"
rx=
"61.99"
ry=
"18"
/>
<ellipse
fill=
"
lightyellow"
stroke=
"black"
cx=
"228.242"
cy=
"-323.7
4"
rx=
"61.99"
ry=
"18"
/>
<text
text-anchor=
"start"
x=
"188.742"
y=
"-
231.3
"
font-family=
"Times,serif"
font-size=
"14.00"
>
C
</text>
<text
text-anchor=
"start"
x=
"188.742"
y=
"-
321.04
"
font-family=
"Times,serif"
font-size=
"14.00"
>
C
</text>
<text
text-anchor=
"start"
x=
"198.742"
y=
"-
231.3
"
font-family=
"Times,serif"
baseline-shift=
"sub"
font-size=
"14.00"
>
py
</text>
<text
text-anchor=
"start"
x=
"198.742"
y=
"-
321.04
"
font-family=
"Times,serif"
baseline-shift=
"sub"
font-size=
"14.00"
>
py
</text>
<text
text-anchor=
"start"
x=
"211.742"
y=
"-
231.3
"
font-family=
"Times,serif"
font-size=
"14.00"
>
 
read S
</text>
<text
text-anchor=
"start"
x=
"211.742"
y=
"-
321.04
"
font-family=
"Times,serif"
font-size=
"14.00"
>
 
read S
</text>
<text
text-anchor=
"start"
x=
"254.742"
y=
"-
231.3
"
font-family=
"Times,serif"
baseline-shift=
"sub"
font-size=
"14.00"
>
go
</text>
<text
text-anchor=
"start"
x=
"254.742"
y=
"-
321.04
"
font-family=
"Times,serif"
baseline-shift=
"sub"
font-size=
"14.00"
>
go
</text>
</g>
</g>
<!-- Cpy_r_Sgo->Sgo -->
<!-- Cpy_r_Sgo->Sgo -->
<g
id=
"edge
13
"
class=
"edge"
><title>
Cpy_r_Sgo
->
Sgo
</title>
<g
id=
"edge
20
"
class=
"edge"
><title>
Cpy_r_Sgo
->
Sgo
</title>
<path
fill=
"none"
stroke=
"black"
d=
"M251.357,-
217.291C267.071,-206.611 287.912,-192.447 304.367,-181.26
4"
/>
<path
fill=
"none"
stroke=
"black"
d=
"M251.357,-
307.031C267.071,-296.351 287.912,-282.187 304.367,-271.00
4"
/>
<polygon
fill=
"black"
stroke=
"black"
points=
"306.693,-
183.915 312.997,-175.399 302.759,-178.126 306.693,-183.91
5"
/>
<polygon
fill=
"black"
stroke=
"black"
points=
"306.693,-
273.655 312.997,-265.139 302.759,-267.866 306.693,-273.65
5"
/>
</g>
</g>
<!-- Cgo_r_Sgo -->
<!-- Cgo_r_Sgo -->
<g
id=
"node
13
"
class=
"node"
><title>
Cgo_r_Sgo
</title>
<g
id=
"node
20
"
class=
"node"
><title>
Cgo_r_Sgo
</title>
<ellipse
fill=
"
none"
stroke=
"black"
cx=
"318.242"
cy=
"-378
"
rx=
"61.99"
ry=
"18"
/>
<ellipse
fill=
"
lightyellow"
stroke=
"black"
cx=
"318.242"
cy=
"-467.74
"
rx=
"61.99"
ry=
"18"
/>
<text
text-anchor=
"start"
x=
"278.742"
y=
"-
375.3
"
font-family=
"Times,serif"
font-size=
"14.00"
>
C
</text>
<text
text-anchor=
"start"
x=
"278.742"
y=
"-
465.04
"
font-family=
"Times,serif"
font-size=
"14.00"
>
C
</text>
<text
text-anchor=
"start"
x=
"288.742"
y=
"-
375.3
"
font-family=
"Times,serif"
baseline-shift=
"sub"
font-size=
"14.00"
>
go
</text>
<text
text-anchor=
"start"
x=
"288.742"
y=
"-
465.04
"
font-family=
"Times,serif"
baseline-shift=
"sub"
font-size=
"14.00"
>
go
</text>
<text
text-anchor=
"start"
x=
"301.742"
y=
"-
375.3
"
font-family=
"Times,serif"
font-size=
"14.00"
>
 
read S
</text>
<text
text-anchor=
"start"
x=
"301.742"
y=
"-
465.04
"
font-family=
"Times,serif"
font-size=
"14.00"
>
 
read S
</text>
<text
text-anchor=
"start"
x=
"344.742"
y=
"-
375.3
"
font-family=
"Times,serif"
baseline-shift=
"sub"
font-size=
"14.00"
>
go
</text>
<text
text-anchor=
"start"
x=
"344.742"
y=
"-
465.04
"
font-family=
"Times,serif"
baseline-shift=
"sub"
font-size=
"14.00"
>
go
</text>
</g>
</g>
<!-- Cgo_r_Sgo->Cgo -->
<!-- Cgo_r_Sgo->Cgo -->
<g
id=
"edge
14
"
class=
"edge"
><title>
Cgo_r_Sgo
->
Cgo
</title>
<g
id=
"edge
21
"
class=
"edge"
><title>
Cgo_r_Sgo
->
Cgo
</title>
<path
fill=
"none"
stroke=
"black"
d=
"M340.479,-
361.116C355.251,-350.565 374.702,-336.671 390.197,-325.60
3"
/>
<path
fill=
"none"
stroke=
"black"
d=
"M340.479,-
450.856C355.251,-440.305 374.702,-426.411 390.197,-415.34
3"
/>
<polygon
fill=
"black"
stroke=
"black"
points=
"392.241,-
328.445 398.344,-319.784 388.172,-322.749 392.241,-328.44
5"
/>
<polygon
fill=
"black"
stroke=
"black"
points=
"392.241,-
418.185 398.344,-409.524 388.172,-412.489 392.241,-418.18
5"
/>
</g>
</g>
<!-- Cgo_r_Sgo->Sgo -->
<!-- Cgo_r_Sgo->Sgo -->
<g
id=
"edge
15
"
class=
"edge"
><title>
Cgo_r_Sgo
->
Sgo
</title>
<g
id=
"edge
22
"
class=
"edge"
><title>
Cgo_r_Sgo
->
Sgo
</title>
<path
fill=
"none"
stroke=
"black"
d=
"M319.284,-
359.849C321.532,-322.832 326.857,-235.181 329.578,-190.38
6"
/>
<path
fill=
"none"
stroke=
"black"
d=
"M319.284,-
449.589C321.532,-412.572 326.857,-324.921 329.578,-280.12
6"
/>
<polygon
fill=
"black"
stroke=
"black"
points=
"333.082,-
190.426 330.195,-180.232 326.095,-190.002 333.082,-190.42
6"
/>
<polygon
fill=
"black"
stroke=
"black"
points=
"333.082,-
280.166 330.195,-269.973 326.095,-279.742 333.082,-280.16
6"
/>
</g>
</g>
<!-- Cgo_r_Spy -->
<!-- Cgo_r_Spy -->
<g
id=
"node
14
"
class=
"node"
><title>
Cgo_r_Spy
</title>
<g
id=
"node
21
"
class=
"node"
><title>
Cgo_r_Spy
</title>
<ellipse
fill=
"
none"
stroke=
"black"
cx=
"459.242"
cy=
"-378
"
rx=
"61.99"
ry=
"18"
/>
<ellipse
fill=
"
lightyellow"
stroke=
"black"
cx=
"459.242"
cy=
"-467.74
"
rx=
"61.99"
ry=
"18"
/>
<text
text-anchor=
"start"
x=
"419.742"
y=
"-
375.3
"
font-family=
"Times,serif"
font-size=
"14.00"
>
C
</text>
<text
text-anchor=
"start"
x=
"419.742"
y=
"-
465.04
"
font-family=
"Times,serif"
font-size=
"14.00"
>
C
</text>
<text
text-anchor=
"start"
x=
"429.742"
y=
"-
375.3
"
font-family=
"Times,serif"
baseline-shift=
"sub"
font-size=
"14.00"
>
go
</text>
<text
text-anchor=
"start"
x=
"429.742"
y=
"-
465.04
"
font-family=
"Times,serif"
baseline-shift=
"sub"
font-size=
"14.00"
>
go
</text>
<text
text-anchor=
"start"
x=
"442.742"
y=
"-
375.3
"
font-family=
"Times,serif"
font-size=
"14.00"
>
 
read S
</text>
<text
text-anchor=
"start"
x=
"442.742"
y=
"-
465.04
"
font-family=
"Times,serif"
font-size=
"14.00"
>
 
read S
</text>
<text
text-anchor=
"start"
x=
"485.742"
y=
"-
375.3
"
font-family=
"Times,serif"
baseline-shift=
"sub"
font-size=
"14.00"
>
py
</text>
<text
text-anchor=
"start"
x=
"485.742"
y=
"-
465.04
"
font-family=
"Times,serif"
baseline-shift=
"sub"
font-size=
"14.00"
>
py
</text>
</g>
</g>
<!-- Cgo_r_Spy->Cgo -->
<!-- Cgo_r_Spy->Cgo -->
<g
id=
"edge
16
"
class=
"edge"
><title>
Cgo_r_Spy
->
Cgo
</title>
<g
id=
"edge
23
"
class=
"edge"
><title>
Cgo_r_Spy
->
Cgo
</title>
<path
fill=
"none"
stroke=
"black"
d=
"M448.833,-
360.055C443.559,-351.469 437.058,-340.888 431.254,-331.43
9"
/>
<path
fill=
"none"
stroke=
"black"
d=
"M448.833,-
449.795C443.559,-441.209 437.058,-430.628 431.254,-421.17
9"
/>
<polygon
fill=
"black"
stroke=
"black"
points=
"434.182,-
329.518 425.965,-322.829 428.217,-333.182 434.182,-329.51
8"
/>
<polygon
fill=
"black"
stroke=
"black"
points=
"434.182,-
419.258 425.965,-412.57 428.217,-422.922 434.182,-419.25
8"
/>
</g>
</g>
<!-- Cleanup -->
<!-- Cleanup -->
<g
id=
"node15"
class=
"node"
><title>
Cleanup
</title>
<g
id=
"node22"
class=
"node"
><title>
Cleanup
</title>
<ellipse
fill=
"none"
stroke=
"black"
cx=
"606.242"
cy=
"-378"
rx=
"66.8882"
ry=
"18"
/>
<ellipse
fill=
"none"
stroke=
"black"
cx=
"606.242"
cy=
"-467.74"
rx=
"66.8882"
ry=
"18"
/>
<text
text-anchor=
"middle"
x=
"606.242"
y=
"-374.3"
font-family=
"Times,serif"
font-size=
"14.00"
>
Cleanup history
</text>
<text
text-anchor=
"middle"
x=
"606.242"
y=
"-464.04"
font-family=
"Times,serif"
font-size=
"14.00"
>
Cleanup history
</text>
</g>
<!-- Post -->
<g
id=
"node23"
class=
"node"
><title>
Post
</title>
<ellipse
fill=
"none"
stroke=
"black"
cx=
"718.242"
cy=
"-467.74"
rx=
"27"
ry=
"18"
/>
<text
text-anchor=
"middle"
x=
"718.242"
y=
"-464.04"
font-family=
"Times,serif"
font-size=
"14.00"
>
Post
</text>
</g>
</g>
</g>
</g>
</svg>
</svg>
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment