WineHQ
Wine Forums

Board index » WineHQ » Wine Help




 Page 1 of 1 [ 6 posts ] 



 
Author Message
 Post Posted: Fri Apr 19, 2019 8:58 am 
Offline
Level 1
Level 1

Joined: Sat Jun 23, 2018 3:28 pm
Posts: 5
Hey I tested cpuz benchmark and also cinebench with different windows OS versions win 10, win server with wine
but I'm always stuck at 64 threads.
Is there something I can do to remove this limitation?
recompile something, .... NUMA ???
anything.

I have a Supermicro X11DPH-T
2x Xeon 8160 with 24 Core / 48 Threads (96Threads together)
Thanks for any hints


Top 
 Post Posted: Sun Apr 21, 2019 9:37 am 
Offline
Level 12
Level 12
User avatar

Joined: Sat Oct 16, 2010 7:40 pm
Posts: 2628
Location: Cambridge
@pyblackout

I'm not familiar with any hard limits, that Wine imposes, on thread counts...
But I gather 64-bit Windows should support 256...

Perhaps a debug log of ntdll would elicit some useful info...
What's the output with:
Code:
export WINEDEBUG=+tid,+ntdll
wine ...

Looking specifically at the internal functions:
void fill_cpu_info()
ULONG WINAPI NtGetCurrentProcessorNumber().

Also running wineserver, via strace:
Code:
strace wineserver -f

might pick up a thread creation limit??

If we get stuck, I can always ping a Wine Developer (or two) for further help! 8)

I presume NUMA isn't an issue - if you can bust through the (single-core) thread limit of 48...
But that would be an obvious issue. I know Wine takes some shortcuts with NUMA support, looking at the source code:
Code:
/**********************************************************************
 *           GetNumaHighestNodeNumber     (KERNEL32.@)
 */
BOOL WINAPI GetNumaHighestNodeNumber(PULONG highestnode)
{
    *highestnode = 0;
    FIXME("(%p): semi-stub\n", highestnode);
    return TRUE;
}

/**********************************************************************
 *           GetNumaNodeProcessorMask     (KERNEL32.@)
 */
BOOL WINAPI GetNumaNodeProcessorMask(UCHAR node, PULONGLONG mask)
{
    FIXME("(%c %p): stub\n", node, mask);
    SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
    return FALSE;
}

/**********************************************************************
 *           GetNumaNodeProcessorMaskEx     (KERNEL32.@)
 */
BOOL WINAPI GetNumaNodeProcessorMaskEx(USHORT node, PGROUP_AFFINITY mask)
{
    FIXME("(%hu %p): stub\n", node, mask);
    SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
    return FALSE;
}


You'd want to 'pastebin' (obviously alternatives are available!) the terminal logs.

Bob


Top 
 Post Posted: Tue Apr 23, 2019 12:27 pm 
Offline
Level 1
Level 1

Joined: Sat Jun 23, 2018 3:28 pm
Posts: 5
Hey Thank you so much

first I did winedebug as mentioned

and found following line


Code:
002a:fixme:ntdll:create_logical_proc_info Improve CPU info reporting: system supports 96 logical cores, but only 64 supported!


So I digged deeper and found

https://github.com/wine-mirror/wine/blob/master/dlls/ntdll/nt.c#L1687

It's freaky that there are over 22500 "FIXME" in the wine project :)

I don't know if I have that much time to work it out, but if someone is here who is involved I would be pleased.
Or at least if someone would tell me what to do and what I have to take in mind.


Top 
 Post Posted: Tue Apr 23, 2019 1:28 pm 
Offline
Level 12
Level 12
User avatar

Joined: Sat Oct 16, 2010 7:40 pm
Posts: 2628
Location: Cambridge
@pyblackout

Nice catch! 8)

OK so it is a NUMA issue..

Arising from: SetThreadAffinityMask function()
To quote MSDN:
Quote:
On a system with more than 64 processors, the affinity mask must specify processors in the thread's current processor group.


The obvious first solution would be (if possible) to split your workload into two.
Running a wineserver instance on each NUMA node.

Otherwise...
My cursory look at the Wine Source, would imply that a fair bit of refactoring would be required... :cry:

Bob


Top 
 Post Posted: Wed Apr 24, 2019 2:58 pm 
Offline
Level 12
Level 12
User avatar

Joined: Sat Oct 16, 2010 7:40 pm
Posts: 2628
Location: Cambridge
Link to OP's bug report: Bug 47068 - fixme:ntdll:create_logical_proc_info Only 64 Threads are usable


Top 
 Post Posted: Fri Apr 26, 2019 1:12 pm 
Offline
Level 12
Level 12
User avatar

Joined: Sat Oct 16, 2010 7:40 pm
Posts: 2628
Location: Cambridge
@pyblackout

Not to deter you from your mission to fix Wine's processor groups... But... :wink:
Surely if you try to address 48 cores using a single WINEPREFIX.
Then the resulting single-threaded wineserver process is surely going to cause one huge bottleneck!
The cross-NUMA wineserver communication will surely reduce your core scaling enormously.

I can't see any way around that issue...
Although the eventfd_synchronization patchset in Wine Staging might help a bit.

Just my personal $0.02 as always... 8)

Bob


Top 
Display posts from previous:  Sort by  
 
 Page 1 of 1 [ 6 posts ] 




Board index » WineHQ » Wine Help


Who is online

Users browsing this forum: Bing [Bot], Google [Bot] and 14 guests

 
 

 
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to: