1

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

Короче говоря, мне было интересно, есть ли простой способ заставить процесс использовать виртуальную память в отличие от физической ОЗУ, чтобы я мог лучше измерить производительность моей реализации по сравнению с тем, как система будет работать при подключении к жесткому диску.

4 ответа4

1

Это сложно, но в сущности вам нужно, чтобы отдельный процесс потреблял всю доступную оперативную память, блокировал свои собственные данные в физической памяти, но оставлял доступным весь обмен (можно увидеть эффект, используя командовать)

Я думаю, что уже есть инструменты для этого (я не помню конкретных примеров, но есть инструменты для заполнения памяти или проверки памяти на битовые ошибки во время работы системы ... такого рода вещи) или что-то в этом роде близко к этому.

Мой вопрос ... почему? Зачем намеренно калечить тестовую машину только для того, чтобы получить число, очень специфичное для вашей конфигурации свопинга (тип диска, размер, частота вращения и т.д.)? Кроме того, насколько ресурсоемким является ваше приложение в первую очередь? Если это не очень (скажем, мегабайт или два ОЗУ), то обмен не повредит очень сильно.

0

хорошо чтобы быть ясно, RAM является частью иерархии виртуальной памяти

процесс не может обойти ОЗУ ... как переставленные страницы снова попадут в кэш ЦП?

вы можете смоделировать что-то подобное, имея ящик со смехотворно низким ОЗУ, но даже тогда вы можете увидеть из vmstat, что он все еще используется и используется недетерминированным образом в отношении вашего набора тестов

0

Вы можете ограничить объем физической памяти, доступной для процесса, с помощью ulimit -m . Обратите внимание, что ulimit - это встроенная оболочка, задокументированная на man-странице оболочки (man sh или man bash). Например, следующий фрагмент ограничивает программу до 400 КБ физической памяти:

(ulimit -m 400; exec /path/to/application)

Базовым интерфейсом является setrlimit(RLIMIT_RSS, …). На странице руководства указано, что этот предел не поддерживается ядрами 2.6, но я думаю, что он устарел, поскольку RLIMIT_RSS , по-видимому, используется текущими ядрами 2.6.

0

Для меня это звучит так, будто он хочет проверить, что сообщение пейджера выходит даже тогда, когда контролируемая машина завязла с сильным обменом. Это разумный контрольный пример.

Я, вероятно, настроил бы программу, которая бы выделяла много памяти и выполняла случайное чтение и запись по всей этой памяти, следя за тем, чтобы каждый адрес был отдельной страницей. Запустите несколько копий этого и несколько копий задания на сжатие видео, чтобы поглотить циклы ЦП - это должно сделать машину занятой.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .