Есть вопрос! — Sysenter/sysexit?
Пару месяцев назад у меня возник вопрос, о котором я благополучно забыл после безрезультатных попыток узнать в чем дело. И вот снова вспомнил и хотел бы его задать, а то так и не узнаю правды.
Начиная с процессоров Pentium II была введена поддержка инструкций SYSENTER/SYSEXIT (быстрые системные вызовы). В Linux их поддержка была осуществлена, где-то с ядер 2.5.х. Таким образом, если процессор (по идее все процессоры, начиная с PII) и ядро включают поддержку этих инструкций - их можно использовать (точнее они будут использоваться библиотекой С через vdso, где определяется какой механизм системных вызовов должен использоваться).
А теперь собственно сама проблема. В файле /proc/cpuinfo можно просмотреть флаги процессора (каждый флаг это некоторая возможность процессора, например поддержка SSE). Поддержка инструкций SYSENTER/SYSEXIT обозначается флагом "sep", но я его там не увидел. Вопрос - почему?
Ядро использует инструкцию cpuid для определения возможностей процессора. Почему не определяется возможность использования быстрых системных вызовов для меня пока загадка (хотя одноименная утилита cpuid все прекрасно определяет), может быть что-то в конфиге ядра (хотя тот же конфиг и ядро в Qemu работали без нареканий, т.е. поддержка есть), может быть я чего-то не знаю.
На архитектурах Х86_64, такой проблемы вроде бы нет (я не встречал), только на Х86_32 (другие архитектуры не рассматриваю).
Моя система (на всякий случай): Fedora 13, kernel-2.6.34, процессоры Pentium 4 и Core 2 Duo.
UPD: На данный момент данный флаг не определяется (я не имею ввиду, что он и у вас не будет определяться при такой же конфигурации системы) на следующих системах (x86_32):
Работает:
Начиная с процессоров Pentium II была введена поддержка инструкций SYSENTER/SYSEXIT (быстрые системные вызовы). В Linux их поддержка была осуществлена, где-то с ядер 2.5.х. Таким образом, если процессор (по идее все процессоры, начиная с PII) и ядро включают поддержку этих инструкций - их можно использовать (точнее они будут использоваться библиотекой С через vdso, где определяется какой механизм системных вызовов должен использоваться).
А теперь собственно сама проблема. В файле /proc/cpuinfo можно просмотреть флаги процессора (каждый флаг это некоторая возможность процессора, например поддержка SSE). Поддержка инструкций SYSENTER/SYSEXIT обозначается флагом "sep", но я его там не увидел. Вопрос - почему?
Ядро использует инструкцию cpuid для определения возможностей процессора. Почему не определяется возможность использования быстрых системных вызовов для меня пока загадка (хотя одноименная утилита cpuid все прекрасно определяет), может быть что-то в конфиге ядра (хотя тот же конфиг и ядро в Qemu работали без нареканий, т.е. поддержка есть), может быть я чего-то не знаю.
На архитектурах Х86_64, такой проблемы вроде бы нет (я не встречал), только на Х86_32 (другие архитектуры не рассматриваю).
Моя система (на всякий случай): Fedora 13, kernel-2.6.34, процессоры Pentium 4 и Core 2 Duo.
UPD: На данный момент данный флаг не определяется (я не имею ввиду, что он и у вас не будет определяться при такой же конфигурации системы) на следующих системах (x86_32):
Fedora 13, 2.6.34 (стандартное), Core2Duo T7100
Fedora 13, 2.6.34 (стандартное), PIV
Fedora 14, 2.6.35 (стандартное), Core2Duo e8200
Fedora 14, 2.6.35 (стандартное), Core2Duo T5250
Ubuntu 10.04, 2.6.32 (стандартное), Core2Duo T5850
Fedora 13, 2.6.34 (стандартное), PIV
Fedora 14, 2.6.35 (стандартное), Core2Duo e8200
Fedora 14, 2.6.35 (стандартное), Core2Duo T5250
Ubuntu 10.04, 2.6.32 (стандартное), Core2Duo T5850
Работает:
Fedora 13, 2.6.34 (стандартное), Core2Duo T7800
Debian, 2.6.32 (стандартное), PIV
Debian, 2.6.32 (стандартное), PIV