3. Что такое бенчмарк
Бенчмарк – это тест на производительность.
Бенчмарк может измерять:
• Кол-во операций в секунду
• Среднее/Максимальное время исполнения одной операции
• Энерго-эффективность одной операции
• Масштабируемость
• ...
Все что угодно, связанное с производительностью
3 Бенчмарки как критерий естественного отбора
4. Пользователи – Бенчмарк – Производители
Пользователи Бенчмарк Производители
Продукт Продукт
Продукт Продукт
4 Бенчмарки как критерий естественного отбора
5. Типы бенчмарок
Реальные приложения Микро-бенчмарки
Бенчмарки библиотек Синтетические бенчмарки
5 Бенчмарки как критерий естественного отбора
6. Синтетические бенчмарки
Business Applications Performance Corporation
Embedded Microprocessor Benchmark Consortium
Standard Performance Evaluation Corporation
Transaction Processing Performance Council
Общепризнанные бенчмарки
сделанные
некоммерческими организациями
Brands, logos and product names appearing on this page are trademarks
or registered trademarks of their respective holders.
6 Бенчмарки как критерий естественного отбора
7. SPEC - бенчмарки
CPU NFS
Graphics
Workstation
Power
MPI/OMP
Java Client/Server
SIP SOA
Virtualization
Mail Servers Web Servers
7 Бенчмарки как критерий естественного отбора
8. SPEC – Java бенчмарки
SPECjbb2005 – оценка производительности серверов для
типичных бизнес приложений на Java. Эмулирует обработку
заказов для оптового поставщика.
SPECjEnterprise2010 – оценка производительности всей системы,
на которой работает сервер приложений, база данных и
соответствующая инфраструкутра.
SPECjms2007 – оценка производительности серверов
использующих JMS (Java Message Service)
SPECjvm2008 – оценка производительности JRE (состоит из
нескольких реальных приложений и синтетических приложений
тестирующих core Java API).
SPECpower_ssj2008 – комбинированная бенчмарка,
оценивающая производительность и потребление энергии
одновременно.
8 Бенчмарки как критерий естественного отбора
9. SPEC – что можно найти?
?
Лицензия
Описание
Результаты Участие
9 Бенчмарки как критерий естественного отбора
10. А подходит ли мне синтетическая бенчмарка?
Хммм..
А похоже ли мое приложение
на синтетическую бенчмарку?
Подробно изучайте описание бенчмарки
Поищите другие бенчмарки
Настройте бенчмарку
10 Бенчмарки как критерий естественного отбора
11. Как создаются синтетические бенчмарки?
• Выбор целевой аудитории для бенчмарка
• Контакты с тем, кто оперирует на этом рынке для определения
стандартых сценариев
• Сбор статистики об всех типах операций со многих приложений из этой
области
• Создания сценария на основе пропорций типов операций
• Тестирование
• Определение правил запуска бенчмарка, чтобы
сделать возможным корректное сравнение результатов
• Ревью бенчмарка всеми компетентными сторонами
• Выпуск бенчмарка
Для любого бенчмарка важно,
чтобы она была широко признана средой.
Иначе ей не будут доверять и не будут использовать!
11 Бенчмарки как критерий естественного отбора
12. Некоторые из аттрибутов хорошего бенчмарка
• Повторяемость результата – что делать, если вы все время
получаете разный результат?
• Репрезентативность – сценарий должен соответствоать
реальному использованию.
• Легкость запуска – бенчмарк прийдется запускать много раз, вы
можете например тьюнить систему. Запуск бенчмарки не
должен быть головной болью.
• Верифицируемость – бенчмарк должен убедиться, что работа
реально выполнялась.
• Метрики должны быть ясны – вы четко должны понимать, что
именно вы получаете.
• Анализируемость – бенчмарк должен
позволять анализировать свое поведение.
12 Бенчмарки как критерий естественного отбора
13. Специфика Java - GC (Garbage Collection)
List<IterationStatus> result = new ArrayList<IterationStatus>();
private long test() {
long time = System.nanoTime();
for(int i = 0; i < N; i++) {
long startResponseTime = System.nanoTime();
func(); // метод, выполняющий математическое вычисление
result.add(new IterationStatus(System.nanoTime() - startResponseTime), …);
// Создаем очень большое кол-во новых объектов => GC
}
long endTime = System.nanoTime();
double avgTime = ((double)(endTime – startTime)) / N;
return (long) (1000000000d / avgTime); // Кол-во операций в секунду
}
13 Бенчмарки как критерий естественного отбора
14. Специфика Java - GC (Garbage Collection)
private long test() {
long time = System.nanoTime();
func(); // метод, создающий большое кол-во новых объектов
// Возможно при втором запуске этого метода, произойдет
вызов GC,
// Но мы этого не увидим => неверный результат
long endTime = System.nanoTime();
return endTime – startTime;
}
14 Бенчмарки как критерий естественного отбора
15. Специфика Java - JIT (Just In Time compilation)
private long test() {
long time = System.nanoTime();
for(int i = 0; i < N; i++) {
func(); // тестируемый метод
}
long endTime = System.nanoTime();
double avgTime = ((double)(endTime – startTime)) / N;
return (long) (1000000000d / avgTime); // Кол-во операций в
секунду
}
Если N мало, то мы будем измерять Интерпретатор
Используйте разогрев!!!
15 Бенчмарки как критерий естественного отбора
16. Специфика Java - JIT (Just In Time compilation)
private long test() { Если Вы тестируете
for(int i = 0; i < N; i++) { // разогрев апплет, который будет
исполняться только один
func(); // тестируемы метод
раз, то Вы получите
} слишком оптимистичный
результат!!!
long time = System.nanoTime();
for(int i = 0; i < N; i++) {
func(); // тестируемы метод
}
long endTime = System.nanoTime();
double avgTime = ((double)(endTime – startTime)) / N;
return (long) (1000000000d / avgTime); // Кол-во операций в секунду
}
16 Бенчмарки как критерий естественного отбора
17. Специфика Java - JIT (Just In Time compilation)
private long test() {
for(int i = 0; i < N; i++) { // разогрев
private void func() {
func(); // тестируемы метод double x = Math.sqrt(2012d);
} }
long time = System.nanoTime();
for(int i = 0; i < N; i++) {
func(); // тестируемы метод
}
long endTime = System.nanoTime();
double avgTime = ((double)(endTime – startTime)) / N;
return (long) (1000000000d / avgTime); // Кол-во операций в секунду
}
Результат вычислений нигде не используется,
JIT может просто выбросить этот код.
17 Бенчмарки как критерий естественного отбора
18. Заключение
• Используйте бенчмарки для оценки производительности
• Оценивайте релевантность бенчмарки Вашим целям
• Используете бенчмарки, которые признаны или которым Вы
целиком доверяете
• Критически относитесь к результатам бенчмарок, которые
получены из недостоверных источников
• Если Вы создаете свой бенчмарк:
• Убедитесь, что бенчмарк реально тестирует, то что Вы ожидаете
• Убедитесь, что тестирумый код реально работает
• Сравните полученный результат с ожиданием
• Проверьте бенчмарк в разных условиях и сравните результаты
• Объясните и докажите себе, что полученный результат
действительно правильный
18 Бенчмарки как критерий естественного отбора
19. Вопросы
19 Бенчмарки как критерий естественного отбора