6 ms·
To be more precise: i use that map to send assets out directly to clients from a zip file. Its a new web server i am building and its the fastest way i could f
by Asmod4n 1mo ago
To be more precise: i use that map to send assets out directly to clients from a zip file.
Its a new web server i am building and its the fastest way i could find out.
Just switching from epoll to liburing made the server ~45% faster too, its ridiculous. It can serve 10 gigabyte per second with a single thread, or around 10 million responses per second with h2 and 32 multiplexed requests.
I had to write a new http load generator for that since i couldn't find one which could generate enough load to saturate my server or be fast enough to withstand it.
- withinboredom 1mo ago10 gb per second is pretty slow for a disk. You should be seeing much higher than that.
- marginalia_nu 1mo ago??? The only configuration that will allow disk reads at 10 GB/s is if you're using PCIe 5.0. PCIe 4.0 or lower, and SATA will not drop out long before that. He's very clearly hauling data straight from the page cache.
- 0c3ca83 1mo ago...I'm still confused why you wouldn't use memcpy?
- Asmod4n 1mo agoHow can one memcpy from a fd to a socket? I don’t touch the bytes in userspace, I just tell the kernel to send them out.
- 0c3ca83 28d agoSo why would you mmap?
- Asmod4n 28d agoto not let the bytes i forward enter userspace, i serve from the page cache for the asset path, directly from a zip file. i open the file, mmap it, close it and tell io_uring_prep_send which bytes from the mapping to send, this also saves me from a possible SIGBUS cause the access to the mmap happen inside the kernel, and when a SIGBUS would happen in userspace the kernel just reports a shorter send in cqe->res