/ULV

Ultra light-weight Virtualization

Primary LanguageCOtherNOASSERTION

ULV(Ultra Light-weight Virtualization)

  • This project aims to present early prototyping of ultra light-weight virtualization for micro service and shared computing platform.
  • Old ULV was based on LKL(Linux Kernel Library) + solo5 spt tender.
  • The newly developed ULV is based on pure userland unikernel with no hypvervisor.

Build

  • Build process is tested on ubuntu 20.04

Prerequistes

  • gcc, g++, make, cmake
  • musl-tools

Build ULV

  • $ git submodule init && git submodule update
    • copy submodule lwip
  • $ ./configure
    • auto configure
  • $ make prep
    • builds lwip and musl
  • $ make
    • builds libulv, libulfs and micro benchmarks

Running (micro benchmark)

  • $ micro_benchmarks/mb_thread

    • pthread test under ULV
  • $ micro_benchmarks/mb_syscall

    • simple system call test
  • $ micro_benchmarks/mb_network <connect IP:port> [<bind IP>]

    • bind IP is an optional argument which is a local binding IP.
    • connect IP and port should be specified like as 192.168.12.100:30000.
    • before test, a tap device should be setup as follows.
      # ip tuntap add tap0 mode tap
      # ip link set tap0 up
      # ip addr add 192.168.11.175/24 dev tap0
      
    • And, 4 environment variables should be set
      • PRECONFIGURED_TAPIF=tap0
      • IPADDR=192.168.11.170 , IP address on unikernel
      • GWADDR=192.168.11.175 , IP address on host tap device as a gateway
      • NETMASK=255.255.255.0
    • echo server using ncat
      • ncat -l 20000 -k -c 'xargs -n1 echo'
  • $ micro_benchmarks/mb_file <file path>

    • environment variable required. ULV_BLOCK=
    • unikernel file system can be generated as follows:
      • tools/ulfs/ulfs mkfs /tmp/testfile.img 10m

This project was supported by Basic Science Research Program through the National Research Foundation of Korea(NRF) funded by the Ministry of Education(2020R1I1A1A01066121).