Pull to refresh

Бенчмаркинг при помощи Basho Bench

Pravo.ru corporate blog
Ребята из Basho team в дополнение к своей NoSQL-базе Riak и утилите для сборки rebar сделали еще одну полезную вещь — Basho Bench, утилиту для бенчмаркинга.

Изначально Basho Bench позиционировалась как утилита для тестирования производительности key-value-хранилищ, но в ходе его развития как-то само собой оказалось, что тестировать с ее помощью можно и другие приложения.

Быстрый старт.
Читать дальше →
Total votes 28: ↑23 and ↓5 +18
Views 3.5K
Comments 2

Динамические вызовы: сравнение методов

.NET *

Динамические вызовы: что это и зачем?



Думаю, для каждого разработчика, работающим на статических языках программирования, иногда возникала необходимость прибегнуть к динамическим вызовам — вызвать метод чего-то, о чем пока еще ничего не известно. Или получить какое-то свойство у какого-то объекта, о котором будет известно только в run-time.

Это иногда используется в алгоритмах, основанных на так называемой «утиной типизации» (duck typing):
Если что-то выглядит как утка, плавает как утка и крякает как утка, то это, вероятно, утка и есть.


В данной статье я хотел бы рассмотреть основные доступные в Microsoft .NET 4.0 способы, сравнить их производительность и синтаксис.

Читать дальше →
Total votes 98: ↑76 and ↓22 +54
Views 8K
Comments 27

Учимся правильно бенчмаркать (в том числе итераторы)

C++ *
Скачал пример из предыдущего постинга, от запуска к запуску время дрожало до 1.5 раз, от 0.76 до 1.09 секунд. Как можно оценивать результаты подобных бенчмарков, неясно. Проблема знакомая, столкнулся и решал буквально вчера. Вкратце, виноват CPU throttling, а так же странный affinity в коде. Под катом борьба (успешная) и обсуждение.
Читать дальше →
Total votes 85: ↑82 and ↓3 +79
Views 2.2K
Comments 21

Учимся правильно бенчмаркать 2: как компилятор бьет в спину

C++ *
Получить годные цифры бенчмарка это полдела, однако вторая половина их правильно интерпретировать, узнать что-то новое, и суметь применить. 100x отличия промеж дебажным и нормальным билдом удивили, решил копнуть глубже. По итогам получше узнал, что происходит в дебаге; поискал отличия между 2005 и 2008 студией (не нашел); выяснил, как ускорить дебажный билд в 3 раза за пару минут (ставим блок против удара в спину); методом «взять и запустить» получил результаты, отличающиеся от авторских в 3.5 раза (адская сила x64 в действии!); и для смеха замерил плохой, негодный недовектор против хорошего (плохой оказался до 100 раз быстрее). Подробности под катом.
Читать дальше →
Total votes 76: ↑74 and ↓2 +72
Views 1.4K
Comments 24

О тестировании скорости или как не надо писать тесты

Website development *

Недавно увидел пост Тест производительности работы браузера с HTML5 Canvas. В результатах IE9 начал показывать сумашедшие циферки — 350+ fps.

Это, конечно, хорошо, но почему-то браузеры, которые в других тестах javascript'а и canvas'a показывали не меньшую производительность, в этом тесте показывали в разы (а иногда и в десятки раз) меньший fps (при условии запуска на Windows-платформе, но об этом позже).

Под катом покажу, почему тест показывает скорость совсем не HTML5-Canvas, а в самом конце будет скрин с 470 fps для FF4 без никакого фотошопа, для начала разберем что именно не так в этом тесте.

Читать дальше →
Total votes 137: ↑123 and ↓14 +109
Views 2.7K
Comments 67

Сравнительное тестирование производительности платформ .Net, Java и Mono

Programming *
Sandbox

Идея Java vs .Net vs Mono


Сама идея создания подобного теста появилась из-за, постоянно не дававшего мне покоя, противопоставления .Net и Java, и я решил максимально объективно оценить реальную производительность данных платформ, затем в поле зрения попала интересная opensource разработка Mono (свободная реализация .Net), и было решено включить и её, а заодно прогнать тесты под Linux. Соответственно были разработаны две аналогичных программы тестирования на языках C# и Java. Далее будут приведены фрагменты исходников на C#, полный исходный код можно получить из репозитария Google Code:
http://code.google.com/p/dotnet-java-benchmark/source/checkout
Целью данного теста является сравнение производительности различных виртуальных машин, выполняющих по сути один и тот же код на одном и том же компьютере. В соревновании принимали участие следующие платформы:
  • Microsoft .Net 4.0 (Windows 7)
  • Oracle Java SE Version 6 Update 24 (Windows 7)
  • Oracle Java SE Version 6 Update 24 (Linux 2.6.35.27 Ubuntu 10.10)
  • Novell Mono 2.11 (Linux 2.6.35.27 Ubuntu 10.10)
