User-level scheduling on NUMA multicore systems under LinuxSergey Blagodurov
The problem of scheduling on multicore systems remains one of the hottest and the most challenging topics in systems research nowadays. The introduction of non-uniform memory access (NUMA) multicore architectures further complicates this problem, as on NUMA multicore systems the scheduler needs not only to consider the placement of threads on the execution cores, but also the placement of the memory footprints relative to their respective threads. Hardware performance counters and selective hardware-supported instruction sampling, available on all major CPU models, can help tackle the scheduling problem as they provide a wide variety of potentially useful information about a multicore system behavior. The important consideration here, however, what scheduling information should we obtain from the counters and how to properly obtain it on user level. With many performance monitoring tools available for Linux (perfmon, perf, etc.) it can be hard to select the right one and to construct the user-level scheduler capable of making online scheduling decisions.
The goals of this work are (1) to provide a brief overview of the user-level scheduling techniques under Linux, (2) suggest the useful information that can be obtained with the hardware performance counters and instruction-based sampling techniques and (3) to demonstrate how this information can then be used in an online user level scheduler on modern multicore systems. The user level scheduler created as a result of these investigations was used to perform a scheduling research reflected in several top conference and journal publications and which will be released as an open source.