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
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Levin Zimmermann
neoppod
Commits
219e1ced
Commit
219e1ced
authored
Jun 28, 2017
by
Kirill Smelkov
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
.
parent
8d3aec5b
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
179 additions
and
29 deletions
+179
-29
go/neo/trace.go
go/neo/trace.go
+1
-1
go/xcommon/tracing/cmd/gotrace/gotrace.go
go/xcommon/tracing/cmd/gotrace/gotrace.go
+32
-28
go/xcommon/xnet/pipenet/trace.go
go/xcommon/xnet/pipenet/trace.go
+146
-0
No files found.
go/neo/trace.go
View file @
219e1ced
...
@@ -80,4 +80,4 @@ func pipenet_traceListen_Attach(*tracing.ProbeGroup, func(laddr string)) *tracin
...
@@ -80,4 +80,4 @@ func pipenet_traceListen_Attach(*tracing.ProbeGroup, func(laddr string)) *tracin
func
pipenet_traceNew_Attach
(
*
tracing
.
ProbeGroup
,
func
(
name
string
))
*
tracing
.
Probe
func
pipenet_traceNew_Attach
(
*
tracing
.
ProbeGroup
,
func
(
name
string
))
*
tracing
.
Probe
//go:linkname pipenet_traceNewHost_Attach lab.nexedi.com/kirr/neo/go/xcommon/xnet/pipenet.traceNewHost_Attach
//go:linkname pipenet_traceNewHost_Attach lab.nexedi.com/kirr/neo/go/xcommon/xnet/pipenet.traceNewHost_Attach
func
pipenet_traceNewHost_Attach
(
*
tracing
.
ProbeGroup
,
func
(
host
*
Host
))
*
tracing
.
Probe
func
pipenet_traceNewHost_Attach
(
*
tracing
.
ProbeGroup
,
func
(
host
*
pipenet
.
Host
))
*
tracing
.
Probe
go/xcommon/tracing/cmd/gotrace/gotrace.go
View file @
219e1ced
...
@@ -257,24 +257,37 @@ func packageTrace(prog *loader.Program, pkgi *loader.PackageInfo) *Package {
...
@@ -257,24 +257,37 @@ func packageTrace(prog *loader.Program, pkgi *loader.PackageInfo) *Package {
// ----------------------------------------
// ----------------------------------------
// TypedArgv returns argument list with types qualified relative to original package
// Argv returns comma-separated argument-list
func
(
te
*
traceEvent
)
TypedArgv
()
string
{
func
(
te
*
traceEvent
)
Argv
()
string
{
return
TypedArgvRelativeTo
(
te
.
Pkgi
.
Pkg
)
argv
:=
[]
string
{}
for
_
,
field
:=
range
te
.
FuncDecl
.
Type
.
Params
.
List
{
for
_
,
name
:=
range
field
.
Names
{
argv
=
append
(
argv
,
name
.
Name
)
}
}
return
strings
.
Join
(
argv
,
", "
)
}
// ArgvTyped returns argument list with types qualified relative to original package
func
(
te
*
traceEvent
)
ArgvTyped
()
string
{
return
te
.
ArgvTypedRelativeTo
(
te
.
Pkgi
.
Pkg
)
}
}
func
(
te
*
traceEvent
)
TypedArgv
RelativeTo
(
pkg
*
types
.
Package
)
string
{
func
(
te
*
traceEvent
)
ArgvTyped
RelativeTo
(
pkg
*
types
.
Package
)
string
{
//format.Node(&buf, fset, te.FuncDecl.Type.Params)
//format.Node(&buf, fset, te.FuncDecl.Type.Params)
argv
:=
[]
string
{}
argv
:=
[]
string
{}
// default qualifier - relative to original package
// default qualifier - relative to original package
qf
=
func
(
pkg
*
types
.
Package
)
string
{
qf
:=
func
(
p
*
types
.
Package
)
string
{
//
original
package - unqualified
//
specified
package - unqualified
if
p
kg
==
te
.
Pkgi
.
P
kg
{
if
p
==
p
kg
{
return
""
return
""
}
}
// default qualification
// default qualification
return
p
kg
.
Name
()
return
p
.
Name
()
}
}
for
_
,
field
:=
range
te
.
FuncDecl
.
Type
.
Params
.
List
{
for
_
,
field
:=
range
te
.
FuncDecl
.
Type
.
Params
.
List
{
...
@@ -293,18 +306,6 @@ func (te *traceEvent) TypedArgvRelativeTo(pkg *types.Package) string {
...
@@ -293,18 +306,6 @@ func (te *traceEvent) TypedArgvRelativeTo(pkg *types.Package) string {
return
strings
.
Join
(
argv
,
", "
)
return
strings
.
Join
(
argv
,
", "
)
}
}
// Argv returns comma-separated argument-list
func
(
te
*
traceEvent
)
Argv
()
string
{
argv
:=
[]
string
{}
for
_
,
field
:=
range
te
.
FuncDecl
.
Type
.
Params
.
List
{
for
_
,
name
:=
range
field
.
Names
{
argv
=
append
(
argv
,
name
.
Name
)
}
}
return
strings
.
Join
(
argv
,
", "
)
}
// NeedPkgv returns packages that are needed for argument types
// NeedPkgv returns packages that are needed for argument types
func
(
te
*
traceEvent
)
NeedPkgv
()
[]
string
{
func
(
te
*
traceEvent
)
NeedPkgv
()
[]
string
{
...
@@ -325,12 +326,12 @@ func (te *traceEvent) NeedPkgv() []string {
...
@@ -325,12 +326,12 @@ func (te *traceEvent) NeedPkgv() []string {
// traceEventCodeTmpl is code template generated for one trace event
// traceEventCodeTmpl is code template generated for one trace event
var
traceEventCodeTmpl
=
template
.
Must
(
template
.
New
(
"traceevent"
)
.
Parse
(
`
var
traceEventCodeTmpl
=
template
.
Must
(
template
.
New
(
"traceevent"
)
.
Parse
(
`
// traceevent: {{.Name}}({{.
TypedArgv
}}) XXX better raw .Text (e.g. comments)
// traceevent: {{.Name}}({{.
ArgvTyped
}}) XXX better raw .Text (e.g. comments)
{{/* probe type for this trace event */ -}}
{{/* probe type for this trace event */ -}}
type _t_{{.Name}} struct {
type _t_{{.Name}} struct {
tracing.Probe
tracing.Probe
probefunc func({{.
TypedArgv
}})
probefunc func({{.
ArgvTyped
}})
}
}
{{/* list of probes attached (nil if nothing) */ -}}
{{/* list of probes attached (nil if nothing) */ -}}
...
@@ -341,21 +342,21 @@ var _{{.Name}} *_t_{{.Name}}
...
@@ -341,21 +342,21 @@ var _{{.Name}} *_t_{{.Name}}
* after https://github.com/golang/go/issues/19348 is done this separate
* after https://github.com/golang/go/issues/19348 is done this separate
* checking function will be inlined and tracepoint won't cost a function
* checking function will be inlined and tracepoint won't cost a function
* call when it is disabled */ -}}
* call when it is disabled */ -}}
func {{.Name}}({{.
TypedArgv
}}) {
func {{.Name}}({{.
ArgvTyped
}}) {
if _{{.Name}} != nil {
if _{{.Name}} != nil {
_{{.Name}}_run({{.Argv}})
_{{.Name}}_run({{.Argv}})
}
}
}
}
{{/* function to notify attached probes */ -}}
{{/* function to notify attached probes */ -}}
func _{{.Name}}_run({{.
TypedArgv
}}) {
func _{{.Name}}_run({{.
ArgvTyped
}}) {
for p := _{{.Name}}; p != nil; p = (*_t_{{.Name}})(unsafe.Pointer(p.Next())) {
for p := _{{.Name}}; p != nil; p = (*_t_{{.Name}})(unsafe.Pointer(p.Next())) {
p.probefunc({{.Argv}})
p.probefunc({{.Argv}})
}
}
}
}
{{/* function to attach a probe to tracepoint */ -}}
{{/* function to attach a probe to tracepoint */ -}}
func {{.Name}}_Attach(pg *tracing.ProbeGroup, probe func({{.
TypedArgv
}})) *tracing.Probe {
func {{.Name}}_Attach(pg *tracing.ProbeGroup, probe func({{.
ArgvTyped
}})) *tracing.Probe {
p := _t_{{.Name}}{probefunc: probe}
p := _t_{{.Name}}{probefunc: probe}
tracing.AttachProbe(pg, (**tracing.Probe)(unsafe.Pointer(&_{{.Name}})), &p.Probe)
tracing.AttachProbe(pg, (**tracing.Probe)(unsafe.Pointer(&_{{.Name}})), &p.Probe)
return &p.Probe
return &p.Probe
...
@@ -363,10 +364,9 @@ func {{.Name}}_Attach(pg *tracing.ProbeGroup, probe func({{.TypedArgv}})) *traci
...
@@ -363,10 +364,9 @@ func {{.Name}}_Attach(pg *tracing.ProbeGroup, probe func({{.TypedArgv}})) *traci
`
))
`
))
// traceEventImportTmpl is code template generated for importing one trace event
// traceEventImportTmpl is code template generated for importing one trace event
// FIXME func args types must be qualified
var
traceEventImportTmpl
=
template
.
Must
(
template
.
New
(
"traceimport"
)
.
Parse
(
`
var
traceEventImportTmpl
=
template
.
Must
(
template
.
New
(
"traceimport"
)
.
Parse
(
`
//go:linkname {{.Pkgi.Pkg.Name}}_{{.Name}}_Attach {{.Pkgi.Pkg.Path}}.{{.Name}}_Attach
//go:linkname {{.Pkgi.Pkg.Name}}_{{.Name}}_Attach {{.Pkgi.Pkg.Path}}.{{.Name}}_Attach
func {{.Pkgi.Pkg.Name}}_{{.Name}}_Attach(*tracing.ProbeGroup, func({{.
TypedArgv
}})) *tracing.Probe
func {{.Pkgi.Pkg.Name}}_{{.Name}}_Attach(*tracing.ProbeGroup, func({{.
ArgvTypedRelativeTo .ImporterPkg
}})) *tracing.Probe
`
))
`
))
// magic begins all files generated by gotrace
// magic begins all files generated by gotrace
...
@@ -507,7 +507,11 @@ func tracegen(pkgpath string) error {
...
@@ -507,7 +507,11 @@ func tracegen(pkgpath string) error {
for
_
,
event
:=
range
impPkg
.
Eventv
{
for
_
,
event
:=
range
impPkg
.
Eventv
{
needPkg
.
Add
(
event
.
NeedPkgv
()
...
)
needPkg
.
Add
(
event
.
NeedPkgv
()
...
)
err
=
traceEventImportTmpl
.
Execute
(
text
,
event
)
importedEvent
:=
struct
{
*
traceEvent
ImporterPkg
*
types
.
Package
}
{
event
,
pkgi
.
Pkg
}
err
=
traceEventImportTmpl
.
Execute
(
text
,
importedEvent
)
if
err
!=
nil
{
if
err
!=
nil
{
panic
(
err
)
// XXX
panic
(
err
)
// XXX
}
}
...
...
go/xcommon/xnet/pipenet/trace.go
0 → 100644
View file @
219e1ced
// Code generated by lab.nexedi.com/kirr/go123/tracing/cmd/gotrace; DO NOT EDIT.
package
pipenet
// code generated for tracepoints
import
(
"lab.nexedi.com/kirr/neo/go/xcommon/tracing"
"unsafe"
"net"
)
// traceevent: traceAccept(conn net.Conn) XXX better raw .Text (e.g. comments)
type
_t_traceAccept
struct
{
tracing
.
Probe
probefunc
func
(
conn
net
.
Conn
)
}
var
_traceAccept
*
_t_traceAccept
func
traceAccept
(
conn
net
.
Conn
)
{
if
_traceAccept
!=
nil
{
_traceAccept_run
(
conn
)
}
}
func
_traceAccept_run
(
conn
net
.
Conn
)
{
for
p
:=
_traceAccept
;
p
!=
nil
;
p
=
(
*
_t_traceAccept
)(
unsafe
.
Pointer
(
p
.
Next
()))
{
p
.
probefunc
(
conn
)
}
}
func
traceAccept_Attach
(
pg
*
tracing
.
ProbeGroup
,
probe
func
(
conn
net
.
Conn
))
*
tracing
.
Probe
{
p
:=
_t_traceAccept
{
probefunc
:
probe
}
tracing
.
AttachProbe
(
pg
,
(
**
tracing
.
Probe
)(
unsafe
.
Pointer
(
&
_traceAccept
)),
&
p
.
Probe
)
return
&
p
.
Probe
}
// traceevent: traceDial(addr string) XXX better raw .Text (e.g. comments)
type
_t_traceDial
struct
{
tracing
.
Probe
probefunc
func
(
addr
string
)
}
var
_traceDial
*
_t_traceDial
func
traceDial
(
addr
string
)
{
if
_traceDial
!=
nil
{
_traceDial_run
(
addr
)
}
}
func
_traceDial_run
(
addr
string
)
{
for
p
:=
_traceDial
;
p
!=
nil
;
p
=
(
*
_t_traceDial
)(
unsafe
.
Pointer
(
p
.
Next
()))
{
p
.
probefunc
(
addr
)
}
}
func
traceDial_Attach
(
pg
*
tracing
.
ProbeGroup
,
probe
func
(
addr
string
))
*
tracing
.
Probe
{
p
:=
_t_traceDial
{
probefunc
:
probe
}
tracing
.
AttachProbe
(
pg
,
(
**
tracing
.
Probe
)(
unsafe
.
Pointer
(
&
_traceDial
)),
&
p
.
Probe
)
return
&
p
.
Probe
}
// traceevent: traceListen(laddr string) XXX better raw .Text (e.g. comments)
type
_t_traceListen
struct
{
tracing
.
Probe
probefunc
func
(
laddr
string
)
}
var
_traceListen
*
_t_traceListen
func
traceListen
(
laddr
string
)
{
if
_traceListen
!=
nil
{
_traceListen_run
(
laddr
)
}
}
func
_traceListen_run
(
laddr
string
)
{
for
p
:=
_traceListen
;
p
!=
nil
;
p
=
(
*
_t_traceListen
)(
unsafe
.
Pointer
(
p
.
Next
()))
{
p
.
probefunc
(
laddr
)
}
}
func
traceListen_Attach
(
pg
*
tracing
.
ProbeGroup
,
probe
func
(
laddr
string
))
*
tracing
.
Probe
{
p
:=
_t_traceListen
{
probefunc
:
probe
}
tracing
.
AttachProbe
(
pg
,
(
**
tracing
.
Probe
)(
unsafe
.
Pointer
(
&
_traceListen
)),
&
p
.
Probe
)
return
&
p
.
Probe
}
// traceevent: traceNew(name string) XXX better raw .Text (e.g. comments)
type
_t_traceNew
struct
{
tracing
.
Probe
probefunc
func
(
name
string
)
}
var
_traceNew
*
_t_traceNew
func
traceNew
(
name
string
)
{
if
_traceNew
!=
nil
{
_traceNew_run
(
name
)
}
}
func
_traceNew_run
(
name
string
)
{
for
p
:=
_traceNew
;
p
!=
nil
;
p
=
(
*
_t_traceNew
)(
unsafe
.
Pointer
(
p
.
Next
()))
{
p
.
probefunc
(
name
)
}
}
func
traceNew_Attach
(
pg
*
tracing
.
ProbeGroup
,
probe
func
(
name
string
))
*
tracing
.
Probe
{
p
:=
_t_traceNew
{
probefunc
:
probe
}
tracing
.
AttachProbe
(
pg
,
(
**
tracing
.
Probe
)(
unsafe
.
Pointer
(
&
_traceNew
)),
&
p
.
Probe
)
return
&
p
.
Probe
}
// traceevent: traceNewHost(host *Host) XXX better raw .Text (e.g. comments)
type
_t_traceNewHost
struct
{
tracing
.
Probe
probefunc
func
(
host
*
Host
)
}
var
_traceNewHost
*
_t_traceNewHost
func
traceNewHost
(
host
*
Host
)
{
if
_traceNewHost
!=
nil
{
_traceNewHost_run
(
host
)
}
}
func
_traceNewHost_run
(
host
*
Host
)
{
for
p
:=
_traceNewHost
;
p
!=
nil
;
p
=
(
*
_t_traceNewHost
)(
unsafe
.
Pointer
(
p
.
Next
()))
{
p
.
probefunc
(
host
)
}
}
func
traceNewHost_Attach
(
pg
*
tracing
.
ProbeGroup
,
probe
func
(
host
*
Host
))
*
tracing
.
Probe
{
p
:=
_t_traceNewHost
{
probefunc
:
probe
}
tracing
.
AttachProbe
(
pg
,
(
**
tracing
.
Probe
)(
unsafe
.
Pointer
(
&
_traceNewHost
)),
&
p
.
Probe
)
return
&
p
.
Probe
}
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