Example #1
0
def distribution_with_subsampling(num:int=1,
                                  interval:int=100,
                                  pause:float=None,
                                  duty:float=None,
                                  subinterval:int=None,
                                  vms=None):
  """ Intervals are in ms. Duty cycle is in (0,1] range. """
  from qemu import ipcistat  # lazy loading

  standard = defaultdict(list)
  withskip = defaultdict(list)

  assert not (pause and duty), "accepts either pause or duty"
  if duty:
    pause = (interval / duty) / 1000  # in seconds
  elif not pause:
    pause = 0.1

  for _ in range(num):
    print("step 1: {} out of {}".format(_+1, num))
    # STEP 1: normal freezing approach
    for vm in vms:
      sleep(pause)
      vm.exclusive()
      try:
        ipc = vm.ipcstat(interval)
        standard[vm.bname].append(ipc)
        #print("saving quasi to", vm.bname, ipc)
      except NotCountedError:
        print("missed data point for", vm.bname)
        pass
      vm.shared()

    # STEP 2: approach with sub-sampling and skip
    #print("step 2: {} out of {}".format(_+1, num))
    for vm in vms:
      sleep(pause)
      try:
        vm.exclusive()
        ipc = ipcistat(vm, interval=interval, subinterval=subinterval)
        withskip[vm.bname].append(ipc)
        #print("saving sub-sampled to", vm.bname, ipc)
      except NotCountedError:
        print("missed data point for", vm.bname)
        pass
      finally:
        vm.shared()

  return Struct(standard=standard, withskip=withskip)
Example #2
0
def distribution_with_subsampling2(num:int=1,
                                  interval:int=100,
                                  pause:float=None,
                                  duty:float=None,
                                  subinterval:int=None,
                                  vms=None):
  """ Intervals are in ms. Duty cycle is in (0,1] range. """
  from qemu import ipcistat  # lazy loading

  assert not (pause and duty), "accepts either pause or duty"
  if duty:
    pause = (interval / duty) / 1000  # in seconds
  elif not pause:
    pause = 0.1

  isolated  = defaultdict(list)
  frozen    = defaultdict(list)
  batch_size = 10
  assert num % batch_size == 0,  \
      "number of samples should divide by 10, got %s" % num
  iterations = num // batch_size

  for i in range(iterations):
    print("interval %s: %s out of %s" % (interval, i, iterations))
    isolated_sampling(num=batch_size, interval=interval, pause=pause, result=isolated, vms=vms)


    for i in range(num):
      for vm in vms:
        sleep(pause)
        try:
          vm.exclusive()
          ipc = ipcistat(vm, interval=interval, subinterval=subinterval)
          frozen[vm.bname].append(ipc)
          #print("saving sub-sampled to", vm.bname, ipc)
        except NotCountedError:
          print("missed data point for", vm.bname)
          pass
        finally:
          vm.shared()

    freezing_sampling(num=batch_size, interval=interval, pause=pause, result=frozen, vms=vms)

  return Struct(isolated=isolated, frozen=frozen)