Как насчет производительности для запуска 32-битного приложения в 64-битной Linux? - PullRequest
1 голос
/ 24 августа 2011

Я запускаю 32-битные приложения в 64-битном Linux. Я считаю, что загрузка ЦП высока, и 3/4 ЦП расходуется на «sy» в «верхнем» окне вывода. Я не понимаю, почему процессор так загружен для ядра - в приложениях не так много операций ввода-вывода.

Итак, мой вопрос: как насчет производительности для запуска 32-битного приложения в 64-битной Linux? Например, если приложение занимает 10% ЦП в 32-битной Linux, то будет ли оно занимать больше ЦП в соответствующей 64-битной Linux? Использует ли ОС некоторые программные методы для эмуляции рабочей среды для приложений?

1 Ответ

2 голосов
/ 25 августа 2011

как насчет производительности для запуска 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.

...