ipfw meets netmap (6.5 Mpps in userspace)

Nikolay Denev ndenev at gmail.com
Tue Aug 14 19:53:45 UTC 2012


On Aug 13, 2012, at 2:17 PM, Luigi Rizzo <rizzo at iet.unipi.it> wrote:

> I just finished a netmap-enabled version of ipfw/dummynet, which
> runs in userspace and is able to process over 6 million packets per
> second (Mpps) with simple rulesets, and over 2.2 Mpps through
> dummynet pipes (tested on an i7-3400 connected to VALE ports;
> VALE is a software switch part of netmap).
> You can find it at
> 
> 	http://info.iet.unipi.it/~luigi/dummynet/#8696
> 
> It works on FreeBSD and Linux.
> 
> It even run on OSX, but there is no netmap support there;
> any interest, Apple ? In any case, it should be simple to
> adapt the network backend to talk to other devices.
> 
> To run this you might want to use the most recent version of netmap,
> also recently updated so it works with recent kernels
> 
> 	http://info.iet.unipi.it/~luigi/netmap/
> 
> (the code is already in FreeBSD HEAD).
> 
> On passing, I have also updated the dummynet distributions
> for Linux and Windows, which should now compile for most
> recent version of Linux, and for Windows 32 and 64 bit:
> 
> 	http://info.iet.unipi.it/~luigi/dummynet/
> 
> cheers
> luigi
> _______________________________________________
> freebsd-net at freebsd.org mailing list
> http://lists.freebsd.org/mailman/listinfo/freebsd-net
> To unsubscribe, send any mail to "freebsd-net-unsubscribe at freebsd.org"

Hi Luigi,

I've tried copying netmap sources from HEAD to the latest RELENG_9 branch, but running
kipfw with two VALE interfaces produced immediate kernel panic (transcribed by hand, possible typos):

Fatal trap 12: page fault while in kernel mode
cpuid = 1; apic id = 01
fault virtual address		= 0x28
fault code			= supervisor read data, page not present
instruction pointer		= 0x20:0xffffffff808274da
stack pointer			= 0x28:0xffffff88df1a5530
frame pointer			= 0x28:0xffffff88df1a5550
code segment		= base 0x0, limit 0xfffff, type 0x1b
				= DPL 0, pres 1, long 1, def32 0, gran 1
processor eflags		= interrupt enabled, resume, IOPL = 0
current process		= 2349 (kipfw)
[ thread pid 2349 tid 100612 ]
Stopped at		ifunit_ref+0x2a:
db> bt
Tracing pid 2349 tid 100612 td 0xfffffe0094fd1000
ifunit_ref() at ifunit_ref+0x2a
ifioctl() at ifioctl+0x1cd
netmap_ioctl() at netmap_ioctl+0x121
devfs_ioctl_f() at devfs_ioctl_f+0x7b
kern_ioctl() at kern_ioctl+0x115
sys_ioctl() at sys_ioctl+0xfd
amd64_syscall() at amd64_syscall+0x5ea
Xfast_syscall() at Xfast_syscall+0xf7
--- syscall (54, FreeBSD ELF64, sys_ioctl), rip = 0x800b5eaec, rsp = 0x7fffffffd
888, rbp = 0xc0206911 ---



Anyways, many thanks for you great work on NETMAP and not the super cool user-space IPFW!

Cheers,
Nikolay


More information about the freebsd-net mailing list