Профессиональное программирование на PHP

Страница 444 из 591


Создание эталонной тестовой нагрузки 461

Статистика использования системного и пользовательского времени в getrusage показывает фактическое количество времени, которое процессор тратит на выполнение системных вызовов уровня ядра и вызовов в пользовательском пространстве (соответственно). Это гораздо полнее отражает "действительное" использование функцией процессорных ресурсов. Естественно, 10 мсек непрерывного процессорного времени очень отличаются от блоков процессорного времени величиной 5 мсек, и getrusage-статистика не компенсирует влияние процессорного кэша или повторного использования регистров, которые отличаются при нагрузке и могут оказывать весьма благоприятное влияние на производительность.

Чтобы внедрить возможность сбора такой статистики в комплект эталонного тестирования, необходимо просто переопределить метод setMarkerf) (унаследованный от класса Benchmark_Timer), который поддерживает накопление статистики. Кроме того, чтобы управлять упорядочением статистики в конце работы, необходимо переопределить метод get. Ниже приведен соответствующий код:

require_once 'Benchmark/Iterate.php' ,-

class RusageBench extends Benchmark Iterate { public function setMarker($name) J $this->markers[$name] = getrusagef); $this->markers[$name] [1ru_utime'] • =

sprintf("%6d.%06d",$this->markers[$name][1ru_utime.tv_sec1],

$this->markers[$name] ['ru_utime.tv_usec1]) ; $this->markers[$name]['ru_stime'] =

sprintf("%6d.%06d",$this->markers[$name]['ru_stime.tv_sec'],

$this->markers[$name][1ru_stime.tv_usec']);

public function get() { $result = array(); $total = 0;

$iterations = count($this->markers)/2;

for ($i = 1; $i <= $iterations; $i++) {

foreach( array_keys(getrusage()) as $key) { $temp[$key] =

($this->markers['end_'.$i][$key] - $this->markers['start_'.$i][$key]);

$result['mean'][$key] +=

($this->markers[1end_'.$i][$key] - $this->markers['start_'.$i][$key]);

foreach ( array( 'ru_stime', 'ru_utime' ) as $key ) {

$result['mean'][$key] += ($this->markers['end_'.$i][$key] -

$this->markers['start_'.$i][$key]);

}

$result[$i] = $temp;

}

foreach( array_keys(getrusage()) as $key) ( $result['mean'][$key] /= $iterations;

foreach ( array( 'ru_stime', 'ru_utime' ) as $key ) { $result['mean'][$key] /= $iterations;

}




  Hostland.Ru

 «Бесплатный хостинг Hostland.Su» © 2006