Читать дальше →
Total votes 164: ↑123 and ↓41 +82
Views 25K
Comments 208

Приложение силы

IBM corporate blog
Различия между процессорами поколений Power6 и Power7

Предыдущий пост, касающийся процессоров Power собрал немало комментариев заинтересованной публики, поэтому мы решили написать небольшое продолжение и рассказать, а если быть более точным — то показать, как изменилась архитектура процессора последнего поколения, а так же привести некоторые выкладки тестов производительности.

К слову: многими было подмечено, что несмотря на широкие возможности RISC-процессоров в реальном мире их применения сводится к нескольким, в большей степени специализированным, задачам. Спешу разочаровать: по последним чипы на базе Power используются еще в одном, широко популярном, устройстве — консоли Nintendo Wii. С 2006 года, когда Nintendo начала выпускать игровые приставки последнего поколения, IBM поставила более 90 млн. процессоров, и в будущем эта цифра будет только расти, так как Wii U, появление которой на полках магазинов ожидается в 2012 году, так же работает на центральном процессоре производства всем известной компании.

Читать дальше →
Total votes 18: ↑13 and ↓5 +8
Views 7.7K
Comments 10

Как правильно мерять производительность диска

Configuring Linux *System administration *Server optimization *
Tutorial
abstract: разница между текущей производительностью и производительностью теоретической; latency и IOPS, понятие независимости дисковой нагрузки; подготовка тестирования; типовые параметры тестирования; практическое copypaste howto.

Предупреждение: много букв, долго читать.

Лирика



Очень частой проблемой, является попытка понять «насколько быстрый сервер?» Среди всех тестов наиболее жалко выглядят попытки оценить производительность дисковой подсистемы. Вот ужасы, которые я видел в своей жизни:
  • научная публикация, в которой скорость кластерной FS оценивали с помощью dd (и включенным файловым кешем, то есть без опции direct)
  • использование bonnie++
  • использование iozone
  • использование пачки cp с измерениема времени выполнения
  • использование iometer с dynamo на 64-битных системах


Это всё совершенно ошибочные методы. Дальше я разберу более тонкие ошибки измерения, но в отношении этих тестов могу сказать только одно — выкиньте и не используйте.

Как мерять правильно
Total votes 151: ↑145 and ↓6 +139
Views 304K
Comments 164

Меряем производительность накопителей или снова про IOPS

Configuring Linux *System administration *Server optimization *
Sandbox
Навеяно постом уважаемого amarao о том, как надо измерять производительность дисков.

Цель:


Протестировать производительность имеющихся в наличии средств хранения информации и убедиться в верности выбранной методики, а также понять разницу в производительности между разными видами накопителей, а также enterprise-level и consumer-level жёсткими дисками.

Оборудование:


  1. SD-карта Sandisk Class 10 UHS 1 Extreme Pro 8 GB (до 95 Мбайт/с чтение, до 90 Мбайт/с запись)
  2. SD-карта Team Class 10 32 GB (до 20 Мбайт/с)
  3. SD-карта Transcend 2GB без класса скорости
  4. SSD-диск OCZ-AGILITY3 60 GB
  5. SATA-диск consumer-level Hitachi Deskstar HDS723020BLA642 2 ТБ 7200 об/мин, 64 Мбайт
  6. SATA-диск enterprise-level Western Digital RE3 WD2502ABYS-23B7A0 250 GB 7200 об/мин 16 Мбайт
  7. SATA-диск consumer-level Seagate Barracuda 7200.11 ST3320613AS 320 GB 7200 об/мин 16 Mбайт
  8. CD-ROM
  9. RAM-диск /dev/ram в Linux


Методика тестирования:


Методика полностью описана в посте. Есть правда несколько не совсем понятных моментов:
Мы подбираем такую глубину параллельности операций, чтобы latency оставалось в разумных пределах.
Задача подобрать такой iodepth, чтобы avg.latency была меньше 10мс.

