kqueue-based poll(2) and select(2) seem to work fairly well. Because of this, the ktrace points that display the internal translated events do not appear very valuable any longer. They clog up and make traces difficult to read. I think it is time to remove the trace points.
OK? Index: sys/kern/sys_generic.c =================================================================== RCS file: src/sys/kern/sys_generic.c,v retrieving revision 1.148 diff -u -p -r1.148 sys_generic.c --- sys/kern/sys_generic.c 5 Jul 2022 15:06:16 -0000 1.148 +++ sys/kern/sys_generic.c 14 Aug 2022 10:46:50 -0000 @@ -691,10 +691,7 @@ dopselect(struct proc *p, int nd, fd_set /* Maximum number of events per iteration */ count = MIN(nitems(kev), nevents); ready = kqueue_scan(&scan, count, kev, timeout, p, &error); -#ifdef KTRACE - if (KTRPOINT(p, KTR_STRUCT)) - ktrevent(p, kev, ready); -#endif + /* Convert back events that are ready. */ for (i = 0; i < ready && error == 0; i++) error = pselcollect(p, &kev[i], pobits, &ncollected); @@ -762,10 +759,6 @@ pselregister(struct proc *p, fd_set *pib EV_SET(&kev, fd, evf[msk], EV_ADD|EV_ENABLE|__EV_SELECT, evff[msk], 0, (void *)(p->p_kq_serial)); -#ifdef KTRACE - if (KTRPOINT(p, KTR_STRUCT)) - ktrevent(p, &kev, 1); -#endif error = kqueue_register(p->p_kq, &kev, 0, p); switch (error) { case 0: @@ -1001,10 +994,7 @@ doppoll(struct proc *p, struct pollfd *f /* Maximum number of events per iteration */ count = MIN(nitems(kev), nevents); ready = kqueue_scan(&scan, count, kev, timeout, p, &error); -#ifdef KTRACE - if (KTRPOINT(p, KTR_STRUCT)) - ktrevent(p, kev, ready); -#endif + /* Convert back events that are ready. */ for (i = 0; i < ready; i++) ncollected += ppollcollect(p, &kev[i], pl, nfds); @@ -1057,10 +1047,6 @@ ppollregister_evts(struct proc *p, struc KASSERT(pl->revents == 0); -#ifdef KTRACE - if (KTRPOINT(p, KTR_STRUCT)) - ktrevent(p, kevp, nkev); -#endif for (i = 0; i < nkev; i++, kevp++) { again: error = kqueue_register(p->p_kq, kevp, pollid, p);