Поделиться через


Пример 14. Настройка специального пула

Начиная с Windows Vista, можно настроить функцию специального пула в качестве параметра флага ядра или в качестве параметра реестра. Если вы настроите его в качестве параметра флага ядра (время выполнения), вам не нужно перезагружать компьютер, чтобы изменения вступили в силу. В более ранних версиях Windows специальный пул доступен только в качестве параметра реестра.

Кроме того, начиная с Windows Vista, можно задать и настроить функцию специального пула из командной строки. В более ранних версиях Windows можно задать и настроить функцию специального пула только в диалоговом окне "Глобальные флаги".

Запрос специального пула по тегу пула без перезагрузки

Следующая команда запрашивает специальный пул для всех аллокирований с тегом пула Tag1. Этот параметр становится эффективным немедленно, но он теряется при завершении работы или перезапуске Windows.

Эта команда использует параметр /k для указания параметра флага ядра (время выполнения) и аббревиатуру +spp для установки специального запроса пула.

gflags /k +spp Tag1

Gflags отвечает, выводя текст:

Special Pool set to 0x31676154
PoolTagOverruns set to 0x1
Current Running Kernel Settings are: 00000000

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

Кроме того, запрос на специальное выделение пула не изменяет значение настройки перерасхода (0x1) или недостаточного расхода (0x0) для специального пула. Чтобы изменить настройки с переполнения на недостаточное заполнение, используйте диалоговое окно Gflags. Дополнительные сведения см. в разделе "Обнаружение переполнений и недополнений".

Тег пула нельзя отобразить в командной строке. Чтобы убедиться, что тег пула является параметром ядра, используйте диалоговое окно Gflags.

Запрос специального пула по тегу пула в реестре

Следующая команда запрашивает специальный пул для всех выделений с тегом пула Tag1 . Так как этот параметр хранится в реестре, необходимо перезапустить компьютер, чтобы сделать его эффективным, но он остается эффективным, пока не измените его.

Эта команда использует параметр /r для указания параметра реестра и аббревиатуры +spp, чтобы задать специальный запрос пула.

gflags /r +spp Tag1

Gflags выдает следующий вывод:

Special Pool set to 0x31676154
PoolTagOverruns set to 0x1
Current Boot Registry Settings are: 00000000

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

Кроме того, специальный запрос на выделение пула не изменяет значение параметра переполнения (0x1) или недополнения (0x0) для специального пула. Чтобы изменить с переполнений, настроенных по умолчанию, на недобеги, используйте диалоговое окно Gflags. Для получения информации смотрите "Обнаружение превышений и недостающих данных".

Чтобы убедиться, что значение было добавлено в реестр, используйте Reg или Regedit, чтобы отобразить значение записи PoolTag в ключе HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management.

Рассмотрим пример.

c:>reg query "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management" -v PoolTag
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management
    PoolTag    REG_DWORD    0x31676154

Запрос специального пула по размеру без перезагрузки

Следующая команда запрашивает специальный пул для выделения от 1 до 8 байтов на компьютере x86 с PAGE_SIZE 0x1000 и степенью детализации выделения 8 байт.

Эта команда использует параметр /k для указания флага ядра (времени выполнения) и аббревиатуру +spp для установки запроса специального пула. Значению размера предшествует 0x, чтобы указать, что оно обозначает размер, а не тег пула.

Значение 0x10 вычисляется путем добавления гранулярности выделения (8 байт) к максимальному размеру диапазона (8 байт), что в сумме составляет 16 байт (0x10). Сведения о том, как определить правильное значение, см. в разделе "Выбор размера выделения" в Специальном пуле.

gflags /k +spp 0x10

Gflags отвечает, показывая вывод:

Special Pool set to 0x10
PoolTagOverruns set to 0x1
Current Running Kernel Settings are: 00000000

Опять же, запрос на выделение специального пула не является параметром флага ядра и не отражается в значении параметров ядра.

Кроме того, специальный запрос на выделение пула не изменяет значение параметра перерасхода (0x1) или недостатка (0x0) для специального пула. Чтобы изменить с переполнения, которое является значением по умолчанию, на недополнение, используйте диалоговое окно Gflags. Дополнительные сведения см. в разделе Обнаружение переполнений и недостаточных данных.

Запросить выделенный пул по размеру в реестре

Следующая команда запрашивает специальный пул для выделения 1024–1040 байт на компьютере x64 с PAGE_SIZE 0x1000 и степенью детализации выделения 16 байт.

Эта команда использует параметр /r для указания параметра реестра на уровне системы и аббревиатуры +spp, чтобы задать специальный запрос пула. Значение размера предшествует 0x, чтобы указать, что это размер, а не тег пула.

Значение, 0x420, вычисляется путем добавления единицы выделения (16 байт) к максимальному размеру в этом диапазоне (1040 байт), что составляет 1056 байт (0x420). Сведения о том, как определить правильное значение, см. в разделе "Выбор размера выделения" в Special Pool.

gflags /r +spp 0x420

Gflags отвечает, выводя:

Special Pool set to 0x420
PoolTagOverruns set to 0x1
Current Boot Registry Settings are: 00000000

Опять же, запрос на выделение специального пула не является параметром флага реестра и не отражается в значении параметров реестра.

Кроме того, специальный запрос на выделение пула не изменяет значение переполнения (0x1) или недорасхода (0x0) для специального пула. Чтобы изменить параметр с переполнения, который установлен по умолчанию, на недополнение, используйте диалоговое окно Gflags. В разделе "Обнаружение переполнений и недогрузок см. информацию.

Чтобы проверить, добавлено ли значение в реестр, используйте Reg или Regedit, чтобы отобразить значение записи PoolTag в ключеHKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management.

Рассмотрим пример.

c:>reg query "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management" -v PoolTag
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management
    PoolTag    REG_DWORD    0x420

Отмена специального запроса пула

Следующая команда отменяет запрос для Special Pool в качестве настройки флага ядра (время выполнения). Команда одинакова для запросов, сделанных по тегу пула или по размеру.

gflags /k -spp

Следующая команда отменяет запрос для специального пула в качестве параметра реестра. Команда одинакова как для запроса по тегу пула, так и по размеру.

gflags /r -spp

При успешном выполнении команды Gflags отвечает путем вывода сообщения:

Special Pool value has been deleted.