Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Производительность Perl / 25 сообщений из 26, страница 1 из 2
25.10.2013, 13:20
    #38441177
Testor1
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Производительность Perl
Привет,

Есть проблема с производительностью perl скрипта.

Один и тот же скрипт с одними и теми же данными запускается на двух серверах - один на виртуалке Windows 2008 r2, второй на Solaris 10. По характеристикам SUN сервер на несколько порядков мощнее чем виртуальная Windows машина. Непонятно почему перл скрипт на Windows отрабатывает в два раза быстрее, чем на SUN. Может быть дело в настройках ? Скрипт выполняет обработку текстового файла с помощью регулярных выражений. Как отследить причину низкой производительности скрипта на SUN ?
...
Рейтинг: 0 / 0
25.10.2013, 13:35
    #38441217
Vladimir Baskakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Производительность Perl
так может Сан-овская машина загружена другими задачами под самый верх?
Ну и - сам скрипт и данные посмотреть ... бы ....
...
Рейтинг: 0 / 0
25.10.2013, 14:01
    #38441273
Testor1
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Производительность Perl
Vladimir Baskakovтак может Сан-овская машина загружена другими задачами под самый верх?
Ну и - сам скрипт и данные посмотреть ... бы ....

Процессор загружен на 20%, а память на 30%.

Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
#!/usr/bin/perl

my $before_pattern = '';
my $after_pattern = '';
my $replace = '';
my $count_line = 0;
my $buffer_line_size = 100;
my $new_file_line = '';

