LINUX.ORG.RU
ФорумGames

NTSYNC для Wine включен в ядро Linux kernel 6.14

 ntsync, ,


0

2

В предстоящее ядро (6.14) интегрировали NTSYNC. Это драйвер обеспечивает большую совместимость игр запущенных через Wine, чем уже существующие Esync и Fsync.

https://www.gamingonlinux.com/2025/01/ntsync-for-proton-wine-now-in-linux-kernel-6-14-that-should-make-many-steamos-users-happy/

★★★★★
Ответ на: комментарий от cobold

Кто-то из местных тестил?

Тестил с последней версией модуля ядра и самыми свежими патчами к wine. Вроде все работает.

Какой профит?

В игры под wine я не играю, так что единственное что обнаружил, это при старте пишет:

wine: using fast synchronization.
Другие профиты не обнаружены, все работает как прежде.

arax ★★
()
Ответ на: комментарий от arax

Хотя нет, что то я вчера криво протестировал.
Вот на этом примере:

#include <Windows.h>
#include <thread>
#include <thread>
#include <vector>
#include <iostream>
#include <iomanip>

const int g_cRepeatCount = 100000;
const int g_cThreadCount = 16;

double g_shmem = 8;

HANDLE g_hMutex;

void threadFuncMutex() {
    for (int i = 0; i < g_cRepeatCount; ++i) {
        WaitForSingleObject(g_hMutex, INFINITE);
        if (i % 2 == 0)
            g_shmem = sqrt(g_shmem);
        else
            g_shmem *= g_shmem;
        ReleaseMutex(g_hMutex);
    }
}

void testRound(int threadCount)
{
    std::vector<std::thread> threads;

    auto startMutex = std::chrono::high_resolution_clock::now();
    for (int i = 0; i < threadCount; ++i)
        threads.push_back(std::thread(threadFuncMutex));
    for (std::thread& thd : threads)
        thd.join();
    auto endMutex = std::chrono::high_resolution_clock::now();
    std::cout << "WaitForSingleObject/ReleaseMutex: " << std::setw(10) << std::chrono::duration_cast<std::chrono::microseconds>(endMutex - startMutex).count() / 1000 << " ms" << std::endl;
}

int main() {
    g_hMutex = CreateMutex(NULL, false, NULL);

    std::cout << "Iterations: " << g_cRepeatCount << std::endl;

    for (int i = 1; i <= g_cThreadCount; i = i * 2) {
        std::cout << "Thread count: " << i << std::endl;
        testRound(i);
        Sleep(1000);
    }

    if(g_hMutex)
        CloseHandle(g_hMutex);

    std::cout << "Shared variable value: " << g_shmem << std::endl;

    return 0;
}

Разница очевидна: https://0x0.st/88Tv.png

arax ★★
()
Ответ на: комментарий от arax

А вот интересно. Ранее (несколько лет назад) были всякие тесты игр где крутые игры работали также как в винде и даже чуть лучше. И что теперь? Они заработают в 5 раз быстрее?

mx__ ★★★★★
() автор топика
Ответ на: комментарий от mx__

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

anonymous
()
Ответ на: комментарий от mx__

С одной стороны те же mutex теперь работают быстрее чем в винде: https://0x0.st/88AM.png
Но я сомневаюсь, что это древнее winapi широко используется в современном коде.
Плюс пример кода который я привел, это абсолютно вырожденная ситуация, где происходит изнасилование mutex.

arax ★★
()
Ответ на: комментарий от arax

Ну вот и разрабы Wine подтянулись: https://www.phoronix.com/news/Wine-NTSYNC-Merge-Request

Через некоторое время wine засунут в ядро и будут как бы в нативе запускать виндовые проги прям из коробки …

… А потом подтянутся юристы из МС и прикроют эту лавочку.

mx__ ★★★★★
() автор топика