TMPA-2015: Automated Testing of Multi-thread Data Structures Solutions Linerializability
-
Upload
iosif-itkin -
Category
Science
-
view
2.697 -
download
1
Transcript of TMPA-2015: Automated Testing of Multi-thread Data Structures Solutions Linerializability
![Page 1: TMPA-2015: Automated Testing of Multi-thread Data Structures Solutions Linerializability](https://reader034.fdocuments.net/reader034/viewer/2022050613/58a6d9a41a28abef698b5423/html5/thumbnails/1.jpg)
Антон Евдокимов ([email protected])
Дмитрий Цителов ([email protected])
Роман Елизаров ([email protected])
Виталий Трифанов ([email protected])
Автоматическое тестирование
линеаризуемости реализаций
многопоточных структур
данных
![Page 2: TMPA-2015: Automated Testing of Multi-thread Data Structures Solutions Linerializability](https://reader034.fdocuments.net/reader034/viewer/2022050613/58a6d9a41a28abef698b5423/html5/thumbnails/2.jpg)
В чем проблема?
─ Процессоры многоядерные
─ Нужно писать многопоточный код
─ Это не так просто
─ В многопоточной среде появляются
специфические проблемы
─ Одновременный доступ к разделяемым
ресурсам
![Page 3: TMPA-2015: Automated Testing of Multi-thread Data Structures Solutions Linerializability](https://reader034.fdocuments.net/reader034/viewer/2022050613/58a6d9a41a28abef698b5423/html5/thumbnails/3.jpg)
В чем проблема?
![Page 4: TMPA-2015: Automated Testing of Multi-thread Data Structures Solutions Linerializability](https://reader034.fdocuments.net/reader034/viewer/2022050613/58a6d9a41a28abef698b5423/html5/thumbnails/4.jpg)
В чем проблема?
─ Стандартные подходы к тестированию
не работают
─ Но проверять корректность
реализации все равно хочется
![Page 5: TMPA-2015: Automated Testing of Multi-thread Data Structures Solutions Linerializability](https://reader034.fdocuments.net/reader034/viewer/2022050613/58a6d9a41a28abef698b5423/html5/thumbnails/5.jpg)
Линеаризуемость
─ Любое параллельное исполнение эквивалентно
некоторому последовательному
![Page 6: TMPA-2015: Automated Testing of Multi-thread Data Structures Solutions Linerializability](https://reader034.fdocuments.net/reader034/viewer/2022050613/58a6d9a41a28abef698b5423/html5/thumbnails/6.jpg)
Метод
─ Взять небольшое количество потоков
─ В каждом несколько операций над
структурой данных
─ Запустить много-много раз и
попытаться объяснить результаты
последовательной перестановкой
─ Повторить
![Page 7: TMPA-2015: Automated Testing of Multi-thread Data Structures Solutions Linerializability](https://reader034.fdocuments.net/reader034/viewer/2022050613/58a6d9a41a28abef698b5423/html5/thumbnails/7.jpg)
Метод
![Page 8: TMPA-2015: Automated Testing of Multi-thread Data Structures Solutions Linerializability](https://reader034.fdocuments.net/reader034/viewer/2022050613/58a6d9a41a28abef698b5423/html5/thumbnails/8.jpg)
Границы применимости метода
─ Подходит для популярных структур
данных
─ Очереди, множества, хеш-таблицы…
─ Но
─ Структура данных не зависит от
внешней среды
─ Не блокируется
─ Метод точен, но не полон
![Page 9: TMPA-2015: Automated Testing of Multi-thread Data Structures Solutions Linerializability](https://reader034.fdocuments.net/reader034/viewer/2022050613/58a6d9a41a28abef698b5423/html5/thumbnails/9.jpg)
Очередь
![Page 10: TMPA-2015: Automated Testing of Multi-thread Data Structures Solutions Linerializability](https://reader034.fdocuments.net/reader034/viewer/2022050613/58a6d9a41a28abef698b5423/html5/thumbnails/10.jpg)
Генерация тестовых наборов
─ Наивно?
─ Операции
─ Изменяют структуру данных
─ Не изменяют
─ Аргументы
─ Влияют на логику поведения
структуры данных
─ Не влияют
![Page 11: TMPA-2015: Automated Testing of Multi-thread Data Structures Solutions Linerializability](https://reader034.fdocuments.net/reader034/viewer/2022050613/58a6d9a41a28abef698b5423/html5/thumbnails/11.jpg)
Генерация тестовых наборов
![Page 12: TMPA-2015: Automated Testing of Multi-thread Data Structures Solutions Linerializability](https://reader034.fdocuments.net/reader034/viewer/2022050613/58a6d9a41a28abef698b5423/html5/thumbnails/12.jpg)
Генерация тестовых наборов
![Page 13: TMPA-2015: Automated Testing of Multi-thread Data Structures Solutions Linerializability](https://reader034.fdocuments.net/reader034/viewer/2022050613/58a6d9a41a28abef698b5423/html5/thumbnails/13.jpg)
Генерация тестовых наборов
P Q
offer(1);
offer(2);
poll();
poll();
![Page 14: TMPA-2015: Automated Testing of Multi-thread Data Structures Solutions Linerializability](https://reader034.fdocuments.net/reader034/viewer/2022050613/58a6d9a41a28abef698b5423/html5/thumbnails/14.jpg)
Последовательные исполнения
─ Перестановки исходного набора
операций
─ С сохранением порядка операций для
каждого потока
![Page 15: TMPA-2015: Automated Testing of Multi-thread Data Structures Solutions Linerializability](https://reader034.fdocuments.net/reader034/viewer/2022050613/58a6d9a41a28abef698b5423/html5/thumbnails/15.jpg)
Последовательные исполнения
P Q
offer(1);
offer(2);
poll();
poll();
offer(1); poll() {1}; offer(2); poll() {2};
![Page 16: TMPA-2015: Automated Testing of Multi-thread Data Structures Solutions Linerializability](https://reader034.fdocuments.net/reader034/viewer/2022050613/58a6d9a41a28abef698b5423/html5/thumbnails/16.jpg)
Последовательные исполнения
offer(1); offer(2); poll() {1}; poll() {2};
offer(1); poll() {1}; offer(2); poll() {2};
offer(1); poll() {1}; poll() {Exception}; offer(2);
poll() {Exception}; poll() {Exception}; offer(1); offer(2);
poll() {Exception}; offer(1); offer(2); poll() {1};
poll() {Exception}; offer(1); poll() {1}; offer(2);
![Page 17: TMPA-2015: Automated Testing of Multi-thread Data Structures Solutions Linerializability](https://reader034.fdocuments.net/reader034/viewer/2022050613/58a6d9a41a28abef698b5423/html5/thumbnails/17.jpg)
Параллельные исполнения
─ Множественные запуски
─ Синхронизация старта
─ Все служебные структуры создаем
вне многопоточной системы
─ Можно вызывать методы через
Reflection API, но используется ASM
─ Две фазы запусков (без/с задержками)
![Page 18: TMPA-2015: Automated Testing of Multi-thread Data Structures Solutions Linerializability](https://reader034.fdocuments.net/reader034/viewer/2022050613/58a6d9a41a28abef698b5423/html5/thumbnails/18.jpg)
Проверка
─ Ищем последовательное исполнение,
соответствующее по результатам
параллельному
─ Если не нашли, то структура
нелинеаризуема!
offer(1); poll() {1}; offer(2); poll() {1};
![Page 19: TMPA-2015: Automated Testing of Multi-thread Data Structures Solutions Linerializability](https://reader034.fdocuments.net/reader034/viewer/2022050613/58a6d9a41a28abef698b5423/html5/thumbnails/19.jpg)
Результаты
─ Синтетические примеры
─ Очередь, счетчик, некоторые другие
─ Потеря synchronized, volatile,
ошибочное использование
неатомарных переменных
─ Нашлись наборы операций,
приводящие к ошибке
![Page 20: TMPA-2015: Automated Testing of Multi-thread Data Structures Solutions Linerializability](https://reader034.fdocuments.net/reader034/viewer/2022050613/58a6d9a41a28abef698b5423/html5/thumbnails/20.jpg)
Результаты
─ java.util.concurrent ✓
─ Google Guavа ✓
![Page 21: TMPA-2015: Automated Testing of Multi-thread Data Structures Solutions Linerializability](https://reader034.fdocuments.net/reader034/viewer/2022050613/58a6d9a41a28abef698b5423/html5/thumbnails/21.jpg)
Результаты
─ jctools [1]
─ MpmcArrayQueue ✗
─ zchannel [2]
─ GenericMPMCQueue ✗
─ high_scale_lib [3]
─ NonBlockingHashMap ✗
[1] https://github.com/JCTools/JCTools
[2] http://landz.github.io/
[3] https://github.com/stephenc/high-scale-lib
![Page 22: TMPA-2015: Automated Testing of Multi-thread Data Structures Solutions Linerializability](https://reader034.fdocuments.net/reader034/viewer/2022050613/58a6d9a41a28abef698b5423/html5/thumbnails/22.jpg)
Результаты
─ zchannel – GenericMPMCQueue
P Q
offer(9); {true}
poll(); {null}
offer(1); {true}
poll(1); {1}
![Page 23: TMPA-2015: Automated Testing of Multi-thread Data Structures Solutions Linerializability](https://reader034.fdocuments.net/reader034/viewer/2022050613/58a6d9a41a28abef698b5423/html5/thumbnails/23.jpg)
Результаты
Структура данных Время (мс); мин-макс (средн.)
Counter 4 – 110 (33)
Queue 5 – 38786 (8635)
Accounts 3 – 50606 (18697)
NonBlockingSetInt 52 – 10414 (4291)
NonBlockingHashSet 5 – 66975 (16111)
MpmcArrayQueue(2) 2352 – 45628 (19974)
MPMCQueue(2) 1814 – 33958 (19714)
MPMCQueue(16) 1877 – 33858 (8651)
LockFreeQueue 8825 – 342199 (135202)
![Page 24: TMPA-2015: Automated Testing of Multi-thread Data Structures Solutions Linerializability](https://reader034.fdocuments.net/reader034/viewer/2022050613/58a6d9a41a28abef698b5423/html5/thumbnails/24.jpg)
Что дальше?
─ Генерация параллельных исполнений
с помощью управляемого
переключения между потоками
─ Конкретная последовательность
инструкций
─ Лучшее покрытие состояний
![Page 25: TMPA-2015: Automated Testing of Multi-thread Data Structures Solutions Linerializability](https://reader034.fdocuments.net/reader034/viewer/2022050613/58a6d9a41a28abef698b5423/html5/thumbnails/25.jpg)
Где посмотреть
─ Lincheck
─ https://github.com/Devexperts/lin-check
![Page 26: TMPA-2015: Automated Testing of Multi-thread Data Structures Solutions Linerializability](https://reader034.fdocuments.net/reader034/viewer/2022050613/58a6d9a41a28abef698b5423/html5/thumbnails/26.jpg)
Вопросы?
![Page 27: TMPA-2015: Automated Testing of Multi-thread Data Structures Solutions Linerializability](https://reader034.fdocuments.net/reader034/viewer/2022050613/58a6d9a41a28abef698b5423/html5/thumbnails/27.jpg)
Спасибо