We are seeking a talented and driven
Linux PCIe Driver/system software engineer
to join our team and contribute to the host side software stack of machine learning for the
Next Gen Computational PCIe Flash Controller
project. In this role, you will be a key contributor to the firmware that enables high-performance communication and data transfer between the host and our device. You'll work on critical components, including the
PCIe driver
,
DMA engine
,
MMIO
, and
Mailbox
interfaces, to ensure a seamless and efficient ML workload.
Linux PCIe Driver Development:
Architect and implement high-performance
PCIe drivers
for the
Linux
operating systems. his includes developing a robust architecture for supporting
multiple endpoints
across
multiple cards
and ensuring reliable communication.
PCIe Switch Management:
Design and implement the firmware for supporting complex hardware topologies, including
multiple PCIe cards connected over an external PCIe switch
. You'll be responsible for the driver’s logic to identify and set up the
PCI device address
for each individual PCIe device within each card.
Custom Protocol Design:
Design and implement a custom,
NVMe-like protocol
that operates over
PCIe MMIO
. You'll be responsible for the entire host-side implementation, including:
Doorbell Registers:
Design and implement the mechanism for host software to signal the device by ringing
doorbells
to submit commands.
Command Queues:
Manage command submission and completion queues in memory.
Interrupt Handling:
Develop the interrupt service routines (ISRs) to handle device-generated interrupts and notify the host of command completions and events.
DMA Engine Control:
Orchestrate the
DMA engine
to move data efficiently between the host and device without CPU intervention.
Memory Management:
Architect the software for accessing the device's
SRAM and DRAM
over the
PCIe BAR (Base Address Register) space
, ensuring optimal performance and cache coherency.
Collaboration:
Work closely with the host-side software teams, hardware engineers, and other firmware engineers to ensure a cohesive and high-performing end-to-end solution
Experience:
8+ years in system software development.
Kernel-Mode Expertise:
Extensive experience designing and developing
kernel-mode drivers
for
Linux.
Protocol Knowledge:
Deep understanding of high-speed I/O protocols like
PCIe
and the
NVMe
specification. Experience with the concepts of submission and completion queues,
doorbells
, and
DMA
is a must.
Low-Level Proficiency:
Mastery of
C/C++
and a deep understanding of low-level system software architecture, including
MMIO
and virtual memory.
Cross-OS Development:
Proven ability to manage and maintain a codebase for multiple operating systems.
Problem-Solving:
Exceptional debugging and analytical skills, with a track record of solving the most challenging system-level problems.
Education:
Bachelor's or Master's degree in Computer Science, Electrical Engineering, or a related field.
Sandisk thrives on the power and potential of diversity. As a global company, we believe the most effective way to embrace the diversity of our customers and communities is to mirror it from within. We believe the fusion of various perspectives results in the best outcomes for our employees, our company, our customers, and the world around us. We are committed to an inclusive environment where every individual can thrive through a sense of belonging, respect and contribution.
Sandisk is committed to offering opportunities to applicants with disabilities and ensuring all candidates can successfully navigate our careers website and our hiring process. Please contact us at
jobs.accommodations@sandisk.com
to advise us of your accommodation request. In your email, please include a description of the specific accommodation you are requesting as well as the job title and requisition number of the position for which you are applying.