epoll isn’t very fast, kqueue is indeed much faster as a primitive.
MacOS’s implementation is an order of magnitude or more slower than (say) FreeBSD though, so its not a valid comparison that the syscall simply exists.
Another example of a syscall performing differently would be gettimeofday() in OpenBSD vs linux, its an extremely cheap operation in Linux but quite costly in OpenBSD despite being identical at the kernel boundary.