Download - STM on PyPy
![Page 2: STM on PyPy](https://reader033.vdocuments.mx/reader033/viewer/2022042518/55a9f0311a28abae418b470e/html5/thumbnails/2.jpg)
![Page 3: STM on PyPy](https://reader033.vdocuments.mx/reader033/viewer/2022042518/55a9f0311a28abae418b470e/html5/thumbnails/3.jpg)
![Page 4: STM on PyPy](https://reader033.vdocuments.mx/reader033/viewer/2022042518/55a9f0311a28abae418b470e/html5/thumbnails/4.jpg)
The Free Lunch Is Over: A Fundamental Turn Toward Concurrency in Software
Herb Sutterhttp://www.gotw.ca/publications/concurrency-ddj.htm
![Page 5: STM on PyPy](https://reader033.vdocuments.mx/reader033/viewer/2022042518/55a9f0311a28abae418b470e/html5/thumbnails/5.jpg)
![Page 6: STM on PyPy](https://reader033.vdocuments.mx/reader033/viewer/2022042518/55a9f0311a28abae418b470e/html5/thumbnails/6.jpg)
Inside the Python GIL
David Beazleyhttps://www.youtube.com/watch?v=ph374fJqFPE
![Page 7: STM on PyPy](https://reader033.vdocuments.mx/reader033/viewer/2022042518/55a9f0311a28abae418b470e/html5/thumbnails/7.jpg)
![Page 8: STM on PyPy](https://reader033.vdocuments.mx/reader033/viewer/2022042518/55a9f0311a28abae418b470e/html5/thumbnails/8.jpg)
Removing the GIL
● Fine-grained locking● Shared-nothing● STM
![Page 9: STM on PyPy](https://reader033.vdocuments.mx/reader033/viewer/2022042518/55a9f0311a28abae418b470e/html5/thumbnails/9.jpg)
BEGIN;
UPDATE accounts SET balance = balance - 100.00
WHERE name = 'Alice';
UPDATE accounts SET balance = balance + 100.00
WHERE name = 'Bob';
COMMIT;
![Page 10: STM on PyPy](https://reader033.vdocuments.mx/reader033/viewer/2022042518/55a9f0311a28abae418b470e/html5/thumbnails/10.jpg)
def update_account(src_account_id, dst_account_id, amount):
with atomic:src_account = accounts[src_account_id]dst_account = acconts[dst_account_id]dst_account.deposit(account.withdraw(amount))
![Page 11: STM on PyPy](https://reader033.vdocuments.mx/reader033/viewer/2022042518/55a9f0311a28abae418b470e/html5/thumbnails/11.jpg)
● Hardware and Software support● Some modern processors (Haswell) support it
– https://software.intel.com/en-us/blogs/2012/02/07/transactional-synchronization-in-haswell
![Page 12: STM on PyPy](https://reader033.vdocuments.mx/reader033/viewer/2022042518/55a9f0311a28abae418b470e/html5/thumbnails/12.jpg)
● Transaction is started● Memory read are logged into read set● Memory writes are logged into write set● Commit is attempted
![Page 13: STM on PyPy](https://reader033.vdocuments.mx/reader033/viewer/2022042518/55a9f0311a28abae418b470e/html5/thumbnails/13.jpg)
![Page 14: STM on PyPy](https://reader033.vdocuments.mx/reader033/viewer/2022042518/55a9f0311a28abae418b470e/html5/thumbnails/14.jpg)
PyPy approach
![Page 15: STM on PyPy](https://reader033.vdocuments.mx/reader033/viewer/2022042518/55a9f0311a28abae418b470e/html5/thumbnails/15.jpg)
Illustration taken from Armin Rigo
![Page 16: STM on PyPy](https://reader033.vdocuments.mx/reader033/viewer/2022042518/55a9f0311a28abae418b470e/html5/thumbnails/16.jpg)
Problems
● Too experimental● Only runs in 64 bit Linux and patched version of
Clang (just for translation)● Limited to 1.5 GB of Ram (Configurable)● JIT warm up still pretty bad● Different GC from regular PyPy (Less efficient)● Long running processes crash
![Page 17: STM on PyPy](https://reader033.vdocuments.mx/reader033/viewer/2022042518/55a9f0311a28abae418b470e/html5/thumbnails/17.jpg)
Demo
![Page 18: STM on PyPy](https://reader033.vdocuments.mx/reader033/viewer/2022042518/55a9f0311a28abae418b470e/html5/thumbnails/18.jpg)
References
● Rajwar, Herlihy and Lai: Virtualizing Transactional Memory
● Herlihy and Moss: Transactional Memory: Architectural Support for Lock-Free Data Structures
● Dice, Shalev, Shavit: Transactional Locking II
![Page 19: STM on PyPy](https://reader033.vdocuments.mx/reader033/viewer/2022042518/55a9f0311a28abae418b470e/html5/thumbnails/19.jpg)
Donations
● http://pypy.org/tmdonate2.html