
Hello, I'm now tuning warp. https://github.com/kazu-yamamoto/wai/tree/refactoring/warp One of bottlenecks is the code to compose HTTP header. I have already rewritten the code using direct memory copy instead of BlazeBuilder. https://github.com/kazu-yamamoto/wai/blob/refactoring/warp/Network/Wai/Handl... This code gain around 2,000 req/s on my machine. In this code, you can find two 'divMod' and one 'mod'. These is to convert numeric HTTP status code to ByteString. It appeared this conversion is slow. Note that due to a bug of GHC, five (not three) divisions are carried out. So, I redefined Network.HTTP.Types.Status to have reformatted ByteString for status code (the statusAsciiCode field): https://github.com/kazu-yamamoto/http-types/blob/status-ascii-code/Network/H... This hack gains also around 2,000 req/s. This change breaks compatibilities. I found that warp, http-conduit, wai-app-file-cgi are affected. So, my question: is this hack acceptable? If not, I will define a large array of ByteString in warp. But it seems to me that this is nonsense. --Kazu