Так как в тестировании используется не СХД и не диски SAS, а различные накопители SATA, то параллельность нам измерять нету смысла.
Очищать диск перед каждым тестированием (dd if=/dev/zero of=/dev/sdz bs=2M oflag=direct) очень времязатратно, поэтому будем это делать перед тестированием один раз на каждый накопитель.
Тестировать весь диск полностью очень времязатратно, поэтому будем использовать тестирование в течении 30 секунд.
Итак, сформулируем методику тестирования для нашего случая:
Получить значение IOPS, выдаваемое накопителем при произвольном чтении и записи блоками по 4 Кбайт и задержке avg.latency не более 10 мс за время теста в 30 секунд. Также для полноты картины измерим скорость линейной записи.
Читать дальше →
Total votes 21: ↑12 and ↓9 +3
Views 25K
Comments 21

Пуленепробиваемые тесты JavaScript

JavaScript *Web services testing *
Translation
Писать тесты скорости JS не так легко, как кажется. Даже не касаясь вопросов кроссбраузерной совместимости, можно попасть во множество ловушек.

Именно поэтому я и сделал jsPerf. Простой веб-интерфейс для того, чтобы каждый мог создавать и делиться тестами, и проверять быстродействие различных фрагментов кода. Ни о чём не нужно беспокоиться – просто вводите код, быстродействие которого необходимо измерить, и jsPerf создаст для вас новую задачу по тестированию, которую вы затем сможете запустить на разных устройствах и в разных браузерах.
Читать дальше →
Total votes 21: ↑19 and ↓2 +17
Views 14K
Comments 9

Надлежащая оценка производительности для диагностирования и устранения проблем, возникающих при .Net-сериализации

.NET *C# *
Translation
Уважаемые читатели! Представляю вашему вниманию перевод статьи Скота Ханселмана под названием "Proper benchmarking to diagnose and solve a .NET serialization bottleneck".

Для начала, несколько оговорок и комментариев. Во-первых, процесс оценки производительности сложен. Трудно выполнять измерения. Но настоящая проблема состоит в том, что часто мы забываем, ДЛЯ ЧЕГО мы оцениваем производительность чего-либо. Мы берем сложную многомашинную финансовую систему и внезапно чрезвычайно фокусируемся на куске кода, выполняющем сериализацию, который, по нашему убеждению, и ЕСТЬ проблема. «Если я смогу оптимизировать эту сериализацию, написав for-цикл из 10000 итерации и сократив время его выполнения на x миллисекунд, все будет путем».
Читать дальше →
Total votes 16: ↑16 and ↓0 +16
Views 11K
Comments 2

$mol_app_bench: готовим JS бенчмарки быстро и просто

High performance *JavaScript *HTML *

Здравствуйте, меня зовут Дмитрий Карловский и я… тот ещё гурман. Мне нравится готовить изысканные блюда, которые элегантно и просто решают привычные уже набившие оскомину проблемы. Можно долго рассказывать о преимуществах тех или иных подходов, удешевлении поддержки, ускорении разработки, упрощения отладки, но всё это остаётся достаточно субъективными оценками, над которыми нужно размышлять. Поэтому рано или поздно (но как правило преждевременно), всё обсуждение скатывается к более-менее измеримым величинам — скорости работы, скорости загрузки и прочим скоростям. И мало того, что нужно сделать несколько реализаций на разных технологиях, чтобы было что сравнивать, так ещё и не плохо было бы нарисовать интерфейс с понятной человеку выдачей результатов. А всё это — время, которого всегда не хватает, особенно, если делать хорошо.


Чтобы упростить разработку бенчмарков мы выделили общую их часть в отдельное приложение, которое рисует весь интерфейс от выбора тестируемых вариантов до наглядного представления результатов, а вариативная часть подключается извне и реализует довольно простой интерфейс. Всё "накликанное" состояние сохраняется в ссылке, так что им легко поделиться с другими гурманами. Кроме того, поддерживается локализация и сортировка результатов по разным критериям — настоящий пир для всех любителей быстрой еды.


Быстрей, а то всё вкусное съедят


Далее вы узнаете:


  • Как замутить свой бенчмарк, практически не прилагая усилий.
  • Как запилить что-то по сложнее, с загрузкой целых приложений в отдельных фреймах.
  • Как устроен $mol_app_bench изнутри.
  • Как теперь жить-то со всем этим.
Читать дальше →
Total votes 17: ↑10 and ↓7 +3
Views 3.1K
Comments 4

Дебаты об Отличном Сервере Приложений Java c Tomcat, Jboss, GlassFish, Jetty и Liberty Profile

