Benchmarking Contention Management Strategies in Clojure’s Software Transactional Memory Implementation
Authors
Kristiansen, Patrick ; Nielsen, Peder
Term
4. term
Education
Publication year
2010
Submitted on
2010-06-07
Pages
64
Abstract
Programmer, der kører flere ting samtidig (samtidighed), bruger ofte låse til at undgå, at tråde arbejder i vejen for hinanden. Låse er svære at bruge rigtigt og kan føre til fejl. Software-transaktionel hukommelse (STM) er et alternativ, der håndterer delt data som små “transaktioner”, lidt som i databaser, så konflikter kan løses automatisk. Clojure, en Lisp-dialekt for Java Virtual Machine, har haft STM fra en tidlig fase. I dette arbejde måler vi ydeevnen af tre konflikthåndteringsstrategier i Clojures STM: Aggressive, Priority og Karma. Konflikthåndteringsstrategier er regler for, hvilken transaktion der får lov at fortsætte, når to transaktioner støder sammen. Vores resultater viser, at valget af strategi har tydelig indflydelse på performance, men at Aggressive, Priority og Karma kun har fordele i få, specifikke situationer sammenlignet med Clojures standardstrategi. Ingen af disse tilfælde giver grund til at erstatte den strategi, Clojure allerede bruger. Da vi kun har undersøgt et begrænset udvalg af strategier fra STM-forskningen, er der behov for fremtidigt arbejde for at se, om andre strategier kan overgå Clojures.
Programs that run tasks at the same time (concurrency) often use locks to stop threads from interfering with each other. Locks are hard to use correctly and can cause errors. Software transactional memory (STM) is an alternative that treats shared data as small “transactions,” similar to databases, so conflicts can be resolved automatically. Clojure, a Lisp dialect for the Java Virtual Machine, has included STM from an early stage. In this work, we benchmark three contention management strategies in Clojure’s STM: Aggressive, Priority, and Karma. Contention management strategies are rules that decide which transaction proceeds when two transactions conflict. Our results show that the choice of strategy clearly affects performance, but Aggressive, Priority, and Karma only help in a few specific situations compared with Clojure’s default strategy. None of these cases justify replacing the strategy Clojure currently uses. Because we tested only a limited set of strategies proposed in STM research, future work is needed to see whether other strategies can outperform Clojure’s.
[This abstract was generated with the help of AI]
Documents
