MINOR: clock: measure the total boot time
Some huge configs take a significant amount of time to start and this can cause some trouble (e.g. health checks getting delayed and grouped, process not responding to the CLI etc). For example, some configs might start fast in certain environments and slowly in other ones just due to the use of a wrong DNS server that delays all libc's resolutions. Let's first start by measuring it by keeping a copy of the most recently known ready date, once before calling check_config_validity() and then refine it when leaving this function. A last call is finally performed just before deciding to split between master and worker processes, and it covers the whole boot. It's trivial to collect and even allows to get rid of a call to clock_update_date() in function check_config_validity() that was used in hope to better schedule future events.
This commit is contained in:
parent
52fd879953
commit
da4aa6905c
|
@ -26,6 +26,7 @@
|
|||
#include <haproxy/api.h>
|
||||
|
||||
extern struct timeval start_date; /* the process's start date in wall-clock time */
|
||||
extern struct timeval ready_date; /* date when the process was considered ready */
|
||||
extern ullong start_time_ns; /* the process's start date in internal monotonic time (ns) */
|
||||
extern volatile ullong global_now_ns; /* common monotonic date between all threads, in ns (wraps every 585 yr) */
|
||||
|
||||
|
|
|
@ -2771,9 +2771,6 @@ int check_config_validity()
|
|||
* Now, check for the integrity of all that we have collected.
|
||||
*/
|
||||
|
||||
/* will be needed further to delay some tasks */
|
||||
clock_update_date(0,1);
|
||||
|
||||
if (!global.tune.max_http_hdr)
|
||||
global.tune.max_http_hdr = MAX_HTTP_HDR;
|
||||
|
||||
|
|
|
@ -27,6 +27,7 @@
|
|||
#include <haproxy/tools.h>
|
||||
|
||||
struct timeval start_date; /* the process's start date in wall-clock time */
|
||||
struct timeval ready_date; /* date when the process was considered ready */
|
||||
ullong start_time_ns; /* the process's start date in internal monotonic time (ns) */
|
||||
volatile ullong global_now_ns; /* common monotonic date between all threads, in ns (wraps every 585 yr) */
|
||||
volatile uint global_now_ms; /* common monotonic date in milliseconds (may wrap) */
|
||||
|
|
|
@ -2247,8 +2247,19 @@ static void init(int argc, char **argv)
|
|||
exit(1);
|
||||
}
|
||||
|
||||
/* update the ready date that will be used to count the startup time
|
||||
* during config checks (e.g. to schedule certain tasks if needed)
|
||||
*/
|
||||
clock_update_date(0, 1);
|
||||
ready_date = date;
|
||||
|
||||
/* Note: global.nbthread will be initialized as part of this call */
|
||||
err_code |= check_config_validity();
|
||||
|
||||
/* update the ready date to also account for the check time */
|
||||
clock_update_date(0, 1);
|
||||
ready_date = date;
|
||||
|
||||
for (px = proxies_list; px; px = px->next) {
|
||||
struct server *srv;
|
||||
struct post_proxy_check_fct *ppcf;
|
||||
|
@ -3508,6 +3519,10 @@ int main(int argc, char **argv)
|
|||
global.maxsock);
|
||||
}
|
||||
|
||||
/* update the ready date a last time to also account for final setup time */
|
||||
clock_update_date(0, 1);
|
||||
ready_date = date;
|
||||
|
||||
if (global.mode & (MODE_DAEMON | MODE_MWORKER | MODE_MWORKER_WAIT)) {
|
||||
int ret = 0;
|
||||
int in_parent = 0;
|
||||
|
|
Loading…
Reference in New Issue