История изменений
Исправление Stanson, (текущая версия) :
Какая просадка производительности по сравнению с чистым 32 бит вайном?
Да почти никакая. Там, наконец, сделали свои тупые прослоечки между wine и ядром, которые просто адреса на 64-битные меняют для syscall’ов. Тупо копированием входящего 32-битного адреса в 64-битную локальную переменную. В самом худшем случае, например для ioctl которому скармливается структура в которой есть поля с адресами, на стеке создаётся 64-бит версия структуры куда копируются данные и адреса из 32-битной версии. Очень простая штука и накладные расходы ниачом. Никакие огромные буферы данных юзерспейса не аллоцируются и не копируются при этом.
Недавно свой libusb-wine портировал на новый wine, так что пришлось досконально разобраться как оно устроено - очень просто всё и просадка вообще никак не заметна. Непонятно почему это давным-давно не сделали, ещё во времена массового перехода на 64-битный линукс.
Исправление Stanson, :
Какая просадка производительности по сравнению с чистым 32 бит вайном?
Да почти никакая. Там, наконец, сделали свои тупые прослоечки между wine и ядром, которые просто адреса на 64-битные меняют для syscall’ов. Тупо копированием 32-битного адреса в 64-битную локальную переменную. В самом худшем случае, например для ioctl которому скармливается структура в которой есть поля с адресами, на стеке создаётся 64-бит версия структуры куда копируются данные и адреса из 32-битной версии. Очень простая штука и накладные расходы ниачом. Никакие огромные буферы данных юзерспейса не аллоцируются и не копируются при этом.
Недавно свой libusb-wine портировал на новый wine, так что пришлось досконально разобраться как оно устроено - очень просто всё и просадка вообще никак не заметна. Непонятно почему это давным-давно не сделали, ещё во времена массового перехода на 64-битный линукс.
Исходная версия Stanson, :
Какая просадка производительности по сравнению с чистым 32 бит вайном?
Да почти никакая. Там, наконец, сделали свои тупые прослоечки между wine и ядром, которые просто адреса на 64-битные меняют для syscall’ов. Тупо копированием 32-битного адреса в 64-битный. В самом худшем случае, например для ioctl которому скармливается структура в которой есть поля с адресами, на стеке создаётся 64-бит версия структуры куда копируются данные и адреса из 32-битной версии. Очень простая штука и накладные расходы ниачом. Никакие огромные буферы данных юзерспейса не аллоцируются и не копируются при этом.
Недавно свой libusb-wine портировал на новый wine, так что пришлось досконально разобраться как оно устроено - очень просто всё и просадка вообще никак не заметна. Непонятно почему это давным-давно не сделали, ещё во времена массового перехода на 64-битный линукс.