SlideShare a Scribd company logo
LibOS as a regression test
framework for Linux networking
Hajime Tazaki
2016/02/12
netdev 1.2
outline
libOS introduction
testing framework introduction
case studies
QA
what is LibOS ?
Library version of Linux kernel
presented at netdev0.1, proposed to LKML (2015)
http://www.slideshare.net/hajimetazaki/library-operating-system-for-
linux-netdev01
media
LWN
Phoronix
Linux Magazine
Hacker News
https://lwn.net/Articles/637658/
http://www.phoronix.com/scan.php?page=news_item&px=Linux-
Library-LibOS
http://www.linux-magazine.com/Issues/2015/176/Kernel-News
https://news.ycombinator.com/item?id=9259292
how to use it ?
Network Stack in Userspace (NUSE)
LD_PRELOADed application
Network stack personality
Direct Code Execution (DCE, ns-3 network simulator)
Network simulation integration (running Linux network stack on ns-
3)
what is NOT
LibOS?
not only a userspace operating system
not only a debuging tool
but LibOS is
a library which can link with any programs
a library to form any purpose of program
anykernel
introduced by a NetBSD hacker (rump kernel)
Definition:
can form various kernel for various platforms
userspace (POSIXy), bare-metal, qemu/kvm, Xen
Unikernel ?
We define an anykernel to be an organization of
kernel code which allows the kernel's unmodified
drivers to be run in various configurations such as
application libraries and microkernel style servers,
and also as part of a monolithic kernel. -- Kantee
2012.
single purpose operating system
- http://www.linux.com/news/enterprise/cloud-
computing/751156-are-cloud-operating-
systems-the-next-big-thing-
Strip downed software stack
single purpose
resource efficient with speed
boot within TCP 3-way handshake
[1]
[1]: Madhavapeddy et al., Jitsu: Just-In-Time Summoning of
Unikernels, USENIX NSDI 2015
demos with linux kernel library
Unikernel on Linux (ping6 command
embedded kernel library)
Unikernel on qemu-arm (hello
world)
what's different ?
User Mode Linux
generate executable of Linux kernel in userspace
no shared library
Containers
no foreign OS (shared kernel with host)
nfsim
broader coverage of kernel code
recent news
Linux kernel library (LKL) is coming
by Octavian Purdila (Intel)
since 2007, reborn in late 2015
LibOS project is going to migrate to LKL project
port NUSE code to LKL already
DCE (ns-3 integration) not yet
unikernel in progress
testing network
stack
motivation
testing networking code is hard
complex cabling
inefficiency with massive VM instances
You may do
in your own large testbed
with your test programs
are we enough ?
- the number of
commit per day
frequently changing codebase
many commits (30~40 commits/day)
out of 982K LoC (cloc net/)
may have increased num of regression bugs
your test
easy to create in your laptop with VM (UML/Docker/Xen/KVM)
only IF the test is enough to describe
your test (cont'd)
huge resources to conduct a test
not likely to reproduce
tons of configuration scripts
running on different machines/OSes
controling is troublesome
distributed debugger...
many terminal windows with gdb
other projects
Test suites/projects
LTP (Linux test project, )
kselftest ( )
autotest ( )
ktest (in tree,
)
kernelci ( )
NetDEF CI (quagga)
those are great but networking is always hard
controlling remote hosts is (sometimes) painful
combination of userspace programs are unlimited
timing is not deterministic, across distributed networks
https://linux-test-project.github.io/
https://kselftest.wiki.kernel.org/
http://autotest.github.io/
http://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/tools/test
id=HEAD
https://kernelci.org/
why LibOS ?
single process model with multiple nodes
ease of debug/test/development
deterministic behavior (by ns-3 network simulator)
rich network configuration by ns-3 network simulator
ease of testing by automation (on public CI server)
public CI server (circleci.com)
test per commit (push)
test before commit
easily detect regressions
architecture
1. Virtualization Core Layer
- deterministic clock of simulator
- stack/heap management
- isolation via dlmopen(3)
- single process model
2. Kernel layer
- reimplementation of API
- glue/stub codes for kernel code
- use as-is
3. POSIX glue layer
- reimplementation of POSIX API
- hijack host system calls
How ?
a single scenario script (C++, sorry) to describe all
application, network stack (kernel as a lib), traffic, link, topology,
randomness, timing, etc
1. Recompile your code
Userspace as Position Independent Executable (PIE)
Kernel space code as shared library (libsim-linux.so)
2. Run with ns-3
Load the executables (binary, library) in an isolated environment
among nodes
synchronize simulation clocks with apps/kernels clock
features
app supports
routing protocols (Quagga)
configuration utilities (iproute2)
traffic generator (iperf/ping/ping6)
others (bind9, unbound, dig)
protocol supports
IPv4/ARP/IPv6/ND
TCP/UDP/DCCP/SCTP/(mptcp)
L2TP/GRE/IP6IP6/FOU
what's not useful
performance study of the computation
deterministic clock assumes unlimited computation/storage
resources
e.g., you can define 100Tbps link without any packet loss
test suite list
verify results
socket (raw{6},tcp{6},udp{6},dccp{6},sctp{6})
encapsulation (lt2p,ip6ip6,ip6gre,fou)
quagga (rip,ripng,ospfv{2,3},bgp4,radvd)
mptcp
netlink
mip6 (cmip6,nemo)
simple execution
iperf
thttpd
mptcp+iperf handoff
tcp cc algo. comparison
ccnd
bugs detected by DCE (so far)
having nightly tested with the latest net-next (since Apr. 2013~=4yrs)
[net-next,v2] ipv6: Do not iterate over all interfaces when finding
source address on specific interface. (v4.2-rc0, during VRF)
detected by:
[v3] ipv6: Fix protocol resubmission (v4.1-rc7, expanded from v4
stack)
detected by:
[net-next] ipv6: Check RTF_LOCAL on rt->rt6i_flags instead of rt-
>dst.flags (v4.1-rc1, during v6 improvement)
detected by:
[net-next] xfrm6: Fix a offset value for network header in
_decode_session6 (v3.19-rc7?, regression only in mip6)
http://ns-3-dce.cloud.wide.ad.jp/jenkins/job/daily-net-
next-sim/958/testReport/
http://ns-3-dce.cloud.wide.ad.jp/jenkins/job/umip-net-
next/716/
http://ns-3-dce.cloud.wide.ad.jp/jenkins/job/daily-net-
next-sim/878/
Use Case
network simulator in a nutshell
(mainly research purpose)
flexible parameter configurations
usually in a single process
can be extended distributed/parallel processes for speedup
usually with abstracted protocol implementation
but no abstraction this time (thanks to LibOS)
always produce same results (deterministic)
can inject pseudo-randomness
not realistic sometimes
but useful for the test (always reproducible)
workflow
1. (installation of DCE)
2. develop a model (of interests)
(you already have: the Linux network stack)
3. write a simulation scenario
write a network topology
parameters configuration (randomization seed, link, traffic,
applications)
4. test it
one-shot (locally)
nightly, per-commit, per-push, etc
make testbin -C tools/testing/libos
simulation scenario
int main(int argc, char **argv)
{
// create nodes
NodeContainer nodes;
nodes.Create (100);
// configure DCE with Linux network stack
DceManagerHelper dce;
dce.SetNetworkStack ("ns3::LinuxSocketFdFactory",
"Library", StringValue ("libsim-linux-4.4.0.so"));
dce.Install (nodes);
// run an executable at 1.0 second on node 0
DceApplicationHelper process;
ApplicationContainer apps;
process.SetBinary ("your-great-server");
apps = process.Install (nodes.Get (0));
apps.Start (Seconds (1.0));
Simulator.Stop (Seconds(1000.0))
Simulator.Run ()
}
API (of DCE helpers)
userspace app
ns3::DceApplicationHelper class
kernel configuration
sysctl with LinuxStackHelper::SysctlSet()method
printk/log
generated into files-Xdirectory (where X stands for the node
number)
syslog/stdout/stderr tracked per process (files-X/var/log/{PID}/)
an instant command (ip)
LinuxStackHelper::RunIp()
manual
https://www.nsnam.org/docs/dce/manual/html/index.html
test it !
use waffor a build the script
run the script with test.pyto generate XUnit test results
run the script with valgrind
a wrapper in Makefile
cd tools/testing/libos/buildtop/source/ns-3-dce/
./waf
./test.py -s exapmle -r
./test.py -s exapmle -g
make test ARCH=lib ADD_PARAM=" -s example"
(the directories may be changed during upstream (etc), sorry 'bout that)
case study: encapsulation test
ns-3-dce/test/addons/dce-linux-ip6-test.cc
unit tests for encapsulation protocols
ip6gre, ip6-in-ip6, l2tp, fou
with iproute2, ping6, libsim-linux.so (libos)
full script
https://github.com/direct-code-execution/ns-3-
dce/blob/master/test/addons/dce-linux-ip6-test.cc
encap protocols tests
1) tunnel configurations
LinuxStackHelper::RunIp (nodes.Get (0), Seconds (0.5),
"-6 tunnel add tun1 remote 2001:db8:0:1::2 "
"local 2001:db8:0:1::1 dev sim0");
LinuxStackHelper::RunIp (nodes.Get (1), Seconds (0.5),
"-6 tunnel add tun1 remote 2001:db8:0:1::1 "
"local 2001:db8:0:1::2 dev sim0");
2) set up ping6 command to generate probe packet
dce.SetBinary ("ping6");
dce.AddArgument ("2001:db8:0:5::1");
apps = dce.Install (nodes.Get (1));
apps.Start (Seconds (10.0));
3) verify if the encap/decap work fine or not
if (found && icmp6hdr.GetType () == Icmpv6Header::ICMPV6_ECHO_REPLY) {
m_pingStatus = true;
}
That's it. Test Test
Test !
XUnit test result generation
make test ARCH=lib ADD_PARAM=" -s linux-ip6-
test -r"gives you a test result retained
% head testpy-output/2016-02-08-09-49-32-CUT/dce-linux-ip6.xml
<Test>
<Name>dce-linux-ip6</Name>
<Result>PASS</Result>
<Time real="3.050" user="2.030" system="0.770"/>
<Test>
<Name>Check that process &#39;plain&#39; completes correctly.</Name>
<Result>PASS</Result>
<Time real="0.800" user="0.370" system="0.310"/>
</Test>
<Test>
<Name>Check that process &#39;ip6gre&#39; completes correctly.</Name>
<Result>PASS</Result>
<Time real="0.600" user="0.460" system="0.100"/>
</Test>
<Test>
git bisect
you can now bisect a bug with a single program !
prepare a bisect.sh
#!/bin/sh
git merge origin/nuse --no-commit
make clean ARCH=lib
make library ARCH=lib OPT=no
make test ARCH=lib ADD_PARAM=" -s dce-umip"
RET=$?
git reset --hard
exit $RET
run it !
git bisect run ./bisect.sh
gcov (coverage measurement)
coverage measurement across multiple nodes
make library ARCH=lib COV=yes
make test ARCH=lib
(the COV=yes option does the job for you)
LibOS as a regression test framework for Linux networking #netdev1.1
gdb (debugger)
Inspect codes during experiments
among distributed nodes
in a single process
perform a simulation to reproduce a bug
see how badly handling a packets in Linux kernel
http://yans.pl.sophia.inria.fr/trac/DCE/wiki/GdbDce
valgrind
Memory error detection
among distributed nodes
in a single process
Use Valgrind
http://yans.pl.sophia.inria.fr/trac/DCE/wiki/Valgrind
Summary
walk through review of testing framework with LibOS + DCE
uniqueness of experiemnt with the library (LibOS)
multiple (host) instances in a single process
flexible network configurations
deterministic scheduler (i.e., bugs are always reproducible)
future directions
merging to LKL (Linux Kernel Library)
part of LibOS has done
continuous testing to net-next branch
I'm watching at you (don't get me wrong.. :))
resources
Web
(DCE specific)
(LibOS in general)
Github
LKL (Linux Kernel Library)
https://www.nsnam.org/overview/projects/direct-code-execution/
http://libos-nuse.github.io/
https://github.com/libos-nuse/net-next-nuse
https://github.com/lkl/linux

