[GSOC PROPOSAL] Making the re(4) Realtek RTL8139 Driver MPSAFE
Yusuf M <[email protected]>
| Newsgroups | gmane.os.netbsd.devel.network |
|---|---|
| Message-ID | <CAJEnmLTdwhFaB0k1yfU5=QvGZvPDrOZ-RWp50u6EO=4dgNerZg@mail.gmail.com> |
Hello,
I am writing to express my interest in working on the "Making a network
driver MPSAFE" project, specifically focusing on the Realtek RTL8139
Gigabit Ethernet driver.
Project Overview:
The goal is to introduce fine grained locking within the re(4) driver,
replacing the old usage of the big networking lock. This will allow for
improved performance in multi-core systems.
Deliverables:
1. MPSAFE re(4) driver
2. Documentation of changes and design decisions
3. Performance benchmarks comparing before/after modifications
Implementation Plan and Schedule:
Phase 1: Analysis and Design (25h):
- Week 1: Study the current re(4) implementation and identify
critical sections.
- Week 2: Review existing MPSAFE drivers listed in
"src/doc/TODO.smpnet".
- Week 3: Design locking strategy and document approach.
Phase 2: Implementation (100h)
- Week 4: Implement device access synchronization.
- Week 5-6: Adapt locking in the interrupt path.
- Week 7-8: Adapt transmit and receive paths.
- Week 9: Adapt init/shutdown paths and sections not covered
earlier.
Phase 3: Testing and Refinement (40h)
- Week 10: Basic functionality testing in QEMU environment.
- Week 11: Performance benchmarking and optimization.
- Week 12: Test edge-cases and on real-hardware.
Phase 4: Documentation and Submission (10h)
- Week 13: Finalize docs and prepare submission.
About your project and NetBSD
I have installed the netbsd operating system to my Thinkpad x250 and
rebuilt the kernel to learn more about the workflow. As for the project
itself, it will be within the kernel subsystem only. The source code for
this project will be contained within the re(4) driver sources which are as
follows:
- src/sys/dev/ic/rtl81x9.c
- src/sys/dev/ic/rtl81x9reg.h
- src/sys/dev/ic/rtl81x9var.h
In terms of knowledge, this project requires you to know NetBSD's kernel
locking primitives, such as condvar(9), mutex(9) and rwlock(9). Basic
knowledge of the kernel network stack and driver APIs are also required. I
have an okay level understanding of both the driver and locking interfaces
from reading NetBSD source code in the past, but I will attempt to brush up
on all these topics over the upcoming weeks. Finally, I have access to a
desktop computer with a RTL8139 PCI card (model TXA001), and will be
conducting driver tests on real hardware.
About Me
I am a second year computer engineering student at the University of
Minnesota, with 4+ years of hobby programming experience, focusing in the
fields of kernel development and server applications.
A favorite project of mine I would like to showcase is the 9x kernel,
written completely from scratch in the C programming language. It took me
around a year to go from a "Hello, World" on the serial console to porting
and running the dash shell. I learned lots of things about kernel design
and development, and made tons of design choices for core kernel components
(such as taking inspiration from SunOS and NetBSD UVM for virtual memory
management).
Link to project: https://github.com/hvrsim/9x
For contact, you may email me at [email protected] and I will
respond within 1-2 days.
I would appreciate any feedback on this proposal and am open to adjustments
to better align with NetBSD's needs.
Thanks,
Yusuf