Тестирование производительности и ресурсов автономного кода Ruby (гем) - PullRequest
2 голосов
/ 15 апреля 2011

У меня есть драгоценный камень, который делает некоторые сложные вычисления: он вырезает «интересные» части изображения. Для этого я настроил несколько алгоритмов. В целом, это просто плохо работает; который, очевидно, я хочу улучшить:).

Я хочу проверить и измерить три вещи:

  • использование памяти
  • загрузка ЦП
  • общее время, потраченное на метод / рутину.

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

Есть ли какая-нибудь функциональность Ruby, гем или что-то подобное, что позволит мне запустить мой код, изменить несколько параметров или немного кода, запустить его снова и затем сравнить результаты?

У меня есть тест: блок и должен быть на месте, кстати, так что если есть что-то, что использует эти тестовые фреймворки, это нормально.

Ответы [ 3 ]

3 голосов
/ 15 апреля 2011

Вы можете использовать стандартную библиотеку 'profiler'. Он сообщает о времени, потраченном на каждый из ваших методов.

require 'profiler'

def functionToBeProfiled
  a = 0
  1000.times do |i|
    a = a + i * rand
  end
end

Profiler__::start_profile
functionToBeProfiled
Profiler__::stop_profile
Profiler__::print_profile($stdout)

Это даст следующий вывод:

  %   cumulative   self              self     total
 time   seconds   seconds    calls  ms/call  ms/call  name
 16.58     0.03      0.03        1    31.00    93.00  Integer#times
 16.58     0.06      0.03     1000     0.03     0.03  Kernel.rand
  8.56     0.08      0.02        3     5.33    10.33  RubyLex#identify_identifier
  8.56     0.09      0.02       10     1.60     6.20  IRB::SLex::Node#match_io
  8.56     0.11      0.02       84     0.19     0.19  Kernel.===
  8.56     0.13      0.02      999     0.02     0.02  Float#+
  8.56     0.14      0.02        6     2.67     5.33  String#gsub!

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

0 голосов
/ 15 апреля 2011

Я получил хороший опыт работы с ruby-prof:

http://ruby -prof.rubyforge.org /

Есть также хорошая презентация о различных способах профилирования где-то в сети, но я не могу вспомнить заголовок и автора, и мне трудно найти их прямо сейчас ...: - (

0 голосов
/ 15 апреля 2011

Я был приятно удивлен JRuby. Если ваш код работает в этой реализации без изменений, и вы знакомы с программным обеспечением для тестирования производительности Java, вам следует взглянуть (и сообщить мне, как вы работаете).

http://www.engineyard.com/blog/2010/monitoring-memory-with-jruby-part-1-jhat-and-visualvm/

http://danlucraft.com/blog/2011/03/built-in-profiler-in-jruby-1.6/

Теперь, внимательно прочитав ваш вопрос, я понимаю, что это не дает вам возможности автоматизировать процесс.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...