Simply record the time from entering `main` to start listening sockets.
if (config().has("opensslconf"))
    {
        std::string opensslconf_path = config().getString("opensslconf");
        setenv("OPENSSL_CONF", opensslconf_path.c_str(), true);
    }
    else
    {
        const String config_path = config().getString("config-file", "config.xml");
        const auto config_dir = std::filesystem::path{config_path}.replace_filename("openssl.conf");
        setenv("OPENSSL_CONF", config_dir.string(), true);
    }
#endif
    registerFunctions();
    registerAggregateFunctions();
    registerTableFunctions();
    registerStorages();
    registerDictionaries();
    registerDisks( false);
    registerFormats();
    registerRemoteFileMetadatas();
    registerSchedulerNodes();
    registerResourceManagers();
    CurrentMetrics::set(CurrentMetrics::Revision, ClickHouseRevision::getVersionRevision());
    CurrentMetrics::set(CurrentMetrics::VersionInteger, ClickHouseRevision::getVersionInteger());
    /** Context contains all that query execution is dependent:
      *  settings, available functions, data types, aggregate functions, databases, ...
      */
    auto shared_context = Context::createShared();
    global_context = Context::createGlobal(shared_context.get());
    global_context->makeGlobalContext();