Единица максимального размера резидентного набора в выводе времени

Может кто-нибудь дать мне знать, какова единица измерения максимального резидентного размера в выходных данных ниже?

/usr/bin/time -l mvn clean package -T 7 -DskipTests
...
real       530.51
user       837.49
sys         64.28
3671834624  maximum resident set size
         0  average shared memory size
         0  average unshared data size
         0  average unshared stack size
   2113909  page reclaims
     26733  page faults
         0  swaps
      5647  block input operations
     26980  block output operations
        15  messages sent
        25  messages received
       687  signals received
    406533  voluntary context switches
   1319461  involuntary context switches

Я пытаюсь измерить пиковое использование памяти процессом.

Среда - Mac OS X Sierra (10.12.5)

2 ответа

Это зависит от операционной системы. В OS X это измеряется в байтах. Вот что об этом говорит man-страница:

           -l      The contents of the rusage structure are printed as well.

Теперь, чтобы понять, что это значит, запуститеman getrusage 2. Там сказано следующее:

           ru_maxrss    the maximum resident set size utilized (in bytes).

Итак, на странице руководства указано, что это в байтах.

Чтобы перепроверить документацию, я написал тестовую программу на C.

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

int main(int argc, char **argv) {
    int mb = atoi(argv[1]);
    printf("allocating %d MB", mb);
    int len = mb * 1000 * 1000;
    char *buf = malloc(len);
    memset(buf, 'X', len);
    return 0;
}

При этом считывается параметр командной строки и выделяется указанное количество мегабайт. Вот программа в действии:

      $ /usr/bin/time -l ./test 1 2>&1 |  grep max   
             1744896  maximum resident set size
$ /usr/bin/time -l ./test 2 2>&1 |  grep max
             2744320  maximum resident set size

Выделение одного дополнительного мегабайта памяти выделяет еще 999424 единицы памяти. Есть некоторая неточность измерений, но это показывает, что используемая единица измерения — байты.

Я уже говорил, что это зависит от ОС. В Linux,ru_maxrssизмеряется в кибибайтах. Будьте осторожны при написании кроссплатформенного кода, который от этого зависит.

Это в байтах. Так что в этом случае 3671834624 равняется 3,6 ГБ.

Другие вопросы по тегам