示例#1
0
 def get_processor(benchmark):
   if benchmark.contains('same-container') or benchmark.contains('same-core'):
     return util.processor(0)
   elif benchmark.contains('different-logical-core'):
     return util.virtual_processor(0)
   elif benchmark.contains('different-core'):
     return util.processor(1)
   else:
     raise Exception('Benchmark.get_processor: Not implemented')
示例#2
0
def check_processor(args, name):
  if args.container == "docker":
    print("here")
    command = "sudo docker inspect -f '{{{{.HostConfig.CpusetCpus}}}}' {0:s}".format(name)
    print(command)
    output = util.shell_output(command).strip()
    print(output)
  elif args.container == "linux":
    output = util.shell_output("lxc-cgroup -n {0:s} cpuset.cpus".format(name)).strip()
  else:
    return
  print(output)
  if output != str(util.processor(0)):
    raise Exception("Error. Container is not bound to processor {0:d}".format(util.processor(0)))
示例#3
0
def setup_linux(args):
  install_linux_dependencies()
  if args.process == "nginx":
    name = NGINX_CONTAINER_NAME
    container_ip = get_linux_container_ip(name)
    container_port = NGINX_CONTAINER_PORT
    machine_port = NGINX_MACHINE_PORT
    if container_ip is None:
      setup_linux_nginx_container()
  elif args.process == "memcached":
    name = MEMCACHED_CONTAINER_NAME
    container_ip = get_linux_container_ip(name)
    container_port = MEMCACHED_CONTAINER_PORT
    machine_port = MEMCACHED_MACHINE_PORT

    if container_ip is None:
      setup_linux_memcached_container()
      util.shell_call("sudo lxc-cgroup -n {0:s} memory.limit_in_bytes 1G".format(name))
  else:
    raise "setup_linux: Not implemented"

  container_ip = get_linux_container_ip(name)
  if args.cores > 1:
    raise Exception("Error need to implement logic for multiple cores")

  util.shell_call("sudo lxc-cgroup -n {0:s} cpuset.cpus {1:d}".format(name, util.processor(0)))
  check_processor(args, name)
  machine_ip = get_ip_address('eno1')
  bridge_ip = get_ip_address('lxcbr0')
  print("machine", machine_ip, machine_port, "container", container_ip, container_port, "bridge", bridge_ip)
  setup_port_forwarding(machine_ip, machine_port, container_ip, container_port, bridge_ip)
  print("To benchmark run 'python docker_setup.py -c linux -p {0:s} -b {1:s}:{2:d}'".format(args.process, machine_ip, machine_port))
示例#4
0
def create_docker_nginx_container(args, docker_filter, is_xcontainer=False):
  configuration_file_path = '/dev/nginx.conf'
  setup_nginx_configuration(configuration_file_path)

  print(NGINX_CONTAINER_NAME, docker_filter)
  address = docker_ip(NGINX_CONTAINER_NAME, docker_filter)
  if args.cores > 1:
    raise "multi-core not implemented"
  cpu = "--cpuset-cpus={0:d}".format(util.processor(0))
  if is_xcontainer:
    cpu = ""
  if address is None:
    command = 'docker run --name {0:s} -P {1:s} -v {2:s}:/etc/nginx/nginx.conf:ro -d nginx'
    print(command)
    util.shell_call(command.format(NGINX_CONTAINER_NAME, cpu, configuration_file_path))
    container_sleep(5)
    address = docker_ip(NGINX_CONTAINER_NAME, docker_filter)
  ports = nginx_docker_port()
  if is_xcontainer:
    machine_ip = get_ip_address('em1')
  else:
    machine_ip = get_ip_address('eno1')
  bridge_ip = get_ip_address('docker0')
  setup_port_forwarding(machine_ip, int(ports[1]), address, int(ports[0]), bridge_ip)
  print("To benchmark run 'python docker_setup.py -c docker -p nginx -b {0:s}:{1:s}'".format(machine_ip, ports[1]))
  return ports
