LINUX.ORG.RU

Странности с time -p -f «%M»

 ,


0

1

запускаю

/usr/bin/time -p -f 'real %e user %U sys %S mem %M Kb\n' perl xxxx
вижу

real 7.19 user 6.73 sys 0.23 mem 1058192 Kb

при том, что в /proc/self/status на момент завершения процесса

VmPeak:   314404 kB
VmSize:   314404 kB
VmLck:         0 kB
VmPin:         0 kB
VmHWM:    259460 kB
VmRSS:    259460 kB
VmData:   254632 kB
VmStk:       136 kB
VmExe:      1368 kB
VmLib:      4532 kB
VmPTE:       632 kB
VmPMD:        12 kB
VmSwap:        0 kB
getrusage() на момент завершения показывает данные почти совпадающие с /proc/self/status

Если верить докам

%M     Maximum resident set size of the process during its lifetime, in Kbytes.

Откуда этот гиг ???

★★★★★
Ответ на: комментарий от mky

fork/system не используется. Оно коннектиться к базе, делает несколько селектов и формирует несколько файлов.

Хоть в иходники time залезай!

Вообще, если сложить VmSize: 314404 kB VmHWM: 259460 kB VmRSS: 259460 kB VmData: 254632 kB то получается 1087956, что немного больше. Но этоже бред!

vel ★★★★★
() автор топика
Ответ на: комментарий от vel

Хоть в иходники time залезай!

Ну это можно:

struct rusage rusage;
fork()
wait4(...&rusage);
printf("rusage.ru_maxrss");

Оно коннектиться к базе, делает несколько селектов и формирует несколько файлов. ... Но этоже бред!

Во-во. Юзать под задачу жрущее нечто, а потом озаботиться о том, что оно таки жрёт.

vodz ★★★★★
()
Последнее исправление: vodz (всего исправлений: 1)
Ответ на: комментарий от vodz

Во-во. Юзать под задачу жрущее нечто, а потом озаботиться о том, что оно таки жрёт.

Гм, обработка текста на перле быстра, проста и не требует безумного объема памяти.

Увидев безумную цифру про память, я не поверил и стал сравнивать. Обнаружилась разница в 4 раза.

короче, time %M гонит!

ma.c

#include <stdlib.h>
#include <stdio.h>

int main(int argc,char **argv) {
char *m = calloc(1,atoi(argv[1] ? argv[1]:"1")*1024*1024);
exit(0);
}

результат

lve@sdo:/opt/SDO2/ais_sync/tmp$ /usr/bin/time -p -f 'mem %M Kb\n' ./ma 4
mem 20928 Kb

lve@sdo:/opt/SDO2/ais_sync/tmp$ /usr/bin/time -p -f 'mem %M Kb\n' ./ma 10
mem 45808 Kb

lve@sdo:/opt/SDO2/ais_sync/tmp$ /usr/bin/time -p -f 'mem %M Kb\n' ./ma 50
mem 209504 Kb

lve@sdo:/opt/SDO2/ais_sync/tmp$ /usr/bin/time -p -f 'mem %M Kb\n' ./ma 300
mem 1233152 Kb

vel ★★★★★
() автор топика
Ответ на: комментарий от vel

Обнаружилась разница в 4 раза.

Не совсем так, я нашёл плюху. Оно умножает на размер страницы памяти: 4096, скорее всего поменялся kernel API, который теперь возращает не колисчетво страниц, а количество килобайт. Можете смело писать разработчикам miscutils :)

vodz ★★★★★
()
Ответ на: комментарий от vodz

Судя по содержимому http://ftp.gnu.org/gnu/time/:

[ ]	time-1.7.tar.gz	1996-07-11 03:00 	101K	 
[ ]	time-1.8.tar.gz	2017-11-07 21:44 	533K	 
письмо разработчику уже писать не нужно, уже месяц как новая версия, где нормальный результат для теста ТС. Обновляйтесь :-)

mky ★★★★★
()
Ответ на: комментарий от vel

И при этом насколько больше стал объём кода.

mky ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.