On 2016/12/5 03:35, thierry.fourn...@arpalert.org wrote: > On Sun, 4 Dec 2016 09:17:00 -0500 > Patrick Hemmer <hapr...@stormcloud9.net> wrote: > >> I was mostly just wondering about differences between using things like >> `capture request header`/`http-request capture` and `http-request set-var`. >> >> set-var seems to have all the capabilities of captures, and are much >> easier to work with. You don't have to pre-declare them, you don't have >> to set their size, you don't have to remember the order in which you >> declared them and reference them by an index. >> >> So what's the benefit of captures? Are they more performant or something? > > Hi Patrick, > > This is a good question ! > > Capture header are faster. It uses memory pool of predefined size and > the access to a captures header is fast because it is indexed with an > integer. > > set-var uses the standard system memory allocation and a memory > accounting system for preventing a large amount of consomation. This > memory allocation system is slow. In other way, each is stored in a > list and HAProxy must browse this list for each var access. > > So, you're right: capture header is more performant. set-var is more > easy to use. > > Note that the var cotaining ip or integer doesn't use the system memory > allocator. > > Finally, I realize a quick benchmark on my computer. I capture the > header user-agent containing 127 bytes (and configured for capturing > 128) with the two methods. > > set-var : 90262 req/s > capture : 92257 req/s > > So, on my computer, "set-var" is 2% slowly than "capture". > > Thierry >
Thanks for the info. That kinda confirms some of my thoughts on the subject. The bit about ip/integer is useful to know. -Patrick