示例#5
0
def setup_xcontainer(args):
  if args.process == "nginx":
    name = NGINX_CONTAINER_NAME
    container_port = NGINX_CONTAINER_PORT
    machine_port = NGINX_MACHINE_PORT
    create_docker_nginx_container(args, XCONTAINER_INSPECT_FILTER, True)
  elif args.process == "memcached":
    name = MEMCACHED_CONTAINER_NAME
    container_port = MEMCACHED_CONTAINER_PORT
    machine_port = MEMCACHED_MACHINE_PORT
    setup_docker_memcached_container(args, XCONTAINER_INSPECT_FILTER, True)
  else:
    raise Exception("setup_xcontainer: not implemented")

  docker_id = util.shell_output('docker inspect --format="{{{{.Id}}}}" {0:s}'.format(name)).strip()
  bridge_ip = get_ip_address('xenbr0')
  xcontainer_ip = generate_xcontainer_ip(bridge_ip)
  util.shell_call('docker stop {0:s}'.format(name))
  machine_ip = get_ip_address('em1')
  util.shell_call('tmux new -s xcontainer -d')
  tmux_command('xcontainer', 'cd /root/experiments/native/compute06/docker')
  tmux_command('xcontainer', 'python run.py --id {0:s} --ip {1:s} --hvm --name {2:s} --cpu={3:d}'.format(docker_id, xcontainer_ip, name, args.cores))
  container_sleep(5)
  setup_port_forwarding(machine_ip, machine_port, xcontainer_ip, container_port, bridge_ip)
  print('Setup {0:s} X-Container on {1:s}:{2:d}'.format(args.process, machine_ip, machine_port))
  util.shell_call('xl vcpu-pin memcached_container 0 {0:d}'.format(util.processor(0)))
  util.shell_call('python /root/x-container/irq-balance.py')
  util.shell_call('python /root/x-container/cpu-balance.py')
示例#6
0
def create_readme(args, folder):
  last_commit = util.shell_output('git log --oneline -n 1')
  num_connections = get_num_connections(args)
  rates = get_rates(args)

  f = open('{0:s}/README'.format(folder), 'w+')
  f.write('LAST COMMIT: {0:s}\n'.format(last_commit))
  f.write('CONTAINER: {0:s}\n'.format(args.container))
  f.write('PROCESS: {0:s}\n'.format(args.process))
  f.write('BENCHMARK ADDRESS: {0:s}\n'.format(args.benchmark_address))
  f.write('NUM CLIENTS: {0:d}\n'.format(args.cores))
  f.write('DURATION: {0:d}\n'.format(args.duration))
  f.write('CONNECTIONS: {0:d}\n'.format(args.connections))
  f.write('NUM CONNECTIONS PER CLIENT: {0:d}\n'.format(num_connections))
  f.write('RATES: {0:s}\n'.format(str(rates)))
  f.write('THREADS: {0:d}\n'.format(args.threads))
  f.write('DATE: {0:s}\n'.format(args.date))
  f.write("BOUND TO PROCESSOR: {0:d}\n".format(util.processor(0)))
  f.write('BENCHMARK TEST: {0:s}\n'.format(args.test))
  f.write('NUM INTERFERENCE: {0:d}\n'.format(NUM_INTERFERENCE))
  if args.process == 'memcached':
    f.write('MEMCACHED SIZE(-m): {0:d}M\n'.format(MEMCACHED_SIZE))
    f.write('MEMCACHED THREADS(-t): {0:d}\n'.format(MEMCACHED_THREADS))
  f.close()
示例#7
0
def setup_docker_memcached_container(args, docker_filter, is_xcontainer=False):
  address = docker_ip(MEMCACHED_CONTAINER_NAME, docker_filter)
  configuration_file_path = '/dev/memcached.conf'
  setup_memcached_configuration(configuration_file_path)

  address = docker_ip(MEMCACHED_CONTAINER_NAME, docker_filter)
  if args.cores > 1 and not is_xcontainer:
    raise "multi-core not implemented"
  cpu = "--cpuset-cpus={0:d}".format(util.processor(0))
  if is_xcontainer:
    cpu = ""

  if address is None:
    # TODO: Way to pass in memcached parameters like memory size
    util.shell_call('docker run --name {0:s} -P {1:s} -p 0.0.0.0:{2:d}:{3:d} -d memcached memcached -m {4:d} -u root -t {5:d}'
                    .format(MEMCACHED_CONTAINER_NAME, cpu, MEMCACHED_MACHINE_PORT, MEMCACHED_CONTAINER_PORT, MEMCACHED_SIZE, MEMCACHED_THREADS)
                   )
    address = docker_ip(MEMCACHED_CONTAINER_NAME, docker_filter)
  else:
    util.shell_call('docker start --name {0:s}'.format(MEMCACHED_CONTAINER_NAME))

  check_processor(args, MEMCACHED_CONTAINER_NAME)
  ports = memcached_docker_port()
  print(ports)
  if is_xcontainer:
    container = "xcontainer"
    machine_ip = get_ip_address('em1')
  else:
    container = "docker"
    machine_ip = get_ip_address('eno1')
  bridge_ip = get_ip_address('docker0')
  setup_port_forwarding(machine_ip, MEMCACHED_MACHINE_PORT, address, int(ports[0]), bridge_ip)

  if not is_xcontainer:
    print("To benchmark run 'python docker_setup.py -c {0:s} -p memcached -b {1:s}:{2:d}'".format(container, machine_ip, MEMCACHED_MACHINE_PORT))
  return ports