Differences
This shows you the differences between two versions of the page.
| Both sides previous revision Previous revision Next revision | Previous revision | ||
| summerofcode2015:ne2000emulationforbhyve [2015/08/23 20:05] – AlexTeaca | summerofcode2015:ne2000emulationforbhyve [2015/08/23 20:17] (current) – AlexTeaca | ||
|---|---|---|---|
| Line 43: | Line 43: | ||
| ===== Final Results ===== | ===== Final Results ===== | ||
| - | I've implemented the NE2000 emulation in the bhyve hypervisor under both PCI and LPC attachements. The full implementation is located in: | + | I've implemented the NE2000 emulation in the bhyve hypervisor under both PCI and LPC attachments. The full implementation is located in: |
| - | / | + | /// |
| In order to use the device in bhyve, you need to configure it in the parameters list as: | In order to use the device in bhyve, you need to configure it in the parameters list as: | ||
| Line 72: | Line 72: | ||
| Any ne2000 device attached under the PCI bus will be probed as the ed2, ed3 ... network interfaces. | Any ne2000 device attached under the PCI bus will be probed as the ed2, ed3 ... network interfaces. | ||
| - | Note0: For the LPC attachements | + | ''' |
| hint.ed.0.at=" | hint.ed.0.at=" | ||
| hint.ed.0.port=" | hint.ed.0.port=" | ||
| Line 78: | Line 78: | ||
| hint.ed.1.at=" | hint.ed.1.at=" | ||
| hint.ed.1.port=" | hint.ed.1.port=" | ||
| - | hint.ed.1.irq=" | + | hint.ed.1.irq=" |
| == Test Plan == | == Test Plan == | ||
| + | All these tests have passed successfully: | ||
| + | * transmit/ | ||
| + | * stop, start the ED interface during the traffic is running | ||
| + | * transmit/ | ||
| + | * enable promiscuous mode with the tcpdump enabled, so all packets are accepted | ||
| - | (List of steps you plan to use to test your work, as discussed | + | == Performance Tests == |
| + | In order to measure the N2000 emulation performance I've used the iperf tool running as server and client in two virtual machine instances.{{{ | ||
| + | guest1: ifconfig ed0 inet 192.168.0.1 | ||
| + | guest2: ifconfig ed1 inet 192.168.0.2}}} | ||
| + | |||
| + | In order to make connectivity between them, I've attached their tap interfaces in a bridge. For example: | ||
| + | ifconfig bridge create | ||
| + | ifconfig bridge0 addm tap0 addm tap1 | ||
| + | ifconfig bridge0 inet 192.168.0.10}}} | ||
| + | |||
| + | For the UDP traffic I've run these iperf commands: | ||
| + | guest2: iperf -s -u | ||
| + | guest1: iperf -c 192.168.0.2 -f Mbyte -u -b 7m | ||
| + | ------------------------------------------------------------ | ||
| + | Client connecting to 192.168.0.2, | ||
| + | Sending 1470 byte datagrams | ||
| + | UDP buffer size: 0.01 MByte (default) | ||
| + | ------------------------------------------------------------ | ||
| + | [ 3] local 192.168.0.1 port 54052 connected | ||
| + | [ ID] Interval | ||
| + | [ 3] 0.0-10.0 sec 7.09 MBytes | ||
| + | [ 3] Sent 5057 datagrams | ||
| + | [ 3] Server Report: | ||
| + | [ 3] 0.0-10.0 sec 7.09 MBytes | ||
| + | [ 3] 0.0-10.0 sec 1 datagrams received out-of-order}}} | ||
| + | |||
| + | For the TCP traffic I've run these iperf commands: | ||
| + | guest2: iperf -s | ||
| + | guest1: iperf -c 192.168.0.2 -f Mbyte | ||
| + | ------------------------------------------------------------ | ||
| + | Client connecting to 192.168.0.2, | ||
| + | TCP window size: 0.03 MByte (default) | ||
| + | ------------------------------------------------------------ | ||
| + | [ 3] local 192.168.0.1 port 31221 connected with 192.168.0.2 port 5001 | ||
| + | [ ID] Interval | ||
| + | [ 3] 0.0-10.0 sec 6.75 MBytes | ||
| + | |||
| + | ''' | ||
| == The Code == | == The Code == | ||