OTUS corporate blog Programming *Java *
Translation
Всем доброго!
Что ж у нас очередной новый курс Java Enterprise, а это значит, что есть то, чем мы с радостью поделимся с вами. Просьба особо не обращать внимания на версии и даты, т.к. суть от этого особо не меняется (или, если считаете, что меняется, то ждём комментарии).

Вступление: Да начнутся дебаты…

Какой тип сервера приложений Java вам стоит выбрать для следующего проекта? Зависит от того, какое приложение вы разрабатываете, какие у вас потребности, в какой организации работаете и многих других факторов. Без дебатов не обойтись. Поэтому навострите уши и слушайте внимательно.

Что делает сервер приложений сервером приложений, мистер Лебовски?

Что представляет собой сервер приложений — вопрос, вызывающий много споров в силу неточности определения. Википедия, как неоспоримый источник знаний, говорит следующее:
Java Platform, Enterprise Edition, сокращенно Java EE (до версии 5.0 — Java 2 Enterprise Edition или J2EE) — набор спецификаций и соответствующей документации для языка Java, описывающей архитектуру серверной платформы для задач средних и крупных предприятий.
Прости, Википедия, но в целях этой статьи, нам плевать на педантичные описания и полную имплементацию Java EE. Мы больше заботимся о нуждах и желаниях разработчиков.
Большинство разработчиков работают над веб-приложениями и резко используют все навороченные особенности EE-спецификации. На самом деле, ныне доступные сервера, обладающие только базовым функционалом, являются наиболее используемыми, как показал наш Отчет Производительности Разработчиков:


Читать дальше →
Total votes 21: ↑17 and ↓4 +13
Views 24K
Comments 15

Возможно, вам не нужен Rust, чтобы ускорить ваш JS

High performance *JavaScript *Node.JS *
Translation

Несколько недель назад я обнаружил пост "Окисляем Source Maps с Rust и WebAssembly"
распространяющийся по Твиттеру и расказывающий о выигрыше в производительности от замены обычного JavaScript в библиотеке source-map на Rust, скомпилированный в WebAssembly.


Пост возбудил мой интерес не потому, что я большой фанат Rust или WASM, скорее потому что я всегда интересовался фичами языков и оптимизациями, которых не хватает Javascript для того чтобы достичь аналогичной производительности.


Так что я скачал библиотеку с GitHub и отправился в небольшое исследование производительности, которое я документирую здесь практически дословно.

Читать дальше →
Total votes 58: ↑54 and ↓4 +50
Views 27K
Comments 43

Рефакторинг программы на Go: ускорение в 23 раза

Badoo corporate blog High performance *Programming *Designing and refactoring *Go *
Translation


Привет! Меня зовут Марко, я работаю в Badoo в отделе «Платформы». У нас довольно много всего написано на Go, и зачастую это критичные к производительности системы. Именно поэтому сегодня я предлагаю вашему вниманию перевод статьи, которая мне очень понравилась и, я уверен, будет вам очень полезна. Автор пошагово показывает, как он подходил к проблемам производительности и как их решал. В том числе вы познакомитесь с богатым инструментарием, доступным в Go для такой работы. Приятного чтения!

Несколько недель назад я прочитал статью «Хороший код против плохого кода в Go», где автор шаг за шагом демонстрирует рефакторинг реального приложения, решающего реальные бизнес-задачи. Она сфокусирована на превращении «плохого кода» в «хороший код»: более идиоматичный, более понятный, полноценно использующий специфику языка Go. Но автор также заявлял о важности производительности рассматриваемого приложения. Во мне взыграло любопытство: давайте попробуем её ускорить!
Total votes 94: ↑93 and ↓1 +92
Views 31K
Comments 26

1M HTTP rps на 1 cpu core. DPDK вместо nginx+linux kernel TCP/IP

Programming *System Programming *Network technologies *Amazon Web Services *C *
Я хочу рассказать о такой штуке как DPDK — это фреймворк для работы с сетью в обход ядра. Т.е. можно прямо из userland писать\читать в очереди сетевой карты, без необходимости в каких либо системных вызовах. Это позволяет экономить много накладных расходов на копирования и прочее. В качестве примера я напишу приложение, отдающее по http тестовую страницу и сравню по скорости с nginx.
Читать дальше →
Total votes 20: ↑20 and ↓0 +20
Views 12K
Comments 17

Гибкая система тестирования и сбора метрик программ на примере LLVM test-suite

Open source *IT systems testing *Programming *Compilers *
Sandbox

Введение


