A Task-based Execution Engine for Distributed Operating Systems Tailored to Lightweight Manycores with Limited On-Chip Memory

2021 IEEE 33rd International Symposium on Computer Architecture and High Performance Computing (SBAC-PAD) | , pp. 74-83

Publication | Publication

Operating Systems (OSes) for lightweight manycore processors feature a distributed design, where isolated OS instances cooperate to improve programmability and portability issues that come from their architectural intricacies. However, OS services often resort to processes or threads to implement kernel-level functionalities, consuming much of the already limited on-chip memory available in these processors. In this context, we propose a complementary OS-level execution engine that supports cooperative time-sharing lightweight tasks that share a unique execution stack and features task synchronization via task dependency graphs. This solution provides numerous OS-level execution flows with reduced memory consumption, leaving more room for user-level applications. We implemented our solution in an open-source distributed OS (Nanvix) and we compared it with the standard implementation that uses threads. The results obtained on Kalray MPPA-256 show that our engine: (i) provides 63.2x more execution flows per MB of memory; (ii) features 15.8x and 1.87x less overhead to spawn and destroy an execution flow, respectively, while consuming 6.65x less energy; (iii) runs remote system calls 3x faster; and (iv) reduces the memory footprint in 0.58x when executing OS services requests without impacting the overall system performance.