Saturday, November 12, 2011

An Operating System for Multicore and Clouds: Mechanisms and Implementation and Improving Per-Node Efficiency in the Datacenter with New OS Abstractions

fos (factored os) is a system from MIT which tries to tackle the problem of running applications on multicore or cluster of machines.  Current cloud systems force the user to manage the individual virtual machines, and also the communication between machines and between cores.  fos solves the complexity by providing a single os image to the system, and abstracts the hardware away.  This allows the developer to see a single os image either on multi-core system or on a cluster of machines.  Each sub-system in fos is factored and parallelized and distributed over cores or machines.  The single system image provides advantages such as ease of administration, transparent sharing, better optimizations, a consistent view of the system, and fault tolerance.  fos prioritizes space multiplexing over time multiplexing, factoring system services into parallel distributed systems, adapting to resource needs, and providing fault tolerance.  The fos server model uses rpcs to remote servers, but hidden from the developer, so the code can be written without explicit rpcs.  fos intercepts file systems calls to forwards them to the fileserver, and can also spawn new vms on the any machine seamlessly.  Many experiments with syscalls, file system performance, and spawning showed that fos had lots of latency and variability, but a simple http server showed that it performed very similarly to a linux implementation.

Akaros is an os to improve per-node efficiency, performance and predictability of nodes in a cluster to improve the performance of the internet services.  This can improve fault tolerance, since fewer nodes are required to do the same amount of work.  Traditional oses are not good for large scale SMP machines so Akaros is a solution with 4 main ideas.  The underlying principle of Akaros is to expose as much information to the application as possible so it can make better decisions.  Akaros exposes cores instead of threads, so applications can manage the core it is allocated.  Akaros can expose different cores with different time quantas for different latency needs.  Akaros also uses a block abstraction for moving data for more efficient transfers than arbitrary memory addresses.  Akaros also separates the idea of provisioning resources and allocating resources.  Abstractions can be very useful, but they can reduce performance, so Akaros tries to be as transparent as possible for applications, and also provides useful defaults for simplicity.  Akaros uses the many core process abstraction so that the processes can perform their own scheduling on the cores.  The cores are gang scheduled and the kernel does not interrupt them.  All sys calls called with an asynchronous api, to decouple IO from parallelism.  Applications can pin pages in memory and Akaros also allows for application level memory management for low latency.  In addition to block level transfers, disk-to-network, network-to-network, and network-to-disk transferred are optimized.  By separating resource provisioning and allocation, the hardware can be better utilized.

Both projects focus on improving performance and utilization for a cluster, but creating a new os.  fos tries to create a global os, where Akaros focuses on the single node os.  I think the future of clusters will need efforts in both areas.  Having a single os abstraction is nice, but I think fos goes too far in the abstractions. I think developers are just fine with explicitly writing rpcs, or explicitly sharing memory for local threads. Having a VM for each thread is overkill, and I think the future global os will be more lightweight and provide better global resource scheduling for sharing the cluster with many applications.  The future os for the single node should be different than todays stock os, since the stock os was built for different purposes.  However, I don't know if rebuilding the entire os is the way to go.  Mostly, starting from a linux base will be sufficient, and maybe all the features of Akaros will not be necessary.  I think one of the most important features will be the different types of block transfers of data.  Since data sizes are growing and more analysis is being done, more data is being transfered, so efficient large data transfers of Akaros should be implemented in linux systems.

No comments:

Post a Comment