zone_NORMAL и ZONE_HIGHMEM на 32- и 64-битных ядрах - PullRequest
3 голосов
/ 27 мая 2011

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

Прочитав эту очень интересную книгу "Рекомендации по настройке и производительности Linux", найденную на сайте IBM , я наткнулся на то, что не до конца понимаю.

На 32-разрядных архитектурах, таких как IA-32, ядро ​​Linux может напрямую адресовать только первый гигабайт физической памяти (896 МБ, если учитывать зарезервированный диапазон). Память выше так называемого ZONE_NORMAL должна быть сопоставлена ​​с нижним 1 ГБ. Это отображение полностью прозрачно для приложений, но выделение страницы памяти в ZONE_HIGHMEM вызывает небольшое снижение производительности.

  1. почему память выше 896 МБ должна быть сопоставлена ​​с нижними 1 ГБ?
  2. Почему это влияет на производительность, выделяя страницу памяти в ZONE_HIGHMEM?
  3. для чего тогда используется ZONE_HIGHMEM
  4. почему ядро, способное распознавать до 4 ГБ (CONFIG_HIGHMEM=y), может просто использовать первый гигабайт?

Заранее спасибо

1 Ответ

4 голосов
/ 27 мая 2011

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

На IA-32, который допускает пространство линейных адресов 4 ГБ,обычно первые 3 ГБ линейного адресного пространства выделяются пользовательскому процессу, а последние 1 ГБ линейного адресного пространства выделяются ядру.

Ядро должно использовать свой диапазон адресов 1 ГБ, чтобы иметь возможностьадресовать любую часть физической памяти, которая ему нужна.Объем памяти выше 896 МБ , а не «сопоставлен с малым объемом 1 ГБ» - происходит то, что физической памяти ниже 896 МБ назначается постоянный линейный адрес в части ядра линейного адресного пространства, тогда как память выше этого предела должнаприсваивать временное отображение в оставшейся части линейного адресного пространства.

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

...