1
0
Fork 0
mirror of https://github.com/ii64/gouring.git synced 2025-04-26 05:42:48 +02:00

feat: ring with options

Signed-off-by: Nugraha <26342994+ii64@users.noreply.github.com>
This commit is contained in:
Nugraha 2022-02-10 00:53:05 +07:00
parent b8dab73acf
commit 860871629c
Signed by untrusted user who does not match committer: Xeffy
GPG key ID: E41C08AD390E7C49
2 changed files with 27 additions and 2 deletions

17
core.go
View file

@ -6,11 +6,17 @@ import (
"github.com/pkg/errors"
)
func New(entries uint, params *IOUringParams) (*Ring, error) {
func New(entries uint, params *IOUringParams, options ...Option) (*Ring, error) {
r := &Ring{}
if params != nil {
r.params = *params
r.params = *params // copy
}
// option reconfiguring
for _, opt := range options {
opt(&r.params)
}
var err error
if r.fd, err = setup(r, entries, &r.params); err != nil {
err = errors.Wrap(err, "setup")
@ -19,6 +25,7 @@ func New(entries uint, params *IOUringParams) (*Ring, error) {
return r, nil
}
// Close ring
func (r *Ring) Close() (err error) {
if err = unsetup(r); err != nil {
err = errors.Wrap(err, "close")
@ -33,6 +40,7 @@ func (r *Ring) Close() (err error) {
return
}
// Register
func (r *Ring) Register(opcode UringRegisterOpcode, arg uintptr, nrArg uint) (ret int, err error) {
ret, err = register(r, opcode, arg, nrArg)
if err != nil {
@ -42,6 +50,7 @@ func (r *Ring) Register(opcode UringRegisterOpcode, arg uintptr, nrArg uint) (re
return
}
// Enter
func (r *Ring) Enter(toSubmit, minComplete uint, flags UringEnterFlag, sig *Sigset_t) (ret int, err error) {
ret, err = enter(r, toSubmit, minComplete, flags, sig)
if err != nil {
@ -53,18 +62,22 @@ func (r *Ring) Enter(toSubmit, minComplete uint, flags UringEnterFlag, sig *Sigs
//
// Params
func (r *Ring) Params() *IOUringParams {
return &r.params
}
// Fd of io uring
func (r *Ring) Fd() int {
return r.fd
}
// SQ Ring
func (r *Ring) SQ() SQRing {
return r.sq
}
// CQ Ring
func (r *Ring) CQ() CQRing {
return r.cq
}

12
options.go Normal file
View file

@ -0,0 +1,12 @@
package gouring
// Option
type Option func(p *IOUringParams)
// SQThread option
func SQThread(cpu, idleMS uint32) Option {
return func(p *IOUringParams) {
p.SQThreadCPU = cpu
p.SQThreadIdle = idleMS
}
}