Большинство разработчиков однозначно слышали о довольно значимых open-source разработках таких, как система LLVM и компилятор clang. Однако LLVM сейчас не только непосредственно сама система для создания компиляторов, но уже и большая экосистема, включающая в себя множество проектов для решения различных задач, возникающих в процессе любого этапа создания компилятора (обычно у каждого такого проекта существует свой отдельный репозиторий). Часть инфраструктуры естественно включает в себя средства для тестирования и бенчмаркинга, т.к. при разработке компилятора его эффективность является очень важным показателем. Одним из таких отдельных проектов тестовой инфраструктуры LLVM является test-suite (официальная документация).

LLVM test-suite


При первом беглом взгляде на репозиторий test-suite кажется, что это просто набор бенчмарков на C/C++, но это не совсем так. Помимо исходного кода программ, на которых будут производиться измерения производительности, test-suite включает гибкую инфраструктуру для их построения, запуска и сбора метрик. По умолчанию он собирает следующие метрики: время компиляции, время исполнения, время линковки, размер кода (по секциям).
Читать дальше →
Total votes 13: ↑13 and ↓0 +13
Views 3.4K
Comments 0

Сколько TPS в вашем блокчейне?

High performance *Decentralized networks

Любимым вопросом о любой распределенной системе от нетехнического специалиста является “Сколько tps в вашем блокчейне?”. Однако, названное в ответ число обычно имеет мало общего с тем, что хотел бы услышать вопрошающий. На деле, он хотел спросить “подойдет ли ваш блокчейн под мои бизнес требования”, и эти требования — это не одно число, а множество условий — здесь и отказоустойчивость сети, и требования к финальности, размеры, характер транзакций и множество других параметров. Так что ответ на вопрос “сколько tps” вряд ли будет простым, и почти никогда не будет полным. Распределенная система с десятками и сотнями узлов, выполняющих довольно сложные вычисления, может находиться в огромном количестве различных состояний, связанных с состоянием сети, содержимым блокчейна, техническими сбоями, экономическими проблемами, атаками на сеть и множеством других причин. Этапы, на которых возможны проблемы с производительностью отличаются от традиционных сервисов, а сервер блокчейн-сети — это сетевой сервис, сочетающий в себе функционал базы данных, web-сервера и torrent-клиента, что делает его крайне сложным в плане профиля нагрузки на все подсистемы: процессор, память, сеть, storage


Так получилось, что децентрализованные сети и блокчейны являются довольно специфическим и непривычным софтом для разработчиков централизованного ПО. Поэтому я хотел бы осветить важные аспекты производительности и устойчивости децентрализованных сетей, подходы к их измерению и нахождению bottlenecks. Мы рассмотрим различные проблемы производительности, ограничивающие скорость предоставления сервиса пользователям блокчейнов и отметим особенности, характерные для этого вида софта.

Читать дальше →
Total votes 9: ↑6 and ↓3 +3
Views 2.7K
Comments 7

Benchmarking ORM, используемых при создании Android-приложений

High performance *Development for Android *

Привет, Хабр! Меня зовут Артём Добровинский и я Android-разработчик в FINCH.


Однажды, кутаясь в дыму утренней сигары, я изучал исходники одной ORM для Android. Увидев там package под названием benchmarks сразу заглянул туда, и был удивлен тем, что все оценки выполнены с помощью Log.d(System.nanoTime()). Я видел такое не в первый раз. Если быть честнее, я видел даже бенчмарки, сделанные с помощью System.currentTimeMillis(). Обрушившееся осознание того, что что-то надо менять, заставило отставить в сторону бокал с виски и сесть за клавиатуру.

Читать дальше →
Total votes 5: ↑5 and ↓0 +5
Views 2.1K
Comments 2

Еще один способ измерить производительность методов .NET приложений

Open source *Programming *.NET *C# *
Sandbox
Tutorial


Зачастую необходимо собирать статистику по производительности методов приложения в режиме реального времени (когда приложение уже запущено), чтобы выявлять его узкие места, и видеть, какая часть приложения тормозит.


При этом было бы неплохо помимо самих данных по производительности (время отработки метода, дата начала и окончания его вызова) хранить контекст вызова, при котором отслеживается производительность (такие как аргументы вызова метода и произвольные добавляемые разработчиком данные).


Ну и "вишенкой на торте" можно считать удобство и простоту используемого инструмента, что тоже немаловажно.


Для решения этих задач и была разработана кросс-платформенная open-source .NET библиотека Unchase.FluentPerformanceMeter.

Читать дальше →
Total votes 8: ↑7 and ↓1 +6
Views 3.8K
Comments 0
1