More Related Content

What's hot (20)

PDF
mTCP使ってみた
Hajime Tazaki
 
PDF
Library Operating System for Linux #netdev01
Hajime Tazaki
 
PDF
Kernelvm 201312-dlmopen
Hajime Tazaki
 
PDF
VLANs in the Linux Kernel
Kernel TLV
 
PDF
Achieving Performance Isolation with Lightweight Co-Kernels
Jiannan Ouyang, PhD
 
PPTX
Introduction to DPDK
Kernel TLV
 
PDF
Recent advance in netmap/VALE(mSwitch)
micchie
 
PDF
How to Speak Intel DPDK KNI for Web Services.
Naoto MATSUMOTO
 
PDF
Shoot4U: Using VMM Assists to Optimize TLB Operations on Preempted vCPUs
Jiannan Ouyang, PhD
 
PDF
CETH for XDP [Linux Meetup Santa Clara | July 2016]
IO Visor Project
 
PPTX
Realizing Linux Containers (LXC)
Boden Russell
 
PDF
Introduction to RCU
Kernel TLV
 
PDF
Linux Kernel Cryptographic API and Use Cases
Kernel TLV
 
PPSX
FD.io Vector Packet Processing (VPP)
Kirill Tsym
 
PPTX
Netmap presentation
Amir Razmjou
 
