Разработка сред управляемого исполнения на примере виртуальной машины Java Занятие 9 Салищев С.И. Салат Оптимизация локальности кода и данных Взаимодействие с операционной системой Стандартные тестовые нагрузки Направления исследований Нарушение локальности и способы исправления Нарушение локальности – обращение к памяти приводящее к промахам кэширования памяти (Cache Miss) или отображения виртуальных адресов (TLB Miss) Потери производительности из-за неоптимального использования вычислительных блоков ЦП Возможно извлечение информации о нарушениях локальности при динамическом профилировании Нарушение локальности данных Из-за несоответствия порядка создания и порядка использования объектов Из-за перемещения объектов при сборке мусора Сборка мусора должна сохранять порядок объектов в памяти Сборка мусора может учитывать данные профилирования при перемещении объектов Нарушение локальности кода Из-за избыточной связности модулей, приводящей к частому вызову далеких методов Из-за перекомпиляции методов Нарушение локальности должно учитываться при подстановке (inlining) Проблемы взаимодействия с OS Предпочтительно кооперативное планирование OS общего назначения используют вытесняющее планирование Безопасность обеспечивается верификацией кода Для обеспечения безопасности естественных приложений OS переключается для планирования в привилегированный контекст Требуется большая куча Приводит к росту файла подкачки (swap file) Сборка мусора сканирует всю память системы Вызывает загрузку редко используемой памяти из файла подкачки Сборка мусора предпочтительнее вытеснения памяти в файл подкачки OS не предоставляют возможности управления вытеснением памяти Интеграция с планировщиком OS Обеспечение кооперативного планирования Близко к требованиям OS реального времени Планирование управляемых нитей без переключения контекста Требует подтверждения безопасности системы управляемого исполнения, например включения ее как драйвера ядра Интеграция с системой управления памятью Согласование размещения поколений объектов и вытеснения памяти в файл подкачки Только старые поколения объектов должны вытесняться на диск Сборка мусора не должна часто сканировать вытесненную память Обработка недостатка физической памяти при помощи сборки мусора Перед вытеснением памяти должна производиться сборка мусора Стандартные тестовые нагрузки Тестовые нагрузки Цели производительности для разработчиков платформ Оценка производительности платформ для разработчиков решений SPEC - Standard Performance Evaluation Corporation jvm2008 – клиентские приложения jms2007 – распределенные системы на основе JMS jEnterprise2010 – распределенные системы на платформе J2EE 5 jbb2005, jbb2013 – серверные приложения DaCapo – клиентские приложения SciMark – научные расчеты SPEC jvm2008 Тест оценивает производительность типичных клиентских приложений Java, характерных для разработчиков ПО Тест включает компиляцию (javac), упаковку данных (LZW), криптографию (AES, RSA, SHA256), работу с базами данных (telco), декодирование mp3, математические вычисления (scimark), старт JVM, трассировку лучей (sunflow), сериализацию данных, XML Все тесты многонитевые Оценивается время исполнения тестов SPEC jEnterprise2010 Тест основан на реальном сценарии использования по управлению производством автомобилей Тест измеряет производительность распределенной корпоративной системы управления построенной как набор взаимодействующих 3 уровневых web приложений (3 tier app) на платформе J2EE 5 с использованием технологий The web container, including servlets and JSPs The EJB container EJB Container Managed Persistence JMS and Message Driven Beans Transaction management Database connectivity Кроме того нагружаются DB, JDBC, network Тест создает случайный параллельный статистически реалистичный поток запросов к системе Измеряется количество выполненных транзакций и количество параллельных источников запросов при сохранении качества обслуживания SPEC jbb2005 Тест измеряет производительность бизнес логики (middle tier) системы управления оптовой торговой компании построенной как 3 уровневое приложение Используются только классы J2SE5.0 Финансовые вычисления проводятся используя BigDecimal вместо чисел с плавающей точкой Взаимодействие по сети и обращение к базе данных эмулируются Java объектами в памяти Одновременно запускается несколько экземпляров системы управления (warehouse) Тест создает случайный последовательный статистически реалистичный насыщающий поток обращений к каждой системе (warehouse) Измеряется среднее количество выполненных транзакций по всем запущенным экземплярам SPEC jbb2013 Тест измеряет производительность бизнес логики (middle tier) системы управления оптово-розничной торговой компании построенной как 3 уровневое приложение Взаимодействие по сети и обращение к базе данных эмулируются Java объектами в памяти Использует Java 7 Измеряется как чистая производительность так и производительность при ограниченном времени ответа от 10 до 500 ms SPEC jms2007 Тест измеряет производительность системы управления оптоворозничной торговой компании построенной на основе JMS Кроме того нагружаются DB, JDBC, network Тест поддерживает вертикальное и горизонтальное масштабирование нагрузки для изучения масштабируемости системы DaCapo Тест с открытым исходным кодом Тестирует производительность пользовательских приложений Все подтесты являются многонитевыми Включает подтесты: Antlr – генерация парсера Bloat – оптимизация и анализ Java байт кода Chart – использует JFreeChart для построения графиков и генерации PDF Eclipse – тестирование не интерфейсных компонент Eclipse IDE Fop – форматирует XSL-FO, генерирует PDF Hsqldb – эмулирует работу базы данных с банковским приложением Jython – выполняет pybench Python benchmark Luindex – использует lucene для индексирования текстов Lusearch – использует lucene для поиска по индексам Pmd – анализирует Java исходный код Xalan - трансформирует XML в HTML используя XSLT Измеряется суммарное время прохождения тестов SciMark Тестирует производительность математических вычислений в основном с плавающей точкой Два размера исходных данных Обычный – помещается в кэш памяти современных процессоров для оценки вычислительной производительности Большой – существенно превышает размер кэша памяти для оценки производительности памяти Содержит подтесты: Fast Fourier Transform (FFT) – быстрое преобразование Фурье Jacobi Successive Over-relaxation (SOR) – метод последовательной верхней релаксации для решения сеточных уравнений Monte Carlo integration – целочисленная аппроксимация π методом Монте-Карло Sparse matrix multiply – умножение разреженных матриц dense LU matrix factorization – LU факторизация матриц Все тесты однонитевые Направления исследований Интеграция с OS Managed in Managed Managed OS Оптимизация JIT Оптимизация GC Использование в Real-Time системах Распараллеливание внутренних структур VM Транзакционная память Интеграция с OS Интеграция планировщика Интеграция системы управления памятью Улучшение масштабируемости Managed in Managed Разработка систем управляемого исполнения на управляемых языках Jikes RVM Разработка технологических подходов к разработке Managed OS Разработка OS общего применения на управляемых языках Singularity JNode Разработка систем реального времени на управляемых языках Исследование обратной совместимости с традиционными OS Оптимизация JIT Извлечение параллелизма из пользовательского кода Распараллеливание зависимых итераций циклов Векторизация вычислений Распараллеливание компиляции Алгоритмы оптимизации управляемые динамическим профилированием Оптимизация GC Распараллеливание алгоритмов Уменьшение задержек Улучшение производительности (MMU) Оптимизация использования NUMA Оптимизация работы с вытеснением памяти на диск (swap) Использование в Real-Time системах Разработка тестовых нагрузок Разработка примеров реального использования Исследование реализуемости различных парадигм параллельного программирования Распараллеливание внутренних структур VM Минимизация влияния пользовательской синхронизации Оптимизация библиотек для параллельного исполнения Распараллеливание загрузки классов и верификации Транзакционная память Программная реализация (Software TM) Аппаратная реализация (Hardware TM) Комбинированная реализация (Hardware aided STM) Портирование стандартных библиотек Разработка новых прикладных алгоритмов Использование в GC Влияние на парадигму параллельного программирования