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
实际可以提高多少性能或吞吐量/并发性的基准测试?
归档时间: |
|
查看次数: |
305 次 |
最近记录: |