Есть ли способ заставить рабочий набор процесса быть 1 ГБ в C ++?

Если бы я использовал следующий вызов в C ++, я бы ожидал, что рабочий набор процесса никогда не упадет ниже 100 МБ.

Однако операционная система по-прежнему обрезает рабочий набор до 16 МБ, даже если я сделаю этот вызов.

Установка WorkingSet на 100 МБ приведет к резкому увеличению скорости моего приложения за счет устранения сбоев страниц программных страниц (см. Диаграмму ниже).

Что я делаю неправильно?

SIZE_T workingSetSizeMB = 100;
int errorCode = SetProcessWorkingSetSizeEx(
    GetCurrentProcess(),
    (workingSetSizeMB - 1) * 1024 * 1024), // dwMinimumWorkingSetSize
    workingSetSizeMB * 1024 * 1024,  // dwMaximumWorkingSetSize,
    QUOTA_LIMITS_HARDWS_MIN_ENABLE | QUOTA_LIMITS_HARDWS_MAX_DISABLE
  );
// errorCode returns 1, so the call worked.

(дополнительно для экспертов) Экспериментальная методология

Я написал тестовый проект на C ++, чтобы выделить 100 МБ данных для переноса WorkingSet более 100 МБ (как показано в Process Explorer), а затем освободил эту память. Однако операционная система вернула рабочий набор обратно до 16 МБ, как только я освободил эту память. Я могу предоставить тестовый проект C ++, который я использовал, если хотите.

Почему Windows обеспечивает вызов SetProcessWorkingSetSizeEx (), если он не работает? Я должен делать что-то не так.

На диаграмме ниже показано резкое увеличение количества ошибок программных страниц (красные пики), когда зеленая линия (рабочий набор) упала с 50 МБ до 30 МБ.

Обновить

В итоге мы проигнорировали проблему, так как она не сильно повлияла на производительность.

Что еще более важно, SetProcessWorkingSetSizeEx делаетне контролировать текущий рабочий набор ине каким-либо образом связаны с ошибками мягкой страницы. Все, что он делает - это предотвращает сбои страниц, предотвращая перенос текущего рабочего набора на жесткий диск.

Другими словами, если кто-то хочет уменьшить программные сбои страниц, SetProcessWorkingSetSizeEx не имеет абсолютно никакого эффекта, поскольку это относится к жестким сбоям страниц.

В «Windows via C / C ++» (Рихтер) есть отличная рецензия, в которой Windows обращается с памятью.

Ответы на вопрос(1)

Ваш ответ на вопрос