как насчет производительности для запуска 32-битного приложения в 64-битной Linux?
Я думаю, производительность похожа.
Например, если приложение занимает 10% ЦП в 32-битном Linux, то будет ли оно занимать больше ЦП в соответствующем 64-битном Linux?
Вы должны разделить пользовательское и системное время.
пользовательское время будет таким же (тот же код работает на процессоре)
системное время может быть немного больше, потому что ядру нужно переводить 32-битные запросы из пользовательского пространства в 64-битные (особенно когда передается структура, как в readv
syscall). Кроме того, ядро должно переключать ЦП в 32-разрядный «устаревший» режим (более тяжелый switch_to
или переключение контекста). Ядро также должно создавать таблицу страниц по-другому.
Но если ваше приложение тратит мало времени на системные вызовы и выполняет небольшое количество системных вызовов, производительность будет хорошей.
Использует ли ОС некоторые программные методы для эмуляции рабочей среды для приложений?
Нет, эмуляции почти нет (в случае x86-64 / x86, SPARC64 / 32, PowerPC64 / 32 и других пар дуг, в которых используется метод _compat
). Ядро Linux выполняет только перевод 32-битного интерфейса системных вызовов во внутренний формат, используя _compat
версии обработчиков syscall.