Go io uring syscall implementation without CGO, rewrite on branch v0.4
Find a file
2022-10-11 22:51:18 +02:00
assets doc: update graph 2022-07-28 19:47:38 +07:00
bench/perf bench/perf: handle interrupt from iouring enter 2022-07-28 19:48:32 +07:00
examples feat: addes examples folder 2022-10-11 22:51:18 +02:00
.gitignore feat: read example 2022-10-11 12:48:54 +02:00
go.mod feat: addes examples folder 2022-10-11 22:51:18 +02:00
go.sum feat: addes examples folder 2022-10-11 22:51:18 +02:00
hdr.go all: use of unsafe pointer for ring, and adjustments 2022-07-28 19:45:51 +07:00
hdr_int_flags.go all: initial files 2022-07-05 04:52:54 +07:00
hdr_struct.go all: use of unsafe pointer for ring, and adjustments 2022-07-28 19:45:51 +07:00
inline_cost.py all: use of unsafe pointer for ring, and adjustments 2022-07-28 19:45:51 +07:00
LICENSE doc: add license 2022-09-04 17:41:10 +07:00
Makefile all: use of unsafe pointer for ring, and adjustments 2022-07-28 19:45:51 +07:00
prep.go all: use of unsafe pointer for ring, and adjustments 2022-07-28 19:45:51 +07:00
queue.go fix: minor code typo (#5) 2022-10-02 19:20:08 +07:00
queue_test.go feat: addes examples folder 2022-10-11 22:51:18 +02:00
README.md feat: read example 2022-10-11 12:48:54 +02:00
register.go all: use of unsafe pointer for ring, and adjustments 2022-07-28 19:45:51 +07:00
setup.go all: use of unsafe pointer for ring, and adjustments 2022-07-28 19:45:51 +07:00
sigset.go all: initial files 2022-07-05 04:52:54 +07:00
syscall.go all: use of unsafe pointer for ring, and adjustments 2022-07-28 19:45:51 +07:00
syscall_nr_amd64.go all: use of unsafe pointer for ring, and adjustments 2022-07-28 19:45:51 +07:00
uring.go fix: minor code typo (#5) 2022-10-02 19:20:08 +07:00
uring_bench_test.go all: use of unsafe pointer for ring, and adjustments 2022-07-28 19:45:51 +07:00
uring_test.go all: use of unsafe pointer for ring, and adjustments 2022-07-28 19:45:51 +07:00
util_ptr_arith.go all: use of unsafe pointer for ring, and adjustments 2022-07-28 19:45:51 +07:00
util_ptr_arith_test.go all: use of unsafe pointer for ring, and adjustments 2022-07-28 19:45:51 +07:00
util_union.go all: use of unsafe pointer for ring, and adjustments 2022-07-28 19:45:51 +07:00

gouring

License: MIT Go Reference

go get github.com/ii64/gouring

Examples

Write

// setup
h, err := gouring.New(256, 0)
if err != nil { 
	log.Fatal("Error creating ring: ", err)
}
defer h.Close()

fd, err := unix.Open("/tmp/gouring_test", unix.O_RDWR, 0677)
if err != nil {
	log.Fatal("Error opening file: ", err)
}

sqe := h.GetSqe()
b := []byte("io_uring!\n")
gouring.PrepWrite(sqe, fd, &b[0], len(b), 0)

submitted, err := h.SubmitAndWait(1)
if err != nil { 
	log.Fatal("Error waiting ring: ", err)
}
println(submitted) // 1

var cqe *gouring.IoUringCqe
err = h.WaitCqe(&cqe) 
if err != nil {
	log.Fatal("Error waiting cqe: ", err)
} // check also EINTR

_ = cqe.UserData
_ = cqe.Res
_ = cqe.Flags

Read

// setup
h, err := gouring.New(256, 0)
if err != nil { 
	log.Fatal("Error creating ring: ", err)
}
defer h.Close()

fd, err := unix.Open("/tmp/gouring_test", unix.O_RDWR, 0677)
if err != nil {
	log.Fatal("Error opening file: ", err)
}

sqe := h.GetSqe()
b := make([]byte, 20)
gouring.PrepRead(sqe, fd, &b[0], len(b), 0)

submitted, err := h.SubmitAndWait(1)
if err != nil { 
	log.Fatal("Error waiting ring: ", err)
}
println(submitted) // 1

var cqe *gouring.IoUringCqe
err = h.WaitCqe(&cqe) 
if err != nil {
	log.Fatal("Error waiting cqe: ", err)
} // check also EINTR

_ = cqe.UserData
_ = cqe.Res
_ = cqe.Flags

log.Println("CQE: ", cqe)
log.Println("Buffer: ", b)
log.Println("Buffer: ", string(b))

Graph

SQPOLL non-SQPOLL
sqpoll_fig nonsqpoll_fig

Reference

https://github.com/axboe/liburing