PDF
netfilter and iptables
Kernel TLV
 
PDF
Introduction to eBPF
RogerColl2
 
PDF
Kqueue : Generic Event notification
Mahendra M
 
PPTX
DPDK KNI interface
Denys Haryachyy
 
PDF
The 7 Deadly Sins of Packet Processing - Venky Venkatesan and Bruce Richardson
harryvanhaaren
 
mTCP使ってみた
Hajime Tazaki
 
Library Operating System for Linux #netdev01
Hajime Tazaki
 
Kernelvm 201312-dlmopen
Hajime Tazaki
 
VLANs in the Linux Kernel
Kernel TLV
 
Achieving Performance Isolation with Lightweight Co-Kernels
Jiannan Ouyang, PhD
 
Introduction to DPDK
Kernel TLV
 
Recent advance in netmap/VALE(mSwitch)
micchie
 
How to Speak Intel DPDK KNI for Web Services.
Naoto MATSUMOTO
 
Shoot4U: Using VMM Assists to Optimize TLB Operations on Preempted vCPUs
Jiannan Ouyang, PhD
 
CETH for XDP [Linux Meetup Santa Clara | July 2016]
IO Visor Project
 
Realizing Linux Containers (LXC)
Boden Russell
 
Introduction to RCU
Kernel TLV
 
