Почему я получаю разные результаты для определения пика использования памяти? - PullRequest
0 голосов
/ 20 февраля 2019

В Linux я использую инструмент /usr/bin/time -f %M (gnu-time) для получения пика памяти, используемой для одного процесса / программы.Но каждый раз, когда я запускаю эту команду, я получаю другой результат.

  1. В чем причина этой разницы?
  2. Как я могу получить точное значение для максимального объема памяти, потребляемойпроцесс?

ps Я уже использовал другие методы, например, снимки из памяти (например, чтение из /proc/pid), но поскольку моя программа заканчивается так быстро, я не хочучто-нибудь с очень маленькой частотой дискретизации.

1 Ответ

0 голосов
/ 20 февраля 2019

Любой недетерминированный процесс, очевидно, может каждый раз приводить к разному использованию памяти.Например, вы никогда не сможете запустить большую программу, такую ​​как Gimp или Chrome, и получить одно и то же число дважды, даже если вы выполняете одну и ту же операцию.

Однако, если вы видите изменения в использовании памяти дляпростой, очень детерминированный процесс, вы, вероятно, включили рандомизацию макета адресного пространства.

Вот пример foo.c:

int main() {
  return 0;
}

Вы можете видеть, как каждый раз используется разная память:

$ gcc foo.c -o foo

$ /usr/bin/time -f +%M ./foo
+1144
$ /usr/bin/time -f +%M ./foo
+1048
$ /usr/bin/time -f +%M ./foo
+1060

Это потому, что ASLR полностью включен:

$ cat /proc/sys/kernel/randomize_va_space
2

Если выключить его:

$ sudo tee /proc/sys/kernel/randomize_va_space <<< 0
0

Вы получите то же значение:

$ /usr/bin/time -f +%M ./foo
+1144
$ /usr/bin/time -f +%M ./foo
+1144
$ /usr/bin/time -f +%M ./foo
+1144

Но не забудьте включить его для дополнительной безопасности:

sudo tee /proc/sys/kernel/randomize_va_space <<< 2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...