Documentation
¶
Overview ¶
Package secbenchdef contains struct definitions for secbench benchmarks. All structs in this package need to be JSON-serializable.
Index ¶
Constants ¶
const ( // NonExistentFD is an FD that is overwhelmingly likely to not exist, // because it would mean that the application has opened 2^31-1 FDs. // Useful to make sure syscalls involving FDs don't actually // do anything serious. NonExistentFD = uintptr(0x7fffffff) // BadFD can be used as an invalid FD in syscall arguments. BadFD = uintptr(0x80000000) )
const ( // NanosleepZero calls nanosleep(2) to sleep for zero nanoseconds. NanosleepZero = SpecialSyscall("NanosleepZero") // PPollNonExistent calls ppoll(2) with a non-existent FD and a tiny timeout. PPollNonExistent = SpecialSyscall("PPollNonExistent") // RTSigreturn calls a system call that stands in the place of `rt_sigreturn(2)`. RTSigreturn = SpecialSyscall("RTSigreturn") )
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type Bench ¶
type Bench struct {
// Name is the name of the benchmark.
Name string `json:"name"`
// Profile represents the syscall pattern profile being benchmarked.
Profile Profile `json:"profile"`
// Instructions is the seccomp-bpf program to run the benchmark with.
Instructions []bpf.Instruction `json:"instructions"`
// BuildStats contains information on timing and size of the program.
BuildStats seccomp.BuildStats `json:"buildStats"`
// AllowRejected can be set to true if some sequences in the application
// profile are expected to not be allowed.
// If this is the case, the program's overall performance will not be
// reported.
AllowRejected bool `json:"allowRejected"`
}
Bench represents a benchmark to run.
type BenchRunRequest ¶
type BenchRunRequest struct {
// Bench is the benchmark being run.
Bench Bench `json:"bench"`
// Iterations is the number of iterations to do (b.N).
Iterations uint64 `json:"iterations"`
// RandomSeed is the random seed to use to pick sequences.
RandomSeed int64 `json:"randomSeed"`
// ActiveSequences[i] is true if Bench.Profile.Sequences[i] should be
// run.
ActiveSequences []bool `json:"activeSequences"`
// InstallFilter is true if the seccomp-bpf filter should be actually
// installed. Setting this to false allows measuring the filter-less
// performance, so that it can be subtracted from performance with the
// filter.
InstallFilter bool `json:"installFilter"`
}
BenchRunRequest encodes a request sent to the benchmark runner binary.
type BenchRunResponse ¶
type BenchRunResponse struct {
// TotalNanos is the number of nanoseconds that the whole run took.
TotalNanos uint64 `json:"totalNanos"`
// SequenceMetrics is the per-sequence metrics, mapped by index against
// the sequences in the Profile.
SequenceMetrics []SequenceMetrics `json:"sequenceMetrics"`
}
BenchRunResponse encodes a response from the runner binary.
type Profile ¶
type Profile struct {
// Arch is the architecture of the application.
// Should be an AUDIT_ARCH_* value.
Arch uint32 `json:"arch"`
// Sequences is a set of weighted syscall sequences.
// A benchmark with a given Profile will run these sequences
// picked by weighted random choice.
Sequences []Sequence `json:"sequences"`
}
Profile represents an application's syscall profile.
type Sequence ¶
type Sequence struct {
// Name is the name of the sequence.
Name string `json:"name"`
// Weight is the weight of the sequence relative to all others within the
// same Profile.
Weight int `json:"weight"`
// Syscalls is the set of syscalls of the sequence.
Syscalls []Syscall `json:"syscalls"`
}
Sequence is a syscall sequence that the benchmark will make.
type SequenceMetrics ¶
type SequenceMetrics struct {
Iterations uint64 `json:"iterations"`
TotalNanos uint64 `json:"totalNanos"`
}
SequenceMetrics is the per-sequence part of BenchRunResponse.
type SpecialSyscall ¶
type SpecialSyscall string
SpecialSyscall are syscalls which need special handling. This can be syscalls where the arguments must be valid references to user memory.
func (SpecialSyscall) Call ¶
func (s SpecialSyscall) Call() (r1 uintptr, r2 uintptr, err error)
Call calls this syscall.
func (SpecialSyscall) Data ¶
func (s SpecialSyscall) Data(arch uint32) *linux.SeccompData
Data returns the seccomp data for this syscall.
func (SpecialSyscall) Seq ¶
func (s SpecialSyscall) Seq() []Syscall
Seq returns a one-item slice of the Syscall struct for this special syscall.
func (SpecialSyscall) Sys ¶
func (s SpecialSyscall) Sys() Syscall
Sys returns the Syscall struct for this special syscall.
type Syscall ¶
type Syscall struct {
// Special may be set for syscalls with special handling.
// If set, this takes precedence over the other fields.
Special SpecialSyscall `json:"special,omitempty"`
// Sysno is the syscall number.
Sysno uintptr `json:"sysno"`
// Args is the syscall arguments.
Args [6]uintptr `json:"args"`
}
Syscall is a single syscall within a Sequence.