## 2 Related Work
Onedownside of RCU is that multiple write threads are synchronized with locks, which affects the performance. It also introduces new set of APIs different from locks-based APIs that has to be learned prior to programming an application. Therefore, it is not easy to exploit RCU in synchronizing some of the data structures [22; 24]. RLU is introduced to address the limits of RCU: only a single writing thread is allowed and complex APIs [24]. RLU keeps a write log per thread. Each updated version is recorded in the log with the time of its update. Read threads can access the most up-to-date version of data within the update time frame; thus, the read threads can simultaneously read the data regardless of the write operation. However, it comes with overhead of cleaning including the cost of recycling the write log for a thread [24; 25]. MV-RLU is an extension of RLU that reduces the waiting time in recycling the write log. Typically, RLU keeps only two versions in the log per object at the most. On the contrary, MV-RLU creates multiple versions of data and also has an efficient recycling policy. These decisions are made to increase the performance of the read and write workload [25]. Versioned programming [39] takes also the similar approach as MV-RLU to keep multiple versions and allow each read thread to access appropriate data. However, the version traversal cost is high due to its complexity in version management. Moreover, it exploits lock-free APIs, which means it needs caution in writing a code with versioned programming [36]. Multi-version concurrency control (MVCC) is a concurrency technique widely used in database systems [40; 41; 42], which has been reintroduced by MV-RLU as a scalable concurrency framework for manycore systems. [PERSON] et al. [43]. proposed RCX (RCU extension) to improve the write performance of RCU. RCX takes account of the NUMA architecture and exploits Hardware Transactional Memory (HTM) to provide a fine-grained lock to synchronize write threads. Fine-grained locks are generally considered difficult to write, and even if it is properly written, it may suffer from unpredictable race conditions. RCU has been tested on many different operating systems including Linux and applications [21; 26; 27; 29; 30; 37]. On the contrary, only a few have set out to evaluate RLU and MV-RLU in limited environments [24; 25]. For RLU and MV-RLU to be widely used in different systems, they have to be rigorously tested on other environments. In this paper, we considered an operating system made for manycore machines for evaluation and analysis to reduce the influence of the operating system on RCU-style algorithms. There are a number of different operating systems for scalability in manycore machines [30; 44; 45; 46; 47; 48]. In this paper, we chose an open-source research operating system, sv6 variant[49], as the platform for the performance evaluation after due consideration of library support and ease of analysis. The basis of sv6 is a research operating system called xv6 [50], and it adheres to the POSIX standard [30; 48]. The sv6 operating system is designed based on the manycore scalable software interface. The sv6's file system and virtual memory system exhibited exceptionally good scalability in performance comparison with Linux on a manycore machine. Thus, we believe it is appropriate to use sv6 variant as the operating system to evaluate RCU-style algorithms.