Research Award Opportunities
One of the most valuable research experiences for an undergraduate student is to be a research assistant. Each year, the department receives a number of research awards that help provide funding for an undergrad student to spend 16 weeks over the summer working full time in one of the department’s research labs, often with the opportunity to publish their work (see examples of previous projects.) This kind of research experience is highly sought after by graduate programs.
All applicants must confirm their eligibility to apply and to work. You must have all necessary requirements prepared (ex. Social Insurance Number and permits).
International students must have a valid Social Insurance Number and be eligible to work on campus for the duration of the award (ex. in the summer). you will be required to provide any necessary details and documentation upon accepting the award (SURE or WLIUR). This is necessary for processing and payment. If you are offered an award but do not meet this criteria, you will not be able to accept. For questions about eligibility, please speak with an International Student Advisor.
Award Categories
The positions are available to 2nd, 3rd, and 4th year students with strong academic records. You'll find more information about the awards available, including eligibility requirements below. Watch for in-class and email announcements from the department for details and deadlines.
NSERC USRA - NSERC Undergraduate Student Research Award
SURE - Science Undergraduate Research Experience Award
WLIUR - Work Learn International Undergraduate Research Award
See the following links for more details:
Eligible UBC Grant Holders in the Faculty of Science for NSERC USRA 2025 - 2026
How to Apply
Deadline: February 7, 2025 at 4:00 PM
New Application Requirement: all applicants are required to apply with a confirmed supervisor. The list of projects and supervisors will be posted on this page, and you can use this to approach any of the supervisors listed. However, you aren't limited to the projects and supervisors listed below. We encourage you to directly contact professors you would like to work with to find a match. Many professors will be happy to talk to you about the opportunity to hire students at a subsidized wage. You can find our faculty directory here. For some additional tips, please see the UBC Careers page.
Required Steps:
- Read the details above and the information at the links on this page
- Determine which awards you are eligible for
- Contact potential supervisors from the Projects and Supervisors list (see below) or by approaching Computer Science faculty members you would like to work with
- Once you have a confirmed supervisor, submit the online application webform by the stated deadline (the webform will become available before the deadline):
- Before submitting, please ensure that you have read over the online guidelines, eligibility requirements, and webform instructions carefully
- Make sure to read all of the instruction text in the webform, there may be important details noted below each field
- When the department is informed of how many awards are available, a departmental adjudication committee will rank the applications based primarily on the student's academic record. All applicants will then receive a decision. If you are selected for an award, you will then receive an email with instructions to submit a new webform to provide additional information/documentation:
- When you are applying: please read the webform carefully to ensure you are prepared to accept by providing these details
- (Your supervisor will also be contacted for required information)
IMPORTANT:
- All students should complete the NSERC Form 202 on the NSERC USRA website by clicking "On-line System Login" or, if you are a first-time user, "Register"
- All students should upload a PDF of the completed NSERC Form 202 to the online application webform
- DO NOT submit the application on the NSERC website until you have been accepted for the award and instructed to do so (at the end only students awarded for NSERC USRA will submit the application to NSERC website)
- Instructions on how to complete the forms can be found on the NSERC USRA website
Questions? For further details, please visit the UBC Student Services website or the NSERC USRA website and review the information and links provided, as these will likely give you the answers to your questions. If you would still like additional assistance, please see our Advising Webform instructions to see if you are eligible to submit a webform request.
Projects and Supervisors: Summer 2025
Margo Seltzer & Swati Goswami
Project: Network Function Caching on Programmable Switches
Network Functions such as firewalls and Network Address Translators (NATs) suffer from poor performance, because they are deployed using software modules running on commodity hardware. We propose accelerating these Network Functions using programmable networking
hardware. More specifically, we implement an in-network cache using programmable switches to improve throughput and latency of Network Function deployments.
The in-network cache implementation presents an interesting design space and our goal is to quantify the trade-offs of different implementation options. The design space includes several parameters such as cache size, associativity, update rate, and the effect of limitations of programmable devices on the choice of caching policy.
Student Responsibilities:
- Implement a cache using programmable networking devices.
- Integrate the cache with our caching policy. Make modifications / improvements to the caching policy as necessary.
- Measure the performance of the prototype deployment with and without cache. Metrics that we will measure include cache hit rate, latency, and throughput of the overall deployment.
- Generate varied workloads for evaluating the prototype.
- Analyze the collected data, and document the report.
Qualifications:
The student should have taken CPSC 317. Experience with C/C++ is also an added bonus. Please note that we are not looking for prior experience with programming networking devices. We will provide all the necessary background information and tutorials for programming specialized networking hardware.
Work Setting:
- On campus and in person
If you are interested, please contact Swati at sggoswam@cs.ubc.ca
Project 1: Modeling Serverless Workloads
Function-as-a-Service (FaaS) is a way to deploy applications in the cloud. Developers simply write their function logic and upload it to the cloud provider. When a request comes in, the cloud provider then takes care of setting up a new execution environment, running the function, and sending back the results. There are many design decisions involved in building such a FaaS system. For example, which host to run the function on, how long to keep the execution environment around to handle a repeated invocation quicky, or how many functions to run concurrently. Evaluating the effects of these and other design decisions is challenging and costly as it requires many different application scenarios.
Instead, to answer these questions we built a customizable simulation infrastructure that lets us play around with various parameters and algorithms that define how these function requests are routed and executed on a system. The goal of this project is to advance the state of the simulator to increase its fidelity, support for various workload scenarios, different algorithms.
Student Responsibilities:
- Work together with two faculty members and external collaborators.
- Attend weekly meetings to discuss and present progress
- The student will advance the python-based simulator and identify, design, and implement evaluation scenarios to help answer questions about the simulated system architecture.
Qualifications:
- Excellent ability to write python
- Good understanding of computer systems.
- Completed Systems Courses at UBC: e.g., CPSC 313 / 317 / 436A
Work Setting:
- On-Site (UBC Vancouver Campus)
Project 2: Verifying Parts of SQLite
SQLite is a widely used database and used by a broad variety of applications on servers, operating systems, smart phones, and even smart watches. SQLite stores its data in a database file. Updating this file correctly under any possible crash scenarios is important to ensure consistency and prevent data loss. SQLite uses a log-based scheme to record updates to its database file and transactions to ensure consistency.
In a previous project we have been looking into using a verification approach in Coq and a framework Perennial. This required rewriting the transaction manager in Go to make use of the tooling. Now, we would like to revisit this choice and either explore tooling to either verify the original C-code or see to use a Rust-based approach including a rewrite of (parts) of SQLite in Rust.
Student Responsibilities:
- Work together with faculty members and possible external collaborators.
- Attend weekly meetings to discuss and present progress
- The student will advance work with verification toolchains.
Qualifications:
- Understanding of verification and proofs.
- Ideally, knowledge of verifiers (e.g., Isabelle/Coq/Dafny/Verus)
- Good understanding of computer systems.
- Completed Systems Courses at UBC: e.g., CPSC 313 / 317 / 436A
Work Setting:
- On-Site (UBC Vancouver Campus)
Project 3: Verified Memory Allocator for Compartmentalization
Memory allocation is a critical component for any software system. Applications dynamically allocate memory to hold their data structures. Typically, memory allocation happened at the granularity of a process. Unfortunately, a process is no longer the unit of isolation, as subsystems and libraries are compartmentalized, i.e., isolated from each other. Each compartment has its own memory access rights. This poses a challenge for memory allocators, as there is no longer a single heap per process, but rather a collection of per-compartment private heaps, and shared heaps that are accessible from multiple compartments. More about compartmentalization: https://arxiv.org/pdf/2410.08434
In this work, we will be looking into specifying the properties of such a memory allocator in a theorem prover and reason about the guarantees. The properties should imply or directly prove higher-level systems properties such as confidentiality and integrity. Finally, we will be proving that a simple memory allocator satisfies the specification.
Student Responsibilities:
- Work together with faculty members and possible external collaborators.
- Attend weekly meetings to discuss and present progress
- The student will specify the properties in a theorem prover (e.g., Verus)
- The student will implement or adapt a memory allocator and prove that the implementation upholds the properties.
- Reason about the performance and memory consumption of the allocator
Qualifications:
- Understanding of verification and proofs.
- Ideally, knowledge of verifiers (e.g., Isabelle/Coq/Dafny/Verus)
- Good understanding of computer systems, in particular memory allocation
- Completed Systems Courses at UBC: e.g., CPSC 313 / 317 / 436A
Work Setting:
- On-Site (UBC Vancouver Campus)
Project 4: Lingua Franca for Hardware Interactions
Lingua Franca (https://www.lf-lang.org/) is a framework to build time-sensitive, concurrent, and distributed systems. Instead of writing code directly requiring developers to reason about concurrency, distributed protocols, and communication, with Lingua Franca, developers write their application in a higher-level abstraction. This, by construction, eliminates a large class of synchronization problems.
Interactions with hardware are yet another form of concurrency. Even a single, normal computer today looks more like a distributed system under the hood: devices and accelerators are independent actors that communicate with each other through messages.
In this work, we will explore the use of the Lingua Franca model regarding interactions between software and hardware. Explore its limitations and features in this context.
Student Responsibilities:
- Work together with faculty members and possible external collaborators.
- Attend weekly meetings to discuss and present progress
- The student will implement software-hardware interactions in LF, explore the features and limitations.
Qualifications:
- Good understanding of computer systems, in particular computer architecture, operating systems, devices
- Ideally, background in modeling
- Completed Systems Courses at UBC: e.g., CPSC 313 / 317 / 436A
Work Setting:
- On-Site (UBC Vancouver Campus)