On Tue, 28 May 2024, Richa Shah wrote:
- Is it possible the time spent in pruning dead connections is getting counted towards DNS resolution? Since thats the very first latency that curl tracks for handles, my guess is anything curl does before actually reaching the resolution part of the request gets counted within the "name lookup" time.
Yes, I think that might be correct.
- The "prune_dead_connections" method is expected to be called at most once per second, and I do see that happening with my service as well. But given the high traffic I'm submitting to curl (~1000 or more HTTPS requests per second, all going to different URLs/IP addresses), we end up accumulating a lot of dead connections over time, and pruning ends up being a cost we have to pay before we can get to a request almost every second. Is it possible to somehow proactively prune dead connections?
This is just code so yes, everything is certainly possible. I don't have work on this on my personal agenda though and I have not heard anyone else say they work on it.
A first test-shot for you would perhaps be to increase the scan frequency from once per second to maybe ten per second?
Or can we prune in smaller batches so it doesn't end up adding too much time for an actual request?
If we can think of a better way to do it, then I think we should do it in a better way! ;-)
A challenge with such a scheme is that it risks that the amount of actually dead connections gradually increases because it closes them off too slowly.
I also noticed that closing an SSL connection is expensive because there are some more calls that curl makes to the TLS library before it actually closes the connection, so closing 100+ connections at a time serially will add up to quite a bit of time.
The core problem here is really that getting 100+ connections that suddenly are dead is an edge case libcurl is not optimized for. Typically, connections die more spread out over time.
-- / daniel.haxx.se | Commercial curl support up to 24x7 is available! | Private help, bug fixes, support, ports, new features | https://curl.se/support.html -- Unsubscribe: https://lists.haxx.se/mailman/listinfo/curl-library Etiquette: https://curl.se/mail/etiquette.html