Linux Kernel Cryptographic API and Use Cases
Kernel TLV
 
FD.io Vector Packet Processing (VPP)
Kirill Tsym
 
Netmap presentation
Amir Razmjou
 
netfilter and iptables
Kernel TLV
 
Introduction to eBPF
RogerColl2
 
Kqueue : Generic Event notification
Mahendra M
 
DPDK KNI interface
Denys Haryachyy
 
The 7 Deadly Sins of Packet Processing - Venky Venkatesan and Bruce Richardson
harryvanhaaren
 

Viewers also liked (20)

PDF
Capturando pacotes de rede no kernelspace
Campus Party Brasil
 
PPT
Linux下Poll和Epoll内核源码剖析
Hao(Robin) Dong
 
PPTX
Data Structures used in Linux kernel
assinha
 
PDF
Uma visão do mundo rails campus party 2011 - fabio akita
Campus Party Brasil
 
PDF
Open Source Systems Performance
Brendan Gregg
 
PDF
DevConf 2014 Kernel Networking Walkthrough
Thomas Graf
 
PPT
Epoll - from the kernel side
llj098
 
PDF
Browsing Linux Kernel Source
Motaz Saad
 
PDF
introduction to linux kernel tcp/ip ptocotol stack
monad bobo
 
PPT
Socket System Calls
Avinash Varma Kalidindi
 
PDF
The linux networking architecture
hugo lu
 
PPTX
The TCP/IP Stack in the Linux Kernel
Divye Kapoor
 
PPT
Basic Linux Internals
mukul bhardwaj
 
PPT
Linux architecture
mcganesh
 
PDF
Blazing Performance with Flame Graphs
Brendan Gregg
 
PDF
Linux Performance Analysis: New Tools and Old Secrets
Brendan Gregg
 
PDF
Linux Systems Performance 2016
Brendan Gregg
 
PPTX
Broken Linux Performance Tools 2016
Brendan Gregg
 
PDF
Architecture Of The Linux Kernel
Dom Cimafranca
 
PDF
Velocity 2015 linux perf tools
Brendan Gregg
 
Capturando pacotes de rede no kernelspace
Campus Party Brasil
 
Linux下Poll和Epoll内核源码剖析
Hao(Robin) Dong
 
Data Structures used in Linux kernel
assinha
 
Uma visão do mundo rails campus party 2011 - fabio akita
Campus Party Brasil
 
Open Source Systems Performance
Brendan Gregg
 
DevConf 2014 Kernel Networking Walkthrough
Thomas Graf
 
Epoll - from the kernel side
llj098
 
Browsing Linux Kernel Source
Motaz Saad
 
introduction to linux kernel tcp/ip ptocotol stack
monad bobo
 
Socket System Calls
Avinash Varma Kalidindi
 
The linux networking architecture
hugo lu
 
The TCP/IP Stack in the Linux Kernel
Divye Kapoor
 
Basic Linux Internals
mukul bhardwaj
 
Linux architecture
mcganesh
 
Blazing Performance with Flame Graphs
Brendan Gregg
 
Linux Performance Analysis: New Tools and Old Secrets
Brendan Gregg
 
Linux Systems Performance 2016
Brendan Gregg
 
Broken Linux Performance Tools 2016
Brendan Gregg
 
Architecture Of The Linux Kernel
Dom Cimafranca
 
Velocity 2015 linux perf tools
Brendan Gregg
 
Ad

Similar to LibOS as a regression test framework for Linux networking #netdev1.1 (20)

PDF
Kubernetes for the PHP developer
Paul Czarkowski
 
PDF
A DevOps guide to Kubernetes
Paul Czarkowski
 
