Супермедленный і супершвидкий бенчмарк

У недавній статті про продуктивність Java розгорілася дискусія на тему вимірювання продуктивності. Дивлячись на неї, з сумом доводиться усвідомлювати, що багато людей досі не розуміють, наскільки складно правильно виміряти час виконання того чи іншого коду. Крім того, люди взагалі не звикли, що один і той же код в різних умовах може виконуватися істотно різний час. Приміром, ось одна з думок:
Якщо мені треба дізнатися, "яку мову якнайшвидше для мене на моїй задачі", то я прожену тебе найпримітивніший бенчмарк в світі. Якщо різниця буде суттєвою (скажімо, на порядок) — то скоріше всього і на користувача машині все буде приблизно так само.
На жаль, самий примітивний бенчмарк в світі — це як правило неправильно написаний бенчмарк. І не слід сподіватися, що неправильний бенчмарк виміряє результат хоча б з точністю до порядку. Він може виміряти що-небудь абсолютно інше, що буде абсолютно відрізнятися від реальної продуктивності програми з аналогічним кодом. Давайте розглянемо приклад.
Читати далі →

Велике оглядове тестування мов програмування

Нещодавно черговий раз відпрацював зі студентам 2-го курсу 2-семестрову дисципліни «Алгоритмічні мови». Оглядово розглянули кілька дюжин мов програмування. Один із студентів, Вадим Шукалюк, захотів трохи краще з ними познайомитися, отримати більш чітке уявлення про кожен із них. Порадив йому провести невелике дослідження. Чим і захопив. Пропоную свій звіт по виконаній за кілька місяців разом з ним роботі.

У кожної мови програмування є свої переваги і недоліки. Одна з найважливіших характеристик транслятора з будь-якої мови — це швидкість виконання програм. Дуже важко або навіть неможливо одержати точну оцінку такій швидкості виконання. Ресурс http://benchmarksgame.alioth.debian.org/ пропонує ігрову форму для перевірки такої швидкості на різних завданнях. Але число мов, представлених на цьому ресурсі, досить невелика. Граничну ємність стека, критичну величину для рекурсивних обчислень перевірити простіше, але вона може змінюватися в різних версіях транслятора і бути залежною від системних налаштувань.

Тестувалися наступні транслятори: сі (gcc, clang, icc), assembler (x86, x86-64), ява (OpenJDK), паскаль (fpc), яваскрипт (Google Chrome, Mozilla Firefox), лисп (sbcl, clisp), ерланген, хаскель (ghc, hugs), діно[1], аук (gawk, mawk, busybox), луа, рубін, бейсік (gambas, libre office), пітон-2, пі-ейч-пі, постскрипт (gs), пролог (swipl, gprolog), перл, метапост, ТEХ, тикль, бэш. Досліджувалися як власне швидкість виконання декількох невеликих, але трудомістких алгоритмів, так і:

  • якість оптимізації деяких трансляторів;
  • особливості при роботі з процесорами Intel і AMD;
  • гранична кількість рекурсивних викликів (ємність стека).

Читати далі →

Куленепробивні тести JavaScript

Писати тести швидкості JS не так легко, як здається. Навіть не торкаючись питань кросбраузерною сумісності, можна потрапити в безліч пасток.

Саме тому я і зробив jsPerf. Простий веб-інтерфейс для того, щоб кожен міг створювати і ділитися тестами, і перевіряти швидкодію різних фрагментів коду. Ні про що не треба турбуватися — просто вводите код, швидкодія якого необхідно виміряти, і jsPerf створить для вас нову задачу з тестування, яку ви потім зможете запустити на різних пристроях і в різних браузерах.

Читати далі →

Пишемо швидкий і економний код на JavaScript

Такий движок JS, як V8 (Chrome, Node) від Google, заточений для швидкого виконання великих додатків. Якщо ви під час розробки дбаєте про ефективне використання пам'яті і швидкодії, вам необхідно знати дещо про процесах, що проходять в движку JS браузера.

Що б там не було — V8, SpiderMonkey (Firefox), Carakan (Opera), Chakra (IE) або щось ще, знання внутрішніх процесів допоможе вам оптимізувати роботу ваших додатків. Але не закликаю вас оптимізувати движок для одного браузера або движка — не робіть так.

Задайте собі питання:
— чи можна щось у моєму коді зробити більш ефективним?
— яку проводять оптимізацію популярні движки JS?
— що движок не може компенсувати, і може збірка сміття підчистити все так, як я від неї чекаю?



Є багато пасток, пов'язаних з ефективним використанням пам'яті і швидкодією, і в статті ми вивчимо деякі підходи, які добре показали себе в тестах.

Читати далі →

Практика автоматизації вимірювання показників швидкодії СЕД

Системи електронного документообігу та ERP-системи являють собою комплексні програмні продукти, які найчастіше складаються з безлічі підсистем. Частини будь-якої системи працюють як безпосередньо в діалозі з користувачем, так і фоновому режимі, виконуючи певну частину завдань на сервері.

Щоб контроль продуктивності системи проводився в обох напрямках, адміністратору системи потрібні зручні інструменти для вимірів, що дозволяють вчасно знайти слабку ланку і вжити заходів щодо поліпшення швидкодії. У цій статті я поділюся своїм досвідом, як можна вирішити питання автоматичних вимірів показників швидкодії системи на прикладі системи електронного документообігу*.
На відміну від інших програмних продуктів, для СЕД існують певні вимоги по швидкодії: це один з важливих параметрів, за яким необхідно стежити.

*Стаття буде особливо корисна починаючим адміністраторам Docsvision, але в цілому викладений досвід застосуємо і для аналогічних продуктів.



Читати далі →

Застосування інфраструктури кешування в ASP.NET продовження

минулому пості я розповідав, як застосовувати інфраструктуру кешування в ASP.NET для збільшення продуктивності сайту. Додаванням кількох рядків коду мені вдалося збільшити продуктивність домашньої сторінки сайту в 5 разів. На цей раз підемо далі і витиснемо ще більше продуктивності, не вдаючись до різних хакама.

Читати далі →