Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 08 Apr 2015 16:00:51 +0530
From:      Ashish Gupta <writetoashishgupta@gmail.com>
To:        net@freebsd.org
Subject:   Netmap usage in Freebsd10
Message-ID:  <5525035B.9050200@gmail.com>

next in thread | raw e-mail | index | archive | help
Hi Netmap developers,

In very simple application, I am using two freebsd10 vm's spawned using 
Qemu.
About my environment, Underlying host os is linux, freebsd10 vm's are 
guest vms.
These two bsd10 vm's are connected using em interface (which again Qemu 
emulated).

|======  10.10.10.1 (em)                               =======|
|  vm1     |<---------------------------------------------->| vm2        |
|======                                  10.10.10.2(em) ====== |


If i start rapid ping between these vm, i see idle cpu remaining in 
system (bsd10 vm) is just 10-20%.
checking further looking all cpu is going in em driver call (interrupt 
enable/disable) etc.

=======
last pid:  8709;  load averages:  1.89,  1.57, 1.76 up 0+00:38:44 05:59:46
30 processes:  3 running, 27 sleeping
CPU:  2.0% user,  0.0% nice, 72.9% system, 10.2% interrupt, 14.9% idle 
<<<<<<<<<<<<<<<<<<<<<<<<<
Mem: 138M Active, 642M Inact, 91M Wired, 89M Buf, 2624M Free
Swap: 1024M Total, 1024M Free

   PID USERNAME  THR PRI NICE   SIZE    RES STATE    TIME    WCPU COMMAND
  8089 root        1  25    0 18880K  3788K RUN      0:15   6.98% sshd
  8628 root        1  29    0 14456K  1832K RUN      0:11   6.40% ping
==========

I was thinking if i can make use of netmap here to achieve better 
performance, which will also
leave some cpu for other application to run in vm.

I enabled netmap related code changes in if_lem.c of bsd10 but looks 
like these changes also expects
change in Qemu side also.


=======
/*
  * Uncomment the following extensions for better performance in a VM,
  * especially if you have support in the hypervisor.
  * See http://info.iet.unipi.it/~luigi/netmap/
  */
  #define BATCH_DISPATCH
  #define NIC_SEND_COMBINING
  #define NIC_PARAVIRT /* enable virtio-like synchronization */

-----------


#ifdef NIC_PARAVIRT
         device_printf(dev, "driver supports paravirt, subdev 0x%x\n",
                 adapter->hw.subsystem_device_id);
         if (adapter->hw.subsystem_device_id == E1000_PARA_SUBDEV) {  
<<<<<<<<<<
===========

Qemu by default emulated em device with subsystem_device_id as 0x1100.
It mean by enabling netmap change alone in bsd10 will not help.
we also need changes from Qemu.

I checked latest Qemu code but i dont see they emulating em with above 
subsystem_device_id.

Can some one tell me about how to enable Qemu side change, if there is 
any patch available please provide me that to try.
Do we also need application level change (to use /dev/netmap) to gain 
mentioned performance gain or we can get
little bit of gain by just enabling kernel level changes.

--Regards,
Ashish Gupta









Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?5525035B.9050200>