PDF
Kubernetes laravel and kubernetes
William Stewart
 
PDF
App container rkt
Xiaofeng Guo
 
PDF
BKK16-409 VOSY Switch Port to ARMv8 Platforms and ODP Integration
Linaro
 
PPTX
Why you’re going to fail running java on docker!
Red Hat Developers
 
ODP
Building Server Applications Using ObjectiveC And GNUstep
guest9efd1a1
 
ODP
Building Server Applications Using Objective C And Gn Ustep
wangii
 
PPTX
Container & kubernetes
Ted Jung
 
PDF
UniK - a unikernel compiler and runtime
Lee Calcote
 
PDF
Containerization is more than the new Virtualization: enabling separation of ...
Jérôme Petazzoni
 
PDF
Dev opsec dockerimage_patch_n_lifecyclemanagement_2019
kanedafromparis
 
PDF
Debugging Python with gdb
Roman Podoliaka
 
PDF
NodeJS for Beginner
Apaichon Punopas
 
PDF
Building Hopsworks, a cloud-native managed feature store for machine learning
Jim Dowling
 
PDF
The Why and How of HPC-Cloud Hybrids with OpenStack - Lev Lafayette, Universi...
OpenStack
 
PDF
Extending DevOps to Big Data Applications with Kubernetes
Nicola Ferraro
 
PDF
Testing kubernetes and_open_shift_at_scale_20170209
mffiedler
 
PDF
Security of Linux containers in the cloud
Dobrica Pavlinušić
 
PDF
20141111_SOS3_Gallo
Andrea Gallo
 
Kubernetes for the PHP developer
Paul Czarkowski
 
A DevOps guide to Kubernetes
Paul Czarkowski
 
Kubernetes laravel and kubernetes
William Stewart
 
App container rkt
Xiaofeng Guo
 
BKK16-409 VOSY Switch Port to ARMv8 Platforms and ODP Integration
Linaro
 
Why you’re going to fail running java on docker!
Red Hat Developers
 
Building Server Applications Using ObjectiveC And GNUstep
guest9efd1a1
 
Building Server Applications Using Objective C And Gn Ustep
wangii
 
Container & kubernetes
Ted Jung
 
UniK - a unikernel compiler and runtime
Lee Calcote
 
Containerization is more than the new Virtualization: enabling separation of ...
Jérôme Petazzoni
 
Dev opsec dockerimage_patch_n_lifecyclemanagement_2019
kanedafromparis
 
Debugging Python with gdb
Roman Podoliaka
 
NodeJS for Beginner
Apaichon Punopas
 
Building Hopsworks, a cloud-native managed feature store for machine learning
Jim Dowling
 
The Why and How of HPC-Cloud Hybrids with OpenStack - Lev Lafayette, Universi...
OpenStack
 
Extending DevOps to Big Data Applications with Kubernetes
Nicola Ferraro
 
Testing kubernetes and_open_shift_at_scale_20170209
mffiedler
 
Security of Linux containers in the cloud
Dobrica Pavlinušić
 
20141111_SOS3_Gallo
Andrea Gallo
 
Ad

Recently uploaded (20)

PDF
Clive Dickens RedTech Public Copy - Collaborate or Die
Clive Dickens
 
PPTX
My Mother At 66! (2).pptx00000000000000000000000000000
vedapattisiddharth
 
PPT
Almos Entirely Correct Mixing with Apps to Voting
gapati2964
 
PDF
The Convergence of Threat Behaviors Across Intrusions
Joe Slowik
 
PPTX
原版一样(ANU毕业证书)澳洲澳大利亚国立大学毕业证在线购买
Taqyea
 
PDF
web application development company in bangalore.pdf
https://dkpractice.co.in/seo.html tech
 
PDF
Beginning-Laravel-Build-Websites-with-Laravel-5.8-by-Sanjib-Sinha-z-lib.org.pdf
TagumLibuganonRiverB
 
PDF
BroadLink Cloud Service introduction.pdf
DevendraDwivdi1
 
PDF
Google Chrome vs Other Browsers: Why Users Still Prefer It.pdf
hgfdsqetuiplmnvcz43
 
PDF
I Want to join occult brotherhood for money ritual#((+2347089754903))
haragonoccult
 
PDF
Slides: Eco Economic Epochs for The World Game (s) pdf
Steven McGee
 
PDF
Materi tentang From Digital Economy to Fintech.pdf
Abdul Hakim
 
PDF
What Is Google Chrome? Fast & Secure Web Browser Guide
hgfdsqetuiplmnvcz43
 
PPTX
Q1 English3 Week5 [email protected]
JenniferCawaling1
 
PDF
03 Internal Analysis Strategik Manajemen.pdf
AhmadRifaldhi
 
