emmericp / MoonGen

MoonGen is a fully scriptable high-speed packet generator built on DPDK and LuaJIT. It can saturate a 10 Gbit/s connection with 64 byte packets on a single CPU core while executing user-provided Lua scripts for each packet. Multi-core support allows for even higher rates. It also features precise and accurate timestamping and rate control.
MIT License
1.04k stars 235 forks source link

hang after cores detected #222

Closed bhartpence closed 6 years ago

bhartpence commented 6 years ago

Hello - I am running Ubuntu 16.04 in a VM with 4 cores. The goal is to be able to test OVS. However, I go to run either libmoon or MoonGen examples and while everything "looks" OK - but every one of the examples hangs after "Initializing DPDK .... EAL: detected 4 lcore(s)"

I believe everything is installed properly (build, bin-interface, setup-hugetlbfs all run without error) and the interfaces can be detected/used

I looked through the closed issues and didn't see this one - any thoughts?

emmericp commented 6 years ago

This indicates that DPDK hangs on some early driver initialization. Two things to try:

1) only bind one specific NIC to DPDK 2) use the whitelist feature in libmoon/dpdk-conf.lua to whitelist exactly one PCI ID (which can be different from (1) -- it can hang even on NICs not bound to DPDK

Which hypervisor are you using? In general, it is often not the best idea to use a VM as packet generator.

bhartpence commented 6 years ago

Thanks for getting back - I previously edited the dpdk config file to add the interfaces and whitelisted them. I just increased the resources of the VM and things got a little better. I'll post what I find.

I am using ESXi (vsphere 6) as my hypervisor as I am working with datacenter problems. The goal is to test OVS without the variables introduced by going through external interfaces or switches.

emmericp commented 6 years ago

We've used it with esxi in the past, so it should work. But expect limitations. In general, KVM is preferred for VMs due to better driver support.

Just because it's possible doesn't mean that it's a good idea. All modern benchmarking standards for such things don't want a packet generator in a VM but an external packet generator. See RFC 8204 and ETSI NFV TST009 for examples

bhartpence commented 6 years ago

OK - I have it working: running MoonGen through an OVS instance. I appreciate your comments regarding RFC 8204 but strictly speaking, I'm not benchmarking - just trying to generate competing traffic. In the case of the data center, this often comes from other nodes or processes that are internal. I may push the generator outside of the hypervisor but for right now I was hoping to stay internal. I was using iperf but it does seem to generate enough traffic. But, it also appears that MoonGen has the ability to out do OVS in terms of traffic forwarding.