while($file_line=<STDIN>)
{
	for($file_line)
	{
		if( $file_line =~ /(\|\[.*\]\|)/g)
		{
			$before_pattern = $`;
			$replace = $&;
			$after_pattern = $';

			$replace =~ s/\[(([2-9]~)|(\d\d+~))(-?\d*(\.\d*)?~0?(\.0*)?)(~\d*)?\]//g;
			$replace =~ s/(~-?\d*)(?:(\.\d*[1-9])|\.)(0*)/\1\2/g;
			$new_file_line = $new_file_line.$before_pattern.$replace.$after_pattern;
		
			if($count_line % $buffer_line_size == 0)
			{
				print STDOUT $new_file_line;
				$new_file_line = '';
				$count_line = 0;	
			}
		}
	}
}


if($count_line > 0)
{
	print STDOUT $new_file_line;
	$new_file_line = '';
	$count_line = 0;	
}
...
Рейтинг: 0 / 0
25.10.2013, 14:25
    #38441326
ScareCrow
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Производительность Perl
авторо характеристикам SUN сервер на несколько порядков мощнее чем виртуальная Windows машина
фигня. какой там проц стоит?
...
Рейтинг: 0 / 0
25.10.2013, 17:55
    #38441741
Testor1
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Производительность Perl
ScareCrowавторо характеристикам SUN сервер на несколько порядков мощнее чем виртуальная Windows машина
фигня. какой там проц стоит?



1350 MHz 16MB SUNW,UltraSPARC-IV 3.1
и таких много :)

Интел - два ядра всего было на проц.
...
Рейтинг: 0 / 0
25.10.2013, 17:58
    #38441744
ScareCrow
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Производительность Perl
автор1350 MHz 16MB SUNW,UltraSPARC-IV 3.1
интель частота в 2 раза больше. ну и производительность современных интелей напорядок выше вашего спарка в однопоточных приложениях.

автори таких много :)
скрипто то однопосточный.
...
Рейтинг: 0 / 0
25.10.2013, 18:00
    #38441750
ScareCrow
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Производительность Perl
непомню в каком перле, толив 5 толи не в 5 регекспы ускорили сильно. почитайте релизноты.
...
Рейтинг: 0 / 0
25.10.2013, 18:08
    #38441764
Testor1
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Производительность Perl
ScareCrowавтор1350 MHz 16MB SUNW,UltraSPARC-IV 3.1
интель частота в 2 раза больше. ну и производительность современных интелей напорядок выше вашего спарка в однопоточных приложениях.

автори таких много :)
скрипто то однопосточный.

Но машина виртуальная то была.
Вот думаю, что для винды я скачивал последнюю версию перла, а под сан шла своя родная. Может в этом дело?
...
Рейтинг: 0 / 0
25.10.2013, 19:14
    #38441818
Андрей Панфилов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Производительность Perl
Testor1,

от древнего спарка чудес ждать не стоит
...
Рейтинг: 0 / 0
28.10.2013, 09:15
    #38443009
Testor1
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Производительность Perl
Андрей ПанфиловTestor1,

от древнего спарка чудес ждать не стоит

На SUN perl - v5.8.4 built for sun4-solaris-64int
На виртуальной винде - 5.14.4 под 64 бит.

Вопрос а на скольк спарк старее чем виртуальный двухядерный процессор ?
...
Рейтинг: 0 / 0
28.10.2013, 11:03
    #38443116
Андрей Панфилов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Производительность Perl
Testor1Вопрос а на скольк спарк старее чем виртуальный двухядерный процессор ?лет на 8
...
Рейтинг: 0 / 0
28.10.2013, 11:27
    #38443149
Testor1
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Производительность Perl
Андрей ПанфиловTestor1Вопрос а на скольк спарк старее чем виртуальный двухядерный процессор ?лет на 8

То есть лечиться заменой сервера ? :)
...
Рейтинг: 0 / 0
28.10.2013, 11:30
    #38443153
ScareCrow
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Производительность Perl
Андрей ПанфиловTestor1Вопрос а на скольк спарк старее чем виртуальный двухядерный процессор ?лет на 8

ВикипедияСерверы с использованием процессоров UltraSPARC IV были выпущены в сентябре 2004
на 9, почти на 10.
...
Рейтинг: 0 / 0
31.10.2013, 14:21
    #38448362
TheAthlete
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Производительность Perl
В первую очередь нужно обновиться до последней версии Perl - в каждой новой версии улучшается производительность, в том числе и регулярок. На сегодня это Perl 5.18.1. Можете поставить с помощью " http://perlbrew.pl/%22%5Dperlbrew]http://perlbrew.pl/"]perlbrew . Именно поэтому на Windows производительность выше.

Плюс вопрос по коду:
зачем вам цикл
Код: ruby
1.
for($file_line) {}


если он делает только одну итерацию и возвращает только ту строку, что выдает while? Если это проверка на undef, то while сам не запускается при достижении undef
...
Рейтинг: 0 / 0
31.10.2013, 14:54
    #38448428
Testor1
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Производительность Perl
TheAthleteВ первую очередь нужно обновиться до последней версии Perl - в каждой новой версии улучшается производительность, в том числе и регулярок. На сегодня это Perl 5.18.1. Можете поставить с помощью " http://perlbrew.pl/%22%5Dperlbrew]http://perlbrew.pl/"]perlbrew . Именно поэтому на Windows производительность выше.

Плюс вопрос по коду:
зачем вам цикл
Код: ruby
1.
for($file_line) {}


если он делает только одну итерацию и возвращает только ту строку, что выдает while? Если это проверка на undef, то while сам не запускается при достижении undef

Спасибо за ценное замечание. Вы правы. Этот код не нужен.
...
Рейтинг: 0 / 0
01.11.2013, 12:46
    #38449729
Testor1
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Производительность Perl
TheAthleteВ первую очередь нужно обновиться до последней версии Perl - в каждой новой версии улучшается производительность, в том числе и регулярок. На сегодня это Perl 5.18.1. Можете поставить с помощью " http://perlbrew.pl/%22%5Dperlbrew]http://perlbrew.pl/"]perlbrew . Именно поэтому на Windows производительность выше.

Плюс вопрос по коду:
зачем вам цикл
Код: ruby
1.
for($file_line) {}


если он делает только одну итерацию и возвращает только ту строку, что выдает while? Если это проверка на undef, то while сам не запускается при достижении undef

Из вашего опыта, можно ли приведенный код еще как-то оптимизировать по скорости?
...
Рейтинг: 0 / 0
05.11.2013, 14:48
    #38453077
TheAthlete
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Производительность Perl
не понятно, зачем нужен данный код:
Код: ruby
1.
2.
3.
4.
5.
6.
if($count_line % $buffer_line_size == 0)
{
  print STDOUT $new_file_line;
  $new_file_line = '';
  $count_line = 0;	
}


По воводу данного кода:

Код: ruby
1.
2.
3.
$before_pattern = $`;
$replace = $&;
$after_pattern = $';


Почитайте книгу "Фридл Дж. Регулярные выражения, 3-е издание", глава 7. Perl, раздел "Вредные переменные $`, $&, $'"
...
Рейтинг: 0 / 0
05.11.2013, 23:32
    #38453814
netwind
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Производительность Perl
TheAthleteПочитайте книгу "Фридл Дж. Регулярные выражения, 3-е издание", глава 7. Perl, раздел "Вредные переменные $`, $&, $'"
жаль нет книги "Вредные корпоративные заблуждения : solaris, sparc, freebsd ".
...
Рейтинг: 0 / 0
06.11.2013, 17:35
    #38454930
Warstone
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Производительность Perl
Testor1Из вашего опыта, можно ли приведенный код еще как-то оптимизировать по скорости?Можно конечно... Переписать на XS (Си).
...
Рейтинг: 0 / 0
06.11.2013, 17:36
    #38454932
Warstone
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Производительность Perl
Можно еще NYTProf натрвить и увидеть, где узкие места. А нежадные квантификаторы вы и так пользуете.
...
Рейтинг: 0 / 0
15.11.2013, 11:19
    #38466111
Testor1
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Производительность Perl
TheAthleteне понятно, зачем нужен данный код:
Код: ruby
1.
2.
3.
4.
5.
6.
if($count_line % $buffer_line_size == 0)
{
  print STDOUT $new_file_line;
  $new_file_line = '';
  $count_line = 0;	
}


По воводу данного кода:

Код: ruby
1.
2.
3.
$before_pattern = $`;
$replace = $&;
$after_pattern = $';


Почитайте книгу "Фридл Дж. Регулярные выражения, 3-е издание", глава 7. Perl, раздел "Вредные переменные $`, $&, $'"


Я в цикле объединяю строки по 100 в одну.
В случае, если в последнем цикле строк будет меньше 100, то их нужно будет также вывести.

По поводу временных переменных - на что их заменить в моем случае?
...
Рейтинг: 0 / 0
15.11.2013, 11:21
    #38466115
Testor1
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Производительность Perl
WarstoneМожно еще NYTProf натрвить и увидеть, где узкие места. А нежадные квантификаторы вы и так пользуете.

Есть реальные идеи что можно еще оптимизировать ?
...
Рейтинг: 0 / 0
15.11.2013, 13:44
    #38466387
netwind
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Производительность Perl
Testor1WarstoneМожно еще NYTProf натрвить и увидеть, где узкие места. А нежадные квантификаторы вы и так пользуете.

Есть реальные идеи что можно еще оптимизировать ?
А что нереального в профайлере?
выкиньте старый хлам и поставьте все на свой рабочий ПК - будет ускорение в 3 раза.
...
Рейтинг: 0 / 0
17.11.2013, 13:43
    #38467716
Warstone
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Производительность Perl
Testor1,

Переписанный пример покажите... Он должен сильно поменяться после правок.

(Читать как: Мне лень самому смотреть что вам уже посоветовали)
...
Рейтинг: 0 / 0
18.11.2013, 09:38
    #38468167
Testor1
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Производительность Perl
WarstoneTestor1,

Переписанный пример покажите... Он должен сильно поменяться после правок.

(Читать как: Мне лень самому смотреть что вам уже посоветовали)

Последняя версия
Код: perl
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
#!/usr/bin/perl

my $before_pattern = '';
my $after_pattern = '';
my $replace = '';
my $count_line = 0;
my $buffer_line_size = 100;
my $new_file_line = '';

while($file_line=<STDIN>)
{
		if( $file_line =~ /(\|\[.*\]\|)/g)
		{
			$before_pattern = $`;
			$replace = $&;
			$after_pattern = $';

			$replace =~ s/\[(([2-9]~)|(\d\d+~))(-?\d*(\.\d*)?~0?(\.0*)?)(~\d*)?\]//g;
			$replace =~ s/(~-?\d*)(?:(\.\d*[1-9])|\.)(0*)/\1\2/g;
			$new_file_line = $new_file_line.$before_pattern.$replace.$after_pattern;
		
			if($count_line % $buffer_line_size == 0)
			{
				print STDOUT $new_file_line;
				$new_file_line = '';
				$count_line = 0;	
			}
		}
}


if($count_line > 0)
{
	print STDOUT $new_file_line;
	$new_file_line = '';
	$count_line = 0;	
}
...
Рейтинг: 0 / 0
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Производительность Perl / 25 сообщений из 26, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]