netpoll icon indicating copy to clipboard operation
netpoll copied to clipboard

WIP: feat: io_uring for netpoll I/O poller

Open Jacob953 opened this issue 3 years ago • 3 comments

Follows #151, tracing at #194. Hold, please ;)

Jacob953 avatar Aug 25 '22 08:08 Jacob953

Currently, the test coverage is as follows.

github.com/cloudwego/netpoll/uring/sys_enter.go:37:     PrepRW                  100.0%
github.com/cloudwego/netpoll/uring/sys_enter.go:64:     Error                   100.0%
github.com/cloudwego/netpoll/uring/sys_enter.go:72:     Data                    0.0%
github.com/cloudwego/netpoll/uring/sys_enter.go:77:     setUserData             100.0%
github.com/cloudwego/netpoll/uring/sys_enter.go:82:     setFlags                100.0%
github.com/cloudwego/netpoll/uring/sys_enter.go:87:     setAddr                 100.0%
github.com/cloudwego/netpoll/uring/sys_mmap.go:23:      sysMunmap               75.0%
github.com/cloudwego/netpoll/uring/sys_mmap.go:33:      sysMmap                 77.8%
github.com/cloudwego/netpoll/uring/sys_mmap.go:99:      mumap                   100.0%
github.com/cloudwego/netpoll/uring/sys_mmap.go:103:     mmap                    100.0%
github.com/cloudwego/netpoll/uring/sys_op.go:184:       Nop                     100.0%
github.com/cloudwego/netpoll/uring/sys_op.go:190:       Prep                    100.0%
github.com/cloudwego/netpoll/uring/sys_op.go:194:       getFlag                 100.0%
github.com/cloudwego/netpoll/uring/sys_op.go:200:       Read                    0.0%
github.com/cloudwego/netpoll/uring/sys_op.go:216:       Prep                    0.0%
github.com/cloudwego/netpoll/uring/sys_op.go:220:       getFlag                 0.0%
github.com/cloudwego/netpoll/uring/sys_op.go:226:       Write                   0.0%
github.com/cloudwego/netpoll/uring/sys_op.go:243:       Prep                    0.0%
github.com/cloudwego/netpoll/uring/sys_op.go:247:       getFlag                 0.0%
github.com/cloudwego/netpoll/uring/sys_op.go:253:       ReadV                   100.0%
github.com/cloudwego/netpoll/uring/sys_op.go:274:       Prep                    100.0%
github.com/cloudwego/netpoll/uring/sys_op.go:278:       getFlag                 100.0%
github.com/cloudwego/netpoll/uring/sys_op.go:284:       WriteV                  0.0%
github.com/cloudwego/netpoll/uring/sys_op.go:305:       Prep                    0.0%
github.com/cloudwego/netpoll/uring/sys_op.go:309:       getFlag                 0.0%
github.com/cloudwego/netpoll/uring/sys_op.go:315:       Close                   100.0%
github.com/cloudwego/netpoll/uring/sys_op.go:325:       Prep                    100.0%
github.com/cloudwego/netpoll/uring/sys_op.go:329:       getFlag                 100.0%
github.com/cloudwego/netpoll/uring/sys_op.go:335:       Openat                  0.0%
github.com/cloudwego/netpoll/uring/sys_op.go:351:       Prep                    0.0%
github.com/cloudwego/netpoll/uring/sys_op.go:356:       getFlag                 0.0%
github.com/cloudwego/netpoll/uring/sys_op.go:362:       RecvMsg                 0.0%
github.com/cloudwego/netpoll/uring/sys_op.go:376:       Prep                    0.0%
github.com/cloudwego/netpoll/uring/sys_op.go:381:       getFlag                 0.0%
github.com/cloudwego/netpoll/uring/sys_op.go:387:       SendMsg                 0.0%
github.com/cloudwego/netpoll/uring/sys_op.go:401:       Prep                    0.0%
github.com/cloudwego/netpoll/uring/sys_op.go:406:       getFlag                 0.0%
github.com/cloudwego/netpoll/uring/sys_op.go:412:       Recv                    0.0%
github.com/cloudwego/netpoll/uring/sys_op.go:428:       Prep                    0.0%
github.com/cloudwego/netpoll/uring/sys_op.go:433:       getFlag                 0.0%
github.com/cloudwego/netpoll/uring/sys_op.go:439:       Send                    0.0%
github.com/cloudwego/netpoll/uring/sys_op.go:455:       Prep                    0.0%
github.com/cloudwego/netpoll/uring/sys_op.go:460:       getFlag                 0.0%
github.com/cloudwego/netpoll/uring/sys_op.go:467:       Connect                 0.0%
github.com/cloudwego/netpoll/uring/sys_op.go:487:       PrepSQE                 0.0%
github.com/cloudwego/netpoll/uring/sys_op.go:491:       getFlag                 0.0%
github.com/cloudwego/netpoll/uring/sys_op.go:498:       Timeout                 100.0%
github.com/cloudwego/netpoll/uring/sys_op.go:509:       Prep                    100.0%
github.com/cloudwego/netpoll/uring/sys_op.go:514:       getFlag                 100.0%
github.com/cloudwego/netpoll/uring/sys_probe.go:35:     Op                      0.0%
github.com/cloudwego/netpoll/uring/sys_probe.go:40:     OpFlagSupported         0.0%
github.com/cloudwego/netpoll/uring/sys_register.go:66:  RegisterBuffers         0.0%
github.com/cloudwego/netpoll/uring/sys_register.go:71:  UnRegisterBuffers       0.0%
github.com/cloudwego/netpoll/uring/sys_register.go:76:  RegisterFilse           0.0%
github.com/cloudwego/netpoll/uring/sys_register.go:81:  UnRegisterFiles         0.0%
github.com/cloudwego/netpoll/uring/syscall.go:28:       SysRegister             75.0%
github.com/cloudwego/netpoll/uring/syscall.go:39:       SysSetUp                100.0%
github.com/cloudwego/netpoll/uring/syscall.go:49:       SysEnter                75.0%
github.com/cloudwego/netpoll/uring/syscall.go:98:       WRITE_ONCE_U32          0.0%
github.com/cloudwego/netpoll/uring/syscall.go:102:      READ_ONCE_U32           100.0%
github.com/cloudwego/netpoll/uring/syscall.go:106:      SMP_STORE_RELEASE_U32   100.0%
github.com/cloudwego/netpoll/uring/syscall.go:110:      SMP_LOAD_ACQUIRE_U32    100.0%
github.com/cloudwego/netpoll/uring/uring.go:25:         IOURing                 100.0%
github.com/cloudwego/netpoll/uring/uring.go:41:         Fd                      100.0%
github.com/cloudwego/netpoll/uring/uring.go:46:         SQE                     0.0%
github.com/cloudwego/netpoll/uring/uring.go:51:         Queue                   85.7%
github.com/cloudwego/netpoll/uring/uring.go:65:         Probe                   100.0%
github.com/cloudwego/netpoll/uring/uring.go:72:         RegisterProbe           0.0%
github.com/cloudwego/netpoll/uring/uring.go:78:         Advance                 100.0%
github.com/cloudwego/netpoll/uring/uring.go:87:         Close                   100.0%
github.com/cloudwego/netpoll/uring/uring.go:96:         IOPoll                  0.0%
github.com/cloudwego/netpoll/uring/uring.go:104:        SQPoll                  0.0%
github.com/cloudwego/netpoll/uring/uring.go:113:        SQAff                   0.0%
github.com/cloudwego/netpoll/uring/uring.go:121:        CQSize                  100.0%
github.com/cloudwego/netpoll/uring/uring.go:129:        CQE32                   0.0%
github.com/cloudwego/netpoll/uring/uring.go:136:        AttachWQ                0.0%
github.com/cloudwego/netpoll/uring/uring.go:143:        URingDisabled           0.0%
github.com/cloudwego/netpoll/uring/uring.go:152:        Submit                  100.0%
github.com/cloudwego/netpoll/uring/uring.go:160:        SubmitAndWait           0.0%
github.com/cloudwego/netpoll/uring/uring.go:167:        WaitCQE                 100.0%
github.com/cloudwego/netpoll/uring/uring.go:172:        WaitCQENr               100.0%
github.com/cloudwego/netpoll/uring/uring.go:185:        WaitCQEs                71.4%
github.com/cloudwego/netpoll/uring/uring.go:206:        WaitCQETimeout          100.0%
github.com/cloudwego/netpoll/uring/uring.go:213:        PeekBatchCQE            66.7%
github.com/cloudwego/netpoll/uring/uring.go:233:        CQESeen                 100.0%
github.com/cloudwego/netpoll/uring/uring.go:240:        WaitCQEsNew             0.0%
github.com/cloudwego/netpoll/uring/uring_cmplt.go:40:   getCQE                  77.4%
github.com/cloudwego/netpoll/uring/uring_cmplt.go:93:   getEventsArg            0.0%
github.com/cloudwego/netpoll/uring/uring_cmplt.go:98:   submitTimeout           45.5%
github.com/cloudwego/netpoll/uring/uring_cmplt.go:116:  peekCQE                 65.0%
github.com/cloudwego/netpoll/uring/uring_cmplt.go:151:  peekBatchCQE            92.3%
github.com/cloudwego/netpoll/uring/uring_cmplt.go:173:  nextSQE                 87.5%
github.com/cloudwego/netpoll/uring/uring_cmplt.go:188:  cqRingNeedEnter         100.0%
github.com/cloudwego/netpoll/uring/uring_cmplt.go:193:  cqRingNeedFlush         100.0%
github.com/cloudwego/netpoll/uring/uring_cmplt.go:198:  sqRingNeedEnter         50.0%
github.com/cloudwego/netpoll/uring/uring_cmplt.go:213:  ready                   100.0%
github.com/cloudwego/netpoll/uring/uring_sbmt.go:65:    submitAndWait           100.0%
github.com/cloudwego/netpoll/uring/uring_sbmt.go:70:    submit                  70.0%
github.com/cloudwego/netpoll/uring/uring_sbmt.go:88:    flushSQ                 90.9%
total:                                                  (statements)            63.3%

Close to 400 lines of operation(including setup, and register) are non-essential to test, and I think the coverage has reached about 80%.

Jacob953 avatar Sep 15 '22 00:09 Jacob953

Run go test -bench=".*" -benchtime=1000000x at uring/benchmark/ .

goos: linux
goarch: arm64
pkg: github.com/cloudwego/netpoll/uring/benchmark
BenchmarkEpoll-4   	 1000000	      1232 ns/op
BenchmarkUring-4   	 1000000	       457.4 ns/op
PASS

Jacob953 avatar Oct 12 '22 20:10 Jacob953

CLA assistant check
Thank you for your submission! We really appreciate it. Like many open source projects, we ask that you sign our Contributor License Agreement before we can accept your contribution.


Jacob953 seems not to be a GitHub user. You need a GitHub account to be able to sign the CLA. If you have already a GitHub account, please add the email address used for this commit to your account.
You have signed the CLA already but the status is still pending? Let us recheck it.

CLAassistant avatar Nov 22 '22 06:11 CLAassistant