Multivariate module big problem is Drupal build in page caching for anonymous users. Regarding of cache status and user status (logged or guest) multivariate tests should always run in active context and run selected variants for end user.
In order to achive this multivariate needs to do some of it work very early in Drupal bootstrap phase - and it need to do this always, for cached and non cached pages. That is why multivariate module implements hook_boot() with some heavy code execution which is usually not done if page is served from cache.

/**
 * Implements hook_boot(). 
 */
function multivariate_boot() {
  multivariate_initialize_drupal();
  $running_studies = multivariate_get_running_tests();
  if (!empty($running_studies)) {
    multivariate_disable_cache();
  }
}

/**
 * Initialize everything that is needed so multivariate tests can be run in 
 * hook_boot().
 */
function multivariate_initialize_drupal() {
  // If ctools plugin context cache do not exist we need to init couple of
  // more stuff so ctools access plugin can init it self correctly.
  if (!cache_get('ctools_plugin_files:ctools:contexts')) {
    // When ctools context plugin cache do not exist we need to initialize 
    // Drupal fully so we can query for running tests with ctools_access in 
    // hook_boot() and also run tests in hook_boot().
    // Note that this needs to be done only for first request that is hitting
    // missing ctools context plugin cache.
    require_once DRUPAL_ROOT . '/includes/common.inc';
    drupal_bootstrap(DRUPAL_BOOTSTRAP_LANGUAGE);
    drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL);
  }
  else {
    // For situations when ctools context plugin cache exist we still need to 
    // initialize some parts of the Drupal in hook_boot() so ctooks_access() and
    // tests can run in hook_boot().
    
    // We are including path.inc because ctools_access will need 
    // drupal_get_path_alias().
    require_once DRUPAL_ROOT . '/' . variable_get('path_inc', 'includes/path.inc');

    // We are including commons.inc because ctools_access will need 
    // drupal_get_path().
    require_once DRUPAL_ROOT . '/includes/common.inc';

    // Needed by entity_get_info() which will be callen by ctools_access().
    drupal_language_initialize();
    
    // We need to load all modules so ctools_access can work correctly for
    // different conditions. For example if we add path condition which is 
    // 'node/1' this path condition will try to load this node over entity api, 
    // but because we are running this inside hook_boot only modules with 
    // hook_boot and hook_exit() will be loaded and we will get fatal error 
    // because Drupal can not find node entity class.
    module_load_all();
  }
}

As you can see we are doing a lot of executions in multivariate_boot() and most of this initializations are needed because we are currently using ctools access plugins for multivariate run conditions which are normally run after hook_init() but for our use case we need to run them in hook_boot(). This is something we can not avoid with current ctools access run conditions implementation.

It is important to understand that this code in multivariate_boot() hook will be run for each page request - even for non logged users and anonymous cache enabled - and this will have impact on your site performance.

How slower your site and server will be. Hard to say, but here are some figures from test multivariate site, we are showing here page execution in ms:

hook_boot() disabled hook_boot() enabled
1 120.24 103.84
2 120.01 166.25
3 91.61 131.96
4 103.67 119.56
5 113.05 137.76
avg 109.72 131.87

We see additional 22ms more that is spent for page execution, which is probably not a big problem for most use cases. Never the less it is important to know this information while working with multivariate tests on your site.