Devexperts Research Team at TMPA-2014 (Trading Systems Testing)
-
Upload
iosif-itkin -
Category
Technology
-
view
1.112 -
download
1
description
Transcript of Devexperts Research Team at TMPA-2014 (Trading Systems Testing)
Devexperts Research
[основные направления]TMPA-2014
Дмитрий ЦителовВиталий Трифанов
Роман Елизаров
Devexperts
• Разработка ПО для финансовых компаний– Брокеры, дилеры, биржи
• Глубоко специализированная компания– R&D полного цикла– QA– M&S 24/7
• dxFeed – сервис доставки рыночных данных
Много данных, всё обновляется
Поток на входе непрерывно растет
Особенности
ОсобенностиДля эффективности!
Бесплатный обед закончился!
Хотим
● Писать многопоточный высокопроизводительный код
● Уметь доказывать его корректность на модели
● Уметь верифицировать сам код (на соответствие модели)
Пример: Data Racepublic class Account {
private int amount = 0;
}
public class TestRace {
public static void main (String[] args) {
final Account a = new Account();
Thread t1 = depositAccountInNewThread(a, 5);
Thread t2 = depositAccountInNewThread(a, 6);
t1.join();
t2.join();
System.out.println(a.amount); //5? 6? 11?
}
}
Expected execution
Racy execution
Как искать гонки?
Динамически Быстро Точно
Ограничить область поиска
Важно не потерять информацию!
Синхронизационные контракты
• Факты синхронизации– lock, semaphore, ConcurrentHashMap, etc.
• Обращения к разделяемым данным– коллекции, календарь, etc.
Язык описания высокоуровневых свойств
Data race detector
• DSL для описания контрактов– xml-based– только основные контракты
• Динамический поиск гонок– инструментирование байт-кода– алгоритм на основе логических часов– находит и применяет контракты
Реальная задача: хэш-таблицы
• Работа Gao at al– Хэш-таблица без ожидания– Только машинное доказательство– Не проработан до конца механизм изменения
размера без ожидания
• Реализация Cliff Click (high-scale-lib)– Не очевидно что этот тот же самый алгоритм– Нет формального доказательства
Открытые проблемы
• Построить человеко-читаемое доказательство алгоритма Gao et al– Включая изменение размера без ожидания
• Разбить доказательство на модули– Хотим заменять примитивы в значениях
таблицы на сложные структуры
• Атомарно читать/писать сложные структуры в данном месте памяти– А не через подмену указателей
Проверка линеаризуемости
• Отсутствие гонок не гарантирует корректность многопоточной программы
• Обычно, говоря «корректность», имеют в виду линеаризуемость - эквивалентность последовательному исполнению
• Нужно уметь проверять линеаризуемость полученного кода как юнит-тест
Намеченный формат работы
• Отдельное подразделение в компании– очень важно, чтобы не дергали текучкой– хотим построить полноценный процесс
• Взаимодействие с ВУЗами– своих сил не хватает– студентам нужны квалификационные работы– ВУЗу нужны публикации
Контакты
• Дмитрий Цителов ([email protected])• Виталий Трифанов ([email protected]
)• Роман Елизаров ([email protected])