mirror of
https://github.com/haproxy/haproxy.git
synced 2026-04-15 21:59:41 -04:00
Along many tests involving both haproxy's scheduler and forwarded traffic, various exponents and algorithms were attempted for the EBO and their effects were measured. It was found that a growth in 1.25^N limited to 128k cycles consistently gives a better latency than 1.5^N limited to 256k cycles, without degrading general performance. The measures of the time to grab a write lock on a 48-thread EPYC show that the number of occurrences of low times was roughly multiplied by 2-3 while the number of occurrences of times above 64us was reduced by similar factors, to even reach 300 at 64us and limiting the maximum time by a factor of 4. The other variants that were experimented with are: m = ((m + (m >> 1)) + 2) & 0x3ffff; // original m = ((m + (m >> 1) + (m >> 3)) + 2) & 0x3ffff; m = ((m + (m >> 1) + (m >> 4)) + 2) & 0x3ffff; m = ((m + (m >> 1) + (m >> 4)) + 2) & 0x1ffff; m = ((m + (m >> 1) + (m >> 4)) + 1) & 0x1ffff; m = ((m + (m >> 2) + (m >> 4)) + 1) & 0x1ffff; // lowest CPU on pl_wr test + good perf m = ((m + (m >> 2)) + 1) & 0x1ffff; // even lower cpu usage, lowest max m = ((m + (m >> 1) + (m >> 2)) + 1) & 0x1ffff; // correct but slightly higher maxes m = ((m + (m >> 1) + (m >> 3)) + 1) & 0x1ffff; // less good than m+m>>2 m = ((m + (m >> 2) + (m >> 3)) + 1) & 0x1ffff; // better but not as good as m+m>>2 m = ((m + (m >> 3) + (m >> 4)) + 1) & 0x1ffff; // less good, lower rates on small coounts. m = ((m + (m >> 2) + (m >> 3) + (m >> 4)) + 1) & 0x1ffff; // less good as well m = ((m & 0x7fff) + (m >> 1) + (m >> 4)) + 2; m = ((m & 0xffff) + (m >> 1) + (m >> 4)) + 2; This is plock commit dddd9ee01c522da33c353e2e4d4fd743d8336ec3. |
||
|---|---|---|
| .. | ||
| atomic-ops.h | ||
| cebtree-prv.h | ||
| cebtree.h | ||
| cebu32_tree.h | ||
| cebu64_tree.h | ||
| cebua_tree.h | ||
| cebub_tree.h | ||
| cebuib_tree.h | ||
| cebuis_tree.h | ||
| cebul_tree.h | ||
| cebus_tree.h | ||
| eb32sctree.h | ||
| eb32tree.h | ||
| eb64tree.h | ||
| ebimtree.h | ||
| ebistree.h | ||
| ebmbtree.h | ||
| ebpttree.h | ||
| ebsttree.h | ||
| ebtree-t.h | ||
| ebtree.h | ||
| ist.h | ||
| lru.h | ||
| mjson.h | ||
| mt_list.h | ||
| plock.h | ||
| sha1.h | ||
| slz-tables.h | ||
| slz.h | ||
| xxhash.h | ||