UNIVERSITY OF WISCONSIN-MADISON
Computer Sciences Department
CS 736
Fall 2019
Barton Miller

Project List

(Project Assigned: Monday, October 2)
(Project Proposal Due: Friday, October 18, in class)
(Midway Interviews: Thursday and Friday, November 8 and 9)
(Draft Report to Referees: Friday, December 6, in class)
(Referee Reports to Authors: Wednesday, December 11 noon)
(Final Reports Due: Monday, December 16, noon)
(Project Poster Session: Friday, December 13)

General Comments

The projects are intended to give you an opportunity to study a particular area related to operating systems. Your project will require a test implementation, measurement study or analysis, literature search, and evaluation.

The project suggestions below are briefly stated. They are intended to guide you into particular areas and you are expected to expand these suggestions into a full project descriptions. This gives you more freedom in selecting an area and more burden in defining your own project. There may be more issues listed for a project than you can cover. If you have a topic of your own that is not listed below, you should come and talk with me so we can work out a reasonable project description.

You will write a paper that reports on your project. This paper will structured as if you were going to submit it to a conference. I will provide more details on the project report later in the semester.

You should work in teams of two people (and, in certain cases three people) on the project and report.

Projects

Here are a few project suggestions. Some that I have mentioned in class, plus a few other ideas. I also encourage you to develop an idea of your own (in consultation with me).

(1) Benchmarking a System of Your Own

For your first assignment, you did a series of simple micro-benchmarks. The goal of this assignment is to perform an thorough benchmarking study of some interesting system with which you are involved. As with any real benchmarking study, you will take this in two conceptual pieces:

Macro-benchmarking: In this step, you will try to understand what are the critical performance measures for your system. For example, a database system might use transactions/second, data transfer rates, and transaction latency. You will also look at overall performance measures like CPU utilization and I/O rates.

Micro-benchmarking: Once you have your macro numbers, you then need to explain why your behaves that way. That will require detailed performance measures of parts of your code and the system.

You will need to find tools to help you do this benchmarking. There are some obvious Linu utilities for helping (such as top, and you can also write you own custom tools. Plus there are tools like Intel's highly regarded Vtune product and research tools like HPCToolkit from Rice University.

For your proposal, you will need to select a system, come up with an initial set of benchmarks to collect, and investigate some tools.

(2) More Fuzz Testing of Programs:

Join a distinguished line of CS736 projects! In the past (1990, 1995, 2000, and 2006), we have used random input to test the reliability of application programs on UNIX and NT. These techniques have been quite effective in finding bugs, and have been widely cited. Fuzz testing has become a fundamental technique in both the testing and security communities, and it all started with CS736 projects. Here are a couple of different fuzz projects that you might undertake (you are free to think of others):

A. Comparing the Free Unix Variants

The goal of this project is to take the previous study of applications on various platforms and repeat the study on command-line and X-window applications across the various free/open UNIX systems such as Linux, BSDi, freeBSD, and even the simple V6-based UNIX version used for operating system class projects, Xv6.

As a product of this project, we would like to provide: (1) an update of the tool set that can be used by other developers, (2) bug reports for the software vendors, and (3) bug fixes for these bugs.

B. Fuzz Testing of Threads

Multi-threaded programming is challenging and bugs in such programs can be the most difficult type to find. While there has been a lot of work in tools for detecting races in such programs, we are going to take a different approach: apply randomness.

The idea is to apply random testing to thread scheduling. The goal of this project is to test multi-threaded programs by randomizing and biasing the thread scheduler. Such randomization and bias has the potential to expose synchronization problems in multi-thread programs. As multi-core processors are increasing the prevalence of multi-threaded programs, such testing only becomes more interesting.

You will have to choose a threading environment, probably pthreads, understand what type of controls an application program has over the scheduling decisions, and how you will manipulate these controls under test. You will also have to choose a set of programs to test and (when you find bugs), identify the causes of the bugs. Note that this debugging step can be quite challenging.

(3) Multiple Condition Variables in Java :

As we discussed in class, Java has the awkward feature that a monitor (synchronized class) can have only one implicitly-declared condition variable. The goal of this assignment is to modify a Java compiler to allow the use of variables explicitly declared to be of type condition.

You will first figure out how to extend the language grammar to support explicit condition variables, including: (1) declaration of this new type of variable, (2) syntax checks to restrict their use to synchronized classes and methods, and (3) explicitly naming the variables to use them.

You will then select an open source Java compiler and figure out how to modify the compiler to allow these declarations and generate the proper byte code. Once you have done that, you will write some sample programs to demonstrate their use.

A working assumption, that you will have to verify, is that the Java Virtual Machine byte code can support these mechanisms without any modification.

(4) Extreme Scale: The Multicast-Reduce Network (MRNet):

Big data is everywhere now, and my research project has been working on these kind of problems before the term "big data" was coined. As part of that effort, we developed an infrastructure to build highly-scalable program. Infrastructures for scalable computing are intended to ease the task of distributed programming, reducing errors and making it easier to bulk process large amounts of data easily. Our approach to scalability is to form the computation into a tree.

Our scalability infrastructure, called MRNet (Multicast Reduction Network), is good for large scale control and monitoring, stream data processing, and parallel applications. This infrastructure has been used to build tools that control more than a million processes or cluster billion of data points.

The goal of this assignment is to build a scalable program or tool based on MRNet. One possible project is to start with the collection of up to a billion (!) Tweets that we can provide to you, and then you will design and implement a program that analyzes these Tweets to extract some common characteristics of the data. You can also develop your own idea (in consultation with Bart) for a scalable program or tool. Whichever idea you choose, you will get the program working and benchmark its performance to understand its limits on scalability.

Project Proposal

The project descriptions listed above a intentionally brief. You will need to expand and refine these to develop your own project. Different groups may choose the same topic, but have significantly different emphases.

Your project proposal will describe your goals, methods, implementation outline, evaluation criteria, and resources needed. You will need to describe the basic problem that you will be addressing.

Provide a more detailed description of how you will approach the problem. This description should be contain much more detail than the brief paragraphs given above. Specifically, you will need to describe:

  1. An outline of features that you project will include;
  2. An implementation plan with week-by-week schedule;
  3. An evaluation plan.

Project proposals will typically be three to four pages, formatted the same as you did for the first paper.

It it crucial that you discuss your approach with me before you write your proposal. This will allow you make a quick start.

It is also crucial that you keep to your plan (or even ahead of it); if you try to do all of your project in the last week or two, you will crash and burn.

Referee Report

Each of you will referee the paper from another group. I am providing you with a sample referee report form, that is similar to one that I used for a recent conference. I am also providing you with two sample referee reports, to give you an idea of what might appear in a real report.

In general, a referee report starts with a summary of the main idea(s) in the paper, and then has an overall statement of the quality. You should then review the main technical ideas. In addition, either a marked-up copy of the paper, with typos and related errors, or a summary of typos and related errors should be given to the authors. 

Valid HTML 4.01 Transitional


Last modified: Wed Oct 23 13:36:21 CDT 2019 by bart