Назад | Перейти на главную страницу

32-разрядная версия Linux 2.6 + BIGMEM против 64-разрядной версии Linux 2.6?

Мне сказали, что 32-битный Linux с ядром bigmem (когда в системе> = 4 ГБ ОЗУ) будет работать лучше, чем 64-битный Linux.

Я бы хотел дать определение "работать лучше, чем"для вас, но, к сожалению, человек, который сказал мне это, не уточнил / не обосновал ... отсюда и этот пост!

Есть ли в этом хоть какая-то правда? Любые обстоятельства, при которых это было бы правдой?

Спасибо

в процессорах x86 64-битный код помогает двумя способами:

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

и имеет следующие минусы:

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

поэтому во многих случаях лучшее из обоих миров - это 64-битная ОС и 32-битные процессы:

  • 64-битная ОС может обрабатывать много оперативной памяти, как для хранения множества процессов, так и для больших кешей
  • 32-разрядные приложения ограничены 2 или 3 ГБ ОЗУ для каждого процесса, но этого достаточно для подавляющего большинства задач.
  • независимо от того, где в 64-битном пространстве расположена 32-битная ОЗУ задачи, для доступа к ее памяти потребуются только 32-битные указатели, поэтому все указатели и структуры данных по-прежнему представляют собой меньшую 32-битную разновидность.
  • 32-битная задача (процесс или поток) должна сохранить / восстановить только несколько небольших регистров, доступных в 32-битной x86, 64-битный планировщик Linux справляется с этим хорошо.

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

единственный случай, когда я определенно выберу 32-на-64, - это изоляция типа OpenVZ. Таким образом, каждый владелец раздела сможет максимально использовать ограниченную оперативную память, к которой он имеет доступ.

все же я не знаю любой преимущество PAE перед 64-битным (даже не маленькими указателями, поскольку каждый указатель PAE имеет 32-битное смещение и дополнительный (до 32-битного) «старт» (помните сегментированную память 8086? Что за раздувание! )

PAE вредит производительности. Единственный возможный выигрыш в том, что указатели уменьшатся вдвое, но теперь вам придется иметь дело с перестановкой страниц памяти.

Помимо меньшей потребности в регистрах, x86_64 дает вам более разумные операции с плавающей запятой. Это также гарантирует, что ваши двоичные файлы будут лучше оптимизированы, потому что компилятору никогда не нужно было генерировать обратно совместимые коды операций. Если вы используете что-то с привязкой к процессору, это большая победа.