PDF
Download Google Chrome for Fast and Secure Web Browsing Experience
hgfdsqetuiplmnvcz43
 
PPTX
BitRecover OST to PST Converter Software
antoniogosling01
 
PDF
Transmission Control Protocol (TCP) and Starlink
APNIC
 
PPTX
Lesson 1.1 Career-Opportunities-in-Ict.pptx
lizelgumadlas1
 
PPTX
原版一样(ISM毕业证书)德国多特蒙德国际管理学院毕业证多少钱
taqyed
 
Clive Dickens RedTech Public Copy - Collaborate or Die
Clive Dickens
 
My Mother At 66! (2).pptx00000000000000000000000000000
vedapattisiddharth
 
Almos Entirely Correct Mixing with Apps to Voting
gapati2964
 
The Convergence of Threat Behaviors Across Intrusions
Joe Slowik
 
原版一样(ANU毕业证书)澳洲澳大利亚国立大学毕业证在线购买
Taqyea
 
web application development company in bangalore.pdf
https://dkpractice.co.in/seo.html tech
 
Beginning-Laravel-Build-Websites-with-Laravel-5.8-by-Sanjib-Sinha-z-lib.org.pdf
TagumLibuganonRiverB
 
BroadLink Cloud Service introduction.pdf
DevendraDwivdi1
 
Google Chrome vs Other Browsers: Why Users Still Prefer It.pdf
hgfdsqetuiplmnvcz43
 
I Want to join occult brotherhood for money ritual#((+2347089754903))
haragonoccult
 
Slides: Eco Economic Epochs for The World Game (s) pdf
Steven McGee
 
Materi tentang From Digital Economy to Fintech.pdf
Abdul Hakim
 
What Is Google Chrome? Fast & Secure Web Browser Guide
hgfdsqetuiplmnvcz43
 
03 Internal Analysis Strategik Manajemen.pdf
AhmadRifaldhi
 
Download Google Chrome for Fast and Secure Web Browsing Experience
hgfdsqetuiplmnvcz43
 
BitRecover OST to PST Converter Software
antoniogosling01
 
Transmission Control Protocol (TCP) and Starlink
APNIC
 
Lesson 1.1 Career-Opportunities-in-Ict.pptx
lizelgumadlas1
 
原版一样(ISM毕业证书)德国多特蒙德国际管理学院毕业证多少钱
taqyed
 

