Atomic quake: using transactional memory in an interactive multiplayer game server
Abstract
Transactional Memory (TM) is being studied widely as a new technique\nfor synchronizing concurrent accesses to shared memory data\nstructures for use in multi-core systems. Much of the initial work\non TM has been evaluated using microbenchmarks and application\nkernels; it is not clear whether conclusions drawn from these\nworkloads will apply to larger systems. In this work we make the\nfirst attempt to develop a large, complex, application that uses TM\nfor all of its synchronization. We describe how we have taken an\nexisting parallel implementation of the Quake game server and\nrestructured it to use transactions. In doing so we have encountered\nexamples where transactions simplify the structure of the program.\nWe have also encountered cases where using transactions\noccludes the structure of the existing code. Compared with existing\nTM benchmarks, our workload exhibits non-block-structured\ntransactions within which there are I/O operations and system call\ninvocations. There are long and short running transactions (200–\n1.3M cycles) with small and large read and write sets (a few bytes\nto 1.5MB). There are nested transactions reaching up to 9 levels\nat runtime. There are examples where error handling and recovery\noccurs inside transactions. There are also examples where data\nchanges between being accessed transactionally and accessed nontransactionally.\nHowever, we did not see examples where the kind\nof access to one piece of data depended on the value of another.