Разработка сред управляемого исполнения на примере виртуальной машины Java Занятие 9

advertisement
Разработка сред управляемого
исполнения на примере
виртуальной машины 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
Влияние на парадигму параллельного
программирования
Download