FreeBSD accept_filter 在现代世界中实际上提高了多少性能?

Jos*_*osh 9 freebsd http kernel socket

我最近了解了 FreeBSD 的accept_filter套接字选项,它可以允许工作进程避免上下文切换,例如,等待直到收到完整的 HTTP 请求accf_http

这是一个放置在套接字上的过滤器,该套接字将使用 accept() 接收传入的 HTTP 连接。

它阻止应用程序通过 accept() 接收连接的描述符,直到内核缓冲了完整的 HTTP/1.0 或 HTTP/1.1 HEAD 或 GET 请求。

如果收到的不是 HTTP/1.0 或 HTTP/1.1 HEAD 或 GET 请求,内核将允许应用程序通过 accept() 接收连接描述符。

accf_http 的效用使得服务器在执行请求的初始解析之前不必多次上下文切换。这通过将预分叉服务器(如 Apache)中的活动进程保持在较低水平并减少需要由接口(如 select()、poll() 或基于 kevent() 的服务器。

我的直觉是,在现代硬件上,通过高速连接(电缆调制解调器/DSL 速度或更好)向客户端提供流量,这可能是一种微优化。鉴于它accf_http不能用于 HTTPS 或 HTTP/2 连接并且accf_data只等待第一个字节,我在这里看不到太多优势。也许他们会保存一两个上下文切换?

是否有任何最近的(可能是 2015 年之后?)关于 FreeBSDaccept_filter实际可以提高多少性能或吞吐量/并发性的基准测试?