Differences
This shows you the differences between two versions of the page.
| Both sides previous revision Previous revision Next revision | Previous revision | ||
| summerofcode2015:ptnetmaponbhyve [2015/05/25 20:05] – Add svn links StefanoGarzarella | summerofcode2015:ptnetmaponbhyve [2017/09/18 13:58] (current) – Use local wiki LinkNames (remove absolute wiki urls) KubilayKocak | ||
|---|---|---|---|
| Line 1: | Line 1: | ||
| ====== A FreeBSD/ | ====== A FreeBSD/ | ||
| - | * Student: [[http:// | + | * Student: [[/ |
| * Mentor: [[http:// | * Mentor: [[http:// | ||
| Line 7: | Line 7: | ||
| To avoid VMs networking bottlenecks, | To avoid VMs networking bottlenecks, | ||
| - | **ptnetmap allows userspace applications running in a guest VM to safely use any netmap port with near-native performance (physical devices [14.88 Mpps], software switches [20 Mpps], shared memory channels [75 Mpps]).** | + | **ptnetmap allows userspace applications running in a guest VM to safely use any netmap port with near-native performance (physical devices [14.88 Mpps], software switches [20 Mpps], shared memory channels [50 Mpps]).** |
| I developed a preliminary version for linux/KVM hosts. For this %%GSoC%% project I'll develop host ptnetmap support for bhyve/ | I developed a preliminary version for linux/KVM hosts. For this %%GSoC%% project I'll develop host ptnetmap support for bhyve/ | ||
| Line 19: | Line 19: | ||
| To avoid these bottlenecks, | To avoid these bottlenecks, | ||
| for VMs. | for VMs. | ||
| + | |||
| The preliminary version of ptnetmap for linux/KVM hosts is already done, and on | The preliminary version of ptnetmap for linux/KVM hosts is already done, and on | ||
| this platform both linux and %%FreeBSD%% guest are able to send and receive 14.88 | this platform both linux and %%FreeBSD%% guest are able to send and receive 14.88 | ||
| Line 30: | Line 31: | ||
| The implementation of ptnetmap will be based on our previous prototype above, | The implementation of ptnetmap will be based on our previous prototype above, | ||
| which requires work in the following areas: | which requires work in the following areas: | ||
| - | - netmap framework modifications both for the guest part and the host part, to | + | |
| + | - **netmap framework modifications** both for the guest part and the host part, to | ||
| implement the virtio-like communication and the shared netmap memory; | implement the virtio-like communication and the shared netmap memory; | ||
| (existing code ~ 1900 loc in netmap framework + 300 loc OS specific; | (existing code ~ 1900 loc in netmap framework + 300 loc OS specific; | ||
| estimated new code ~ 300 + 300 loc) | estimated new code ~ 300 + 300 loc) | ||
| - | - guest device driver modifications for the setup of the notification mechanism | + | - **guest device driver modifications** for the setup of the notification mechanism |
| and to share netmap memory; | and to share netmap memory; | ||
| (estimated new code ~800 loc for virtio, assuming the existing netmap | (estimated new code ~800 loc for virtio, assuming the existing netmap | ||
| support for virtio developed by my advisor) | support for virtio developed by my advisor) | ||
| - | - bhyve extensions to expose netmap host memory to the guest and to exchange | + | - **bhyve extensions** to expose netmap host memory to the guest and to exchange |
| notifications. | notifications. | ||
| We need a mechanism like linux' | We need a mechanism like linux' | ||
| Line 62: | Line 64: | ||
| === D3 (due by week 9): === | === D3 (due by week 9): === | ||
| - | implement notification mechanism in bhyve/ | ||
| - | We want to have a similar mechanism to ioeventfd and irqfd available in linux, | ||
| - | to exchange notifications between guest and host threads. | ||
| - | Risk factor: We don't know how long it takes because in linux we had eventfd | ||
| - | already implemented. | ||
| - | |||
| - | === D4 (due by the end of project): === | ||
| kernel thread in netmap host adapter to implement ptnetmap on %%FreeBSD%% host. | kernel thread in netmap host adapter to implement ptnetmap on %%FreeBSD%% host. | ||
| We expect to have the same performance of KVM (over 20 Mpps on VALE port; | We expect to have the same performance of KVM (over 20 Mpps on VALE port; | ||
| - | over 75 Mpps on netmap-pipe; | + | over 50 Mpps on netmap-pipe; |
| The code that the kthread runs, is already done. We need to implement only | The code that the kthread runs, is already done. We need to implement only | ||
| the functions to create/ | the functions to create/ | ||
| (~300 loc on linux). | (~300 loc on linux). | ||
| + | |||
| + | === D4 (due by the end of project): === | ||
| + | implement notification mechanism in bhyve/ | ||
| + | We want to have a similar mechanism to ioeventfd and irqfd available in linux, | ||
| + | to exchange notifications between guest and host threads. | ||
| + | Risk factor: We don't know how long it takes because in linux we had eventfd | ||
| + | already implemented. | ||
| ===== Milestones ===== | ===== Milestones ===== | ||
| Line 84: | Line 86: | ||
| === Timetable: === | === Timetable: === | ||
| - | Week 1-2: add ptnetmap support to virtio device driver and QEMU frontend [D1]. | + | Week 1-2: add ptnetmap support to virtio device driver and QEMU frontend [D1]. --- DONE --- |
| - | Week 3: test, bugfix, and performance evaluation [D1]. | + | Week 3: test, bugfix, and performance evaluation [D1]. --- DONE --- |
| - | Week 4-5: write code to map netmap host memory into the guest [D2]. | + | Week 4-5: write code to map netmap host memory into the guest [D2]. --- DONE --- |
| - | Week 6: test and bugfix [D2]. prepare documents to mid-term evaluation. | + | Week 6: test and bugfix [D2]. prepare documents to mid-term evaluation. |
| - | Week 7-8: implement | + | Week 7-8: implement |
| - | Week 9: test and bugfix [D3]. | + | Week 9: test and bugfix [D3]. --- DONE --- |
| - | Week 10: implement | + | Week 10: implement |
| - | Week 11: test and performance evaluation [D4]. | + | Week 11: test and performance evaluation [D4]. --- DONE --- |
| - | Week 12: clean code and prepare documents to final evaluation. | + | Week 12: clean code and prepare documents to final evaluation. |
| ===== The Code ===== | ===== The Code ===== | ||
| - | [[https://socsvn.freebsd.org/ | + | [[https://svnweb.freebsd.org/ |
| - | [[https://socsvn.freebsd.org/ | + | [[https://svnweb.freebsd.org/ |
| ===== Useful links ===== | ===== Useful links ===== | ||
| + | |||
| + | [[https:// | ||
| [[http:// | [[http:// | ||