Network Computing Laboratory, Columbia University Home 
People 
Publications  
Research Projects
Resources
Lab Tour
STUDENT PROJECTS
In addition to getting involved in our current research projects, several other projects are available for undergraduate, MS, and PhD students. These involve work in multiprocessor operating systems, resource management for interactive multimedia systems, WWW performance evaluation, and thin-client and network computing. Candidates should have a working knowledge of C, Java, or Tcl/Tk. Background in operating systems (COMS W4118) and/or networks (COMS W4119) is desirable. Undergraduates must have taken data structures and algorithms (COMS W3139). Projects can be taken for credit (COMS W3998, COMS W4901, and COMS E6901) and, in exceptional cases, for remuneration. Contact Professor Nieh for further information.

Current projects available include:

  • Evaluating Thin-client Computing Performance: Much fanfare has surrounded the introduction of thin client computing from Citrix, Microsoft, Sun, SCO, and others. Application service providers (ASPs) are using thin-client computing to enable desktop machines, web browsing terminals, and other low-cost embedded devices to function as simple user interface devices for accessing computational services over the Internet. To assess the viability of the thin-client computing model, design, develop, and conduct a series of experiments to quantify the performance of thin-client platforms for various application workloads. An isolated network testbed, as used for previous thin-client performance measurements, will be available for this project.
  • Shrinking and Automatically Configuring Linux: An installation of RedHat Linux takes up several hundred megabytes of disk space, even without installing the window system. Can you develop a version of Linux that compiles itself and fits on a floppy disk or two? What is the minimum space requirement of a Linux system that can compile itself? How can Linux be automatically configured to trade off resource and functionality requirements?
  • Stackable File Systems under Windows NT: NT has a different file system interface than Unix's vnode interface. NT's I/O subsystem defines its file system interface. NT Filter Drivers are optional software modules that can be inserted above or below existing file systems. The task of these Filter Drivers is to intercept and possibly extend file system functionality. One example of an NT filter driver is its virus signature detector. It is therefore possible to emulate file system stacking under NT, the way it is done in BSD4.4 or through other work such as the Wrapfs stackable templates (Solaris, Linux, and FreeBSD). Create a stackable template layer for Windows NT, and use it to implement a transparent encryption file system. Existing stackable templates (Wrapfs, Cryptfs) for Unix systems will be provided in doing this project.
  • Decomposition of Functionality for Distributed Systems: The client/server model is used for many distributed applications and systems. An interesting question is how does one decide on the decomposition of application functionality between the client and the server? Is the goal to minimize network bandwidth because networks are slow, or maximize client computation because desktop systems are fast, or something else? For instance, thin client systems such as VNC move all computations to the server and just send pixel updates to the client. As a result, clients do not have much computing power but networks need to have more bandwidth and less latency for the system to run well. Select a client/server distributed system or application and examine how the resource requirements of the system change depending on how the functionality is partitioned.
  • Middleware Resource Management: Management of machine resources such as CPU, memory, disk, etc. is traditionally done within the operating system. However, this typically requires operating system kernel source code modifications, which may be difficult to deploy. An alternative is to implement resource management functionality at the middleware level in user space outside of the kernel. A device driver may also be implemented to provide access to lower level hardware information, such as interrupts. Design a proportional share middleware resource management framework that does as much resource management as possible outside of the kernel.
  • Distributed Middleware Management: Suppose you have a set of applications and a set of machines that you can use to run them. What is the best way to allocate the applications to the machines to make the best use of available machine resources? Design a distributed middleware framework that can assign applications to distributed machines to provide good load balancing behavior across the machines. As a further step, enable this framework to function effectively across a heterogeneous set of machines with different operating systems.
  • OS Benchmarking: Operating system performance can be measured in many different ways. One can measure its interactive performance, how well it supports a web server, how reliable the system is, how well databases run on it, etc. Conduct an exhaustive survey of operating system benchmarking techniques and discuss the tradeoffs of the different approaches. What aspects of operating system performance are hard to measure? Select a representative set of these techniques and benchmark several operating system platforms. Discuss your results.
  • OS Scalability: Future data centers will provide computational services for thousands of users. How well do existing operating systems scale in meeting the demands of large numbers of activities? For instance, does scheduling overhead grow linearly or worse so that systems that are heavily loaded waste time in the operating system exactly when they don't have the time to spare? Compare the scalability of commercial operating systems by measuring their performance under heavy workloads.
  • Real-time Performance: Real-time multimedia services are the wave of the future, but can today's operating systems support them effectively? A number of commercial operating systems (Linux, NT, Solaris) claim to provide support for real-time applications. Measure and compare the real-time performance of commercial operating systems. For instance, if a process has the highest priority in the system, how does its dispatch latency change as the number of other processes running in the system increases?
  • Proportional Share Linux: Design and implement a complete proportional share resource management system for Linux, including management of CPU, memory, locks, and network resources. Particular attention should be focused on when to time-multiplex vs space-multiplex resources. Enable your system to assign shares to groups of processes as well as individual processes. The share assignment mechanisms and policies should provide similar functionality to the ticket mechanisms and policies of Lottery scheduling.
  • Real-time Multiprocessor Scheduling: Much work has been done dealing with uniprocesor scheduling for real-time processes, but hardware vendors are moving toward multiprocessor platforms and the work in multiprocessor scheduling is more more limited. Quantitatively evaluate the effectiveness of Solaris running on a 4-processor multiprocessor in meeting the time constraints of real-time processes.
  • WWW Performance: Why does it sometimes take so long to be able to load a web page? Where does the time go? To help answer this question, instrument an Apache web server and build a browser plugin that together measure the total amount of time it takes to download web pages for viewing in a browser. Determine how server, client, and network delays contribute to overall user-perceived response time.
  • QoS Policies for Audio and Video Applications: Lots of folks have talked about adaptive audio and video applications that can adjust their resource requirements depending on QoS. Little work has been done on how such applications actually adapt and whether users would actually find such adaptations qualitatively acceptable. Using an existing video player application, conduct a series of experiments to evaluate what adaptation policies are best for different levels of resource constraints.
  • Marketplace for Reusable Software Components: This project will be conducted with two Columbia Business School students who are forming an online marketplace that enables application developers to buy and sell reusable software components. The business students have a strong background in venture capital but require a third person with technical experience in software development. The technical issues that need to be addressed include: (1) What components are being developed that can be most easily reused, (2) What components are in demand within the development and IT industries, (3) Validation and testing requirements, (4) Licensing, secure delivery, and pricing of the components (5) What service level is required for various components, (6) How much customization is required by the sellers of different components in order to facilitate reuse? In addition to the technical component of the project, students will learn about the business side of building a new business.
  • Hardware Interactivity Recorder: What is the interactivity rate between users and computers? To answer this question, build a hardware device that records keyboard and mouse events and plays them back with the exact same timing characteristics. Use the device to measure user interactivity on a desktop computer.