I have been working in runtime systems, operating systems and compilers
to improve the performance and safety of programs under multi-core environment,
especially with the following focuses:
Dthreads is an efficient deterministic multithreading
system for unmodified C/C++ applications by replacing the existing
pthreads library.
Dthreads enforces determinism even in the face of data races.
Dthreads works by exploding multithreaded applications into multiple
processes, with private, copy-on-write mappings to shared memory. It uses
standard virtual memory protection to track writes, and deterministically orders
updates by each thread. By separating updates from different threads,
Dthreads has the additional benefit of eliminating false sharing.
Experimental results show that Dthreads substantially outperforms a
state-of-the-art deterministic runtime system, and for a majority of the
benchmarks evaluated here, matches and occasionally exceeds the performance of pthreads.
We provide two tools to handle false sharing problems based on the Sheriff framework:
Sheriff-Detect can find instances of false sharing by comparing updates within
the same cache lines by different threads, and uses sampling to rank
them by performance impact. Sheriff-Detect is precise (no false
positives), runs with low overhead (on average 20%), and is
accurate, pinpointing the exact objects involved in false sharing.
Sheriff-Protect mitigates false sharing problems by adaptively
isolating shared updates from different threads into separate physical
addresses, effectively eliminating most of the performance impact of
false sharing. Sheriff-Protect can be used in the following cases: it is infeasible to fix false sharing problems when source
is unavailable, or undesirable when padding objects would
unacceptably increase memory consumption or further worsen runtime
performance.
Grace is a runtime system for multithreaded programs, which provides good scalability and performance
while eliminating a range of concurrency errors.
To exploit available computing resources (multiple CPUs or cores), Grace
employs a combination of speculative thread execution, supported by a novel virtual-memory
based software transactional memory system, together with a sequential commit protocol.
Redline provides support for interactive applications in
commodity operating systems. Redline works with unaltered
applications and uses standard APIs. Users specify resource
requirements for programs by lightweight specifications,
Redline can enforce these resource allocations on different components of operating systems, including CPU scheduler, memory manager and IO scheduler.
Reduce memory fragmentation:
In this project, we tackled the memory fragmentation problems
in Linux operating system.
By combining "memory allocation according to usage types" and "page migration", we can greatly reduce the memory fragmentation.