LibOS as a regression test framework for Linux networking #netdev1.1

  • 2. outline libOS introduction testing framework introduction case studies QA
  • 3. what is LibOS ? Library version of Linux kernel presented at netdev0.1, proposed to LKML (2015) http://www.slideshare.net/hajimetazaki/library-operating-system-for- linux-netdev01
  • 5. how to use it ? Network Stack in Userspace (NUSE) LD_PRELOADed application Network stack personality Direct Code Execution (DCE, ns-3 network simulator) Network simulation integration (running Linux network stack on ns- 3)
  • 6. what is NOT LibOS? not only a userspace operating system not only a debuging tool but LibOS is a library which can link with any programs a library to form any purpose of program
  • 7. anykernel introduced by a NetBSD hacker (rump kernel) Definition: can form various kernel for various platforms userspace (POSIXy), bare-metal, qemu/kvm, Xen Unikernel ? We define an anykernel to be an organization of kernel code which allows the kernel's unmodified drivers to be run in various configurations such as application libraries and microkernel style servers, and also as part of a monolithic kernel. -- Kantee 2012.
  • 8. single purpose operating system - http://www.linux.com/news/enterprise/cloud- computing/751156-are-cloud-operating- systems-the-next-big-thing- Strip downed software stack single purpose resource efficient with speed boot within TCP 3-way handshake [1] [1]: Madhavapeddy et al., Jitsu: Just-In-Time Summoning of Unikernels, USENIX NSDI 2015
  • 9. demos with linux kernel library Unikernel on Linux (ping6 command embedded kernel library) Unikernel on qemu-arm (hello world)
  • 10. what's different ? User Mode Linux generate executable of Linux kernel in userspace no shared library Containers no foreign OS (shared kernel with host) nfsim broader coverage of kernel code
  • 11. recent news Linux kernel library (LKL) is coming by Octavian Purdila (Intel) since 2007, reborn in late 2015 LibOS project is going to migrate to LKL project port NUSE code to LKL already DCE (ns-3 integration) not yet unikernel in progress
  • 13. motivation testing networking code is hard complex cabling inefficiency with massive VM instances You may do in your own large testbed with your test programs
  • 14. are we enough ? - the number of commit per day frequently changing codebase many commits (30~40 commits/day) out of 982K LoC (cloc net/) may have increased num of regression bugs
  • 15. your test easy to create in your laptop with VM (UML/Docker/Xen/KVM) only IF the test is enough to describe
  • 16. your test (cont'd) huge resources to conduct a test not likely to reproduce tons of configuration scripts running on different machines/OSes controling is troublesome distributed debugger...
  • 18. other projects Test suites/projects LTP (Linux test project, ) kselftest ( ) autotest ( ) ktest (in tree, ) kernelci ( ) NetDEF CI (quagga) those are great but networking is always hard controlling remote hosts is (sometimes) painful combination of userspace programs are unlimited timing is not deterministic, across distributed networks https://linux-test-project.github.io/ https://kselftest.wiki.kernel.org/ http://autotest.github.io/ http://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/tools/test id=HEAD https://kernelci.org/
  • 19. why LibOS ? single process model with multiple nodes ease of debug/test/development deterministic behavior (by ns-3 network simulator) rich network configuration by ns-3 network simulator ease of testing by automation (on public CI server)
  • 20. public CI server (circleci.com) test per commit (push) test before commit easily detect regressions
  • 21. architecture 1. Virtualization Core Layer - deterministic clock of simulator - stack/heap management - isolation via dlmopen(3) - single process model 2. Kernel layer - reimplementation of API - glue/stub codes for kernel code - use as-is 3. POSIX glue layer - reimplementation of POSIX API - hijack host system calls
  • 22. How ? a single scenario script (C++, sorry) to describe all application, network stack (kernel as a lib), traffic, link, topology, randomness, timing, etc 1. Recompile your code Userspace as Position Independent Executable (PIE) Kernel space code as shared library (libsim-linux.so) 2. Run with ns-3 Load the executables (binary, library) in an isolated environment among nodes synchronize simulation clocks with apps/kernels clock
  • 23. features app supports routing protocols (Quagga) configuration utilities (iproute2) traffic generator (iperf/ping/ping6) others (bind9, unbound, dig) protocol supports IPv4/ARP/IPv6/ND TCP/UDP/DCCP/SCTP/(mptcp) L2TP/GRE/IP6IP6/FOU
  • 24. what's not useful performance study of the computation deterministic clock assumes unlimited computation/storage resources e.g., you can define 100Tbps link without any packet loss
  • 25. test suite list verify results socket (raw{6},tcp{6},udp{6},dccp{6},sctp{6}) encapsulation (lt2p,ip6ip6,ip6gre,fou) quagga (rip,ripng,ospfv{2,3},bgp4,radvd) mptcp netlink mip6 (cmip6,nemo) simple execution iperf thttpd mptcp+iperf handoff tcp cc algo. comparison ccnd
  • 26. bugs detected by DCE (so far) having nightly tested with the latest net-next (since Apr. 2013~=4yrs) [net-next,v2] ipv6: Do not iterate over all interfaces when finding source address on specific interface. (v4.2-rc0, during VRF) detected by: [v3] ipv6: Fix protocol resubmission (v4.1-rc7, expanded from v4 stack) detected by: [net-next] ipv6: Check RTF_LOCAL on rt->rt6i_flags instead of rt- >dst.flags (v4.1-rc1, during v6 improvement) detected by: [net-next] xfrm6: Fix a offset value for network header in _decode_session6 (v3.19-rc7?, regression only in mip6) http://ns-3-dce.cloud.wide.ad.jp/jenkins/job/daily-net- next-sim/958/testReport/ http://ns-3-dce.cloud.wide.ad.jp/jenkins/job/umip-net- next/716/ http://ns-3-dce.cloud.wide.ad.jp/jenkins/job/daily-net- next-sim/878/
  • 28. network simulator in a nutshell (mainly research purpose) flexible parameter configurations usually in a single process can be extended distributed/parallel processes for speedup usually with abstracted protocol implementation but no abstraction this time (thanks to LibOS) always produce same results (deterministic) can inject pseudo-randomness not realistic sometimes but useful for the test (always reproducible)
  • 29. workflow 1. (installation of DCE) 2. develop a model (of interests) (you already have: the Linux network stack) 3. write a simulation scenario write a network topology parameters configuration (randomization seed, link, traffic, applications) 4. test it one-shot (locally) nightly, per-commit, per-push, etc make testbin -C tools/testing/libos
  • 30. simulation scenario int main(int argc, char **argv) { // create nodes NodeContainer nodes; nodes.Create (100); // configure DCE with Linux network stack DceManagerHelper dce; dce.SetNetworkStack ("ns3::LinuxSocketFdFactory", "Library", StringValue ("libsim-linux-4.4.0.so")); dce.Install (nodes); // run an executable at 1.0 second on node 0 DceApplicationHelper process; ApplicationContainer apps; process.SetBinary ("your-great-server"); apps = process.Install (nodes.Get (0)); apps.Start (Seconds (1.0)); Simulator.Stop (Seconds(1000.0)) Simulator.Run () }
  • 31. API (of DCE helpers) userspace app ns3::DceApplicationHelper class kernel configuration sysctl with LinuxStackHelper::SysctlSet()method printk/log generated into files-Xdirectory (where X stands for the node number) syslog/stdout/stderr tracked per process (files-X/var/log/{PID}/) an instant command (ip) LinuxStackHelper::RunIp() manual https://www.nsnam.org/docs/dce/manual/html/index.html
  • 32. test it ! use waffor a build the script run the script with test.pyto generate XUnit test results run the script with valgrind a wrapper in Makefile cd tools/testing/libos/buildtop/source/ns-3-dce/ ./waf ./test.py -s exapmle -r ./test.py -s exapmle -g make test ARCH=lib ADD_PARAM=" -s example" (the directories may be changed during upstream (etc), sorry 'bout that)
  • 33. case study: encapsulation test ns-3-dce/test/addons/dce-linux-ip6-test.cc unit tests for encapsulation protocols ip6gre, ip6-in-ip6, l2tp, fou with iproute2, ping6, libsim-linux.so (libos) full script https://github.com/direct-code-execution/ns-3- dce/blob/master/test/addons/dce-linux-ip6-test.cc
  • 34. encap protocols tests 1) tunnel configurations LinuxStackHelper::RunIp (nodes.Get (0), Seconds (0.5), "-6 tunnel add tun1 remote 2001:db8:0:1::2 " "local 2001:db8:0:1::1 dev sim0"); LinuxStackHelper::RunIp (nodes.Get (1), Seconds (0.5), "-6 tunnel add tun1 remote 2001:db8:0:1::1 " "local 2001:db8:0:1::2 dev sim0"); 2) set up ping6 command to generate probe packet dce.SetBinary ("ping6"); dce.AddArgument ("2001:db8:0:5::1"); apps = dce.Install (nodes.Get (1)); apps.Start (Seconds (10.0)); 3) verify if the encap/decap work fine or not if (found && icmp6hdr.GetType () == Icmpv6Header::ICMPV6_ECHO_REPLY) { m_pingStatus = true; }
  • 36. XUnit test result generation make test ARCH=lib ADD_PARAM=" -s linux-ip6- test -r"gives you a test result retained % head testpy-output/2016-02-08-09-49-32-CUT/dce-linux-ip6.xml <Test> <Name>dce-linux-ip6</Name> <Result>PASS</Result> <Time real="3.050" user="2.030" system="0.770"/> <Test> <Name>Check that process &#39;plain&#39; completes correctly.</Name> <Result>PASS</Result> <Time real="0.800" user="0.370" system="0.310"/> </Test> <Test> <Name>Check that process &#39;ip6gre&#39; completes correctly.</Name> <Result>PASS</Result> <Time real="0.600" user="0.460" system="0.100"/> </Test> <Test>
  • 37. git bisect you can now bisect a bug with a single program ! prepare a bisect.sh #!/bin/sh git merge origin/nuse --no-commit make clean ARCH=lib make library ARCH=lib OPT=no make test ARCH=lib ADD_PARAM=" -s dce-umip" RET=$? git reset --hard exit $RET run it ! git bisect run ./bisect.sh
  • 38. gcov (coverage measurement) coverage measurement across multiple nodes make library ARCH=lib COV=yes make test ARCH=lib (the COV=yes option does the job for you)
  • 40. gdb (debugger) Inspect codes during experiments among distributed nodes in a single process perform a simulation to reproduce a bug see how badly handling a packets in Linux kernel http://yans.pl.sophia.inria.fr/trac/DCE/wiki/GdbDce
  • 41. valgrind Memory error detection among distributed nodes in a single process Use Valgrind http://yans.pl.sophia.inria.fr/trac/DCE/wiki/Valgrind
  • 42. Summary walk through review of testing framework with LibOS + DCE uniqueness of experiemnt with the library (LibOS) multiple (host) instances in a single process flexible network configurations deterministic scheduler (i.e., bugs are always reproducible)
  • 43. future directions merging to LKL (Linux Kernel Library) part of LibOS has done continuous testing to net-next branch I'm watching at you (don't get me wrong.. :))
  • 44. resources Web (DCE specific) (LibOS in general) Github LKL (Linux Kernel Library) https://www.nsnam.org/overview/projects/direct-code-execution/ http://libos-nuse.github.io/ https://github.com/libos-nuse/net-next-nuse https://github.com/lkl/linux