Commit Graph

358 Commits

Author SHA1 Message Date
3503d0ec68 [+] Added Linux signal configuration and separate LinuxConfig type (LinuxConfig)
[*] Fix Linux regressions in previous NT commit
2023-08-29 03:11:28 +01:00
fef6eac859 [*] More Linux tweaks 2023-08-28 19:13:18 +01:00
0d759f85f8 [*] Linux/Clang fixerinos/improvements 2023-08-28 16:35:32 +01:00
55c02d4aa0 [*] Tweak default thread config
[*] Fix regressions
2023-08-28 11:48:13 +01:00
b2e1df8f72 [*] Annoying Linux checks 2023-08-27 21:35:40 +01:00
97296d1fe9 [*] ThreadingConfig::bPreferEnableAdaptiveSpin 2023-08-27 20:26:36 +01:00
8fe2619673 [*] Rework SMT yielding 2023-08-27 19:56:22 +01:00
5cf7533eab [*] Linux and UNIX QOL 2023-08-27 12:42:10 +01:00
3e5aa1aff0 [*] Simplified lines of code: shared pointer init 2023-08-26 19:02:14 +01:00
7680a86d5a [*] ...same applies to these 2023-08-26 18:46:00 +01:00
610f2c73a0 [*] Optimize >4 thread wakeups on <= Win7, under Semaphore 2023-08-26 18:08:33 +01:00
346a9f3bde [*] More aggressively wake up reorder prone (unlikely) condvars under broadcast (unlikely) 2023-08-26 15:56:59 +01:00
3ca8de022e [*] Fix issues related to inconstent retardation in the asinine freetard world
GNU and its consequences have been a disaster for the human race
2023-08-26 15:04:48 +01:00
4a73f7250f [*] Another uniproc test 2023-08-25 12:42:31 +01:00
337df8040c [*] Move uniprocessor check 2023-08-24 15:12:49 +01:00
100964ac87 [*] NT Semaphore optimization 2023-08-24 13:55:31 +01:00
935d1b6ab2 [*] RWLock: added another SignalManyWriter condition to ensure upgrades never get missed 2023-08-24 11:45:15 +01:00
1ecd46ddbf [*] Ad-hoc system thread signals 2023-08-24 10:43:33 +01:00
937f123dad [*] RWLock: Futex waiter path: force read semantics 2023-08-24 10:20:43 +01:00
49ced3fcc6 [*] Always attach to the main thread context on init 2023-08-24 10:17:53 +01:00
31319981ba [*] Two trivial Linux tweaks 2023-08-23 23:45:26 +01:00
3898a41198 [*] Adopt new ROXTL atomics
...AuAtomicLoad + AuAtomicClearU8Lock
2023-08-23 22:03:00 +01:00
293a8ddd66 [*] Simplify when to call _beginthreadex (we probably shouldn't) 2023-08-23 19:11:21 +01:00
61eaa701b7 [*] MSVC compilation regression
(theres no way in fuck vista or xp will run with >= 32 threads. hell, you can barely expect the acpi and boot video drivers to work.)
2023-08-23 19:05:32 +01:00
10e95fb5ae [*] Begin reworking Linux/POSIX PRIOs 2023-08-23 18:17:15 +01:00
9c04b31da3 [*] Don't warn on XP/Vista 2023-08-23 17:09:19 +01:00
921fee1b8d [+] IAuroraThread::SetNoUnwindTerminateExitWatchDogTimeoutInMS 2023-08-23 17:01:56 +01:00
412630077d [+] ThreadingConfig::bPreferWaitOnAddressAlwaysSpin 2023-08-23 16:45:08 +01:00
524365b5da [*] Handhold non-MSVC compilers 2023-08-23 16:38:22 +01:00
0c5d140bd4 [*] Autoset bPlatformIsSMPProcessorOptimized to false on singlethreaded systems 2023-08-23 16:03:22 +01:00
d79cb4f3ca [*] RWLock: WakeOnAddress optimization on wait to prevent mutex congestion on modern OSes 2023-08-23 15:37:55 +01:00
a4d317a48d [*] Reoptimize semaphore wait paths 2023-08-22 15:28:09 +01:00
7ad725ca04 [+] Global adaptive spin 2023-08-22 13:01:06 +01:00
ccfd0fafab [*] Why must all languages be garbage at expressing life-span of constness?
This is const-correct, as in, we don't expect to modify the pointer; you dont need to be a writer
This was const-correct, as in, this field better be a volatile block of memory you expect to update - plz dont to any retarded assumptions based on it being "const," compiler.
2023-08-22 11:08:56 +01:00
3747fb7c6f [+] ThreadingConfig::uUWPNanosecondEmulationMaxYields
[+] ThreadingConfig::bUWPNanosecondEmulationCheckFirst
2023-08-22 09:56:32 +01:00
76ac770674 [*] Update a handful of condvar cas's and account for laziness along the way 2023-08-22 09:44:54 +01:00
cd362db7af [*] Deaf, dumb, and blind 2023-08-21 19:20:52 +01:00
fa170c413d [*] More compact Linux primitives 2023-08-21 19:17:05 +01:00
5cc811be19 [*] More compact Win32 primitives! 2023-08-21 17:34:24 +01:00
869512e651 [*] Optimization: Remove two stupid branches in RWLock 2023-08-21 16:33:32 +01:00
f847ab049a [+] ThreadingConfig::bPreferRWLockReadLockSpin 2023-08-21 16:25:51 +01:00
e1f384de2e [*] RWLock: improper upgrade handshake
The switch over to two condvars still doesnt seem right
2023-08-21 16:20:52 +01:00
681c4b9158 [*] RWLock: revert this branch to checking for 0 and 1 remaining readers
[*] Formatting
2023-08-21 16:08:30 +01:00
e2909ebe74 [*] RWLock: Upgrade UpgradeReadToWrite sleep path 2023-08-21 16:02:55 +01:00
68b4fe5f8b [*] RWLock: not implementing LockAbsMS and LockAbsNS can hurt the hotpath 2023-08-21 15:50:45 +01:00
d1b1bfb221 [*] Caught an issue with RWLock: cant reenter unlocked reentrance mutex. 2023-08-21 15:39:56 +01:00
a60a1b3088 [*] dont assume these condvar paths cant underflow 2023-08-21 00:25:29 +01:00
b8d4e02ab5 [+] Aurora::Threading::GetThreadingConfig
[+] Aurora::Threading::SetThreadingConfig
[*] Save a few bytes in Aurora::ThreadingConfig
2023-08-20 16:23:03 +01:00
08f30017b8 [*] regression: b236469d06 cont 2023-08-20 13:41:53 +01:00
71617ca66e [*] Format SMT spin 2023-08-20 09:50:41 +01:00
f1a08d25e7 [+] AuUInt32 GetTotalSpinCountTimeout()
[*] Fixup FutexWaitable
2023-08-20 09:47:31 +01:00
b236469d06 [*] Made WakeOnAddress trigger pointers always const 2023-08-19 20:37:24 +01:00
2fae266876 [*] Fix WakeOnAddress constness of the comparison argument 2023-08-19 19:48:24 +01:00
8874fd9810 [*] Cache Win8+ check 2023-08-19 18:49:16 +01:00
19224d2eed [*] Default back to zero. Do not throw off other threads if only used once 2023-08-19 18:39:13 +01:00
ab4971ef9c [+] Linux threading options 2023-08-19 18:33:54 +01:00
8bf6bdd963 [+] More threading options
[+] AuThreading::SetSpinCountTimeout
[+] AuThreading::SetThreadLocalAdditionalSpinCountTimeout
2023-08-19 18:16:48 +01:00
7fb8b89def [*] Some unwanted indirect branching is still bleeding in; mark more primitive classes as final 2023-08-19 11:41:37 +01:00
92ebafecab [*] Suppress a number of antisemitic clang warnings 2023-08-18 23:32:46 +01:00
4240966512 [*] Two trivial changes (not fixing or improving anything) 2023-08-18 15:53:38 +01:00
7dd6145dc1 [*] Always use unsigned integers under the semaphore classes 2023-08-18 15:26:31 +01:00
2a1556d80c [*] Optimize Linux semaphore 2023-08-17 23:06:02 +01:00
04956bedba [*] Shorten the expected overhead of some Linux primitives 2023-08-13 20:09:58 +01:00
6ec2fcc4b6 [*] Added timeout awareness in ConditionEx; returns false on timeout
[*] Updated Linux SOO sizes
2023-08-12 11:18:19 +01:00
7962772c62 [+] Added Linux-specific condvars and condmutex 2023-08-12 11:11:12 +01:00
737d3bb4d6 [+] AuProcAddresses.Linux.* 2023-08-12 10:16:20 +01:00
1f173a8799 [*] Begin resolving 8 months of Linux neglect 2023-08-11 16:51:42 +01:00
9a2e5674e8 [*] RWLock improvements 2023-07-30 11:23:40 +01:00
c889af13e5 [*] bNoThreadNames option wasnt respected 2023-07-30 10:00:54 +01:00
ceb5b2961e [+] FALLBACK_WAKEONADDRESS_SUPPORTS_NONEXACT_MATCHING
[+] ThreadingConfig::bPreferEmulatedWakeOnAddress
2023-07-30 09:52:41 +01:00
c306c12763 [*] Improve WakeOnAddress by hash binning by kDefaultWaitPerProcess instead the previous iteration before BST or HashTree lookup 2023-07-30 09:34:39 +01:00
5e94be7487 [*] ConditionEx::WaitForSignalRelativeNanoseconds -> WaitForSignalNS 2023-07-29 09:52:59 +01:00
b411c710d1 [+] IConditionVariable::WaitForSignalNS 2023-07-25 15:59:04 +01:00
76262c2e3e [*] Trivial Win8+ condvar broadcast improvement (pragmatism) 2023-07-25 15:28:02 +01:00
1a383f8157 [*] Two annoying formatting issues in RWLock 2023-07-25 12:57:47 +01:00
66cfbb5351 [+] FlexibleConditionVariable::WaitForSignalRelativeNanoseconds(AuUInt64 uRelativeNanoseconds)
[+] FlexibleConditionVariable::WaitForSignalRelativeNanoseconds(Threading::IWaitable *pWaitable, AuUInt64 uRelativeNanoseconds)
[+] FlexibleConditionVariable::WaitForSignalRelativeNanoseconds(AuUInt64 uRelativeNanoseconds)
[*] Refactor FlexibleConditionVariable
2023-07-25 12:38:49 +01:00
dab6e9caee [*] Refactor: FeaturefulCondition -> FlexibleConditionVariable
[+] SOO for FlexibleConditionVariable
2023-07-25 12:27:08 +01:00
daf6108902 [*] Removed retarded code inspired by late 90s - 2003 Microsoft Andy-IQ engineering
This was bothering my autism
2023-07-25 11:57:22 +01:00
b48966a39e [*] Caught uninitialized member 2023-07-25 02:12:19 +01:00
d45dc977d8 [*] NT: Further reduce Win32 link-time requirements cont (1948dd0c) 2023-07-24 12:48:42 +01:00
788dde684b [*] Windows Vista, UWP, and Windows 11: Move Windows 7 and 8 SetThreadGroupAffinity symbol from the IAT to AuProcAddresses.NT.[c/h]pps object
[*] Update the READMEs support table
2023-07-14 16:33:26 +01:00
8a4fc0d9c3 [*] Amend runtime config typo: Prefer*
[-] Redundant AuTime header (ExtendedTimer.hpp)
2023-07-13 19:50:18 +01:00
8bf351e007 [*] NT Win8+ fix: improper condvar wake up
[*] Fix kThreadIdAny regression
2023-07-11 00:54:54 +01:00
c90a13ad95 [*] Minor NT optimization: move branch 2023-07-10 20:06:18 +01:00
a977f0d1b5 [*] NT: backport unix optimization - no spin during spurious wake up 2023-07-10 13:12:17 +01:00
536522743a [*] Move this branch in NTs condvar 2023-07-10 12:31:06 +01:00
8c84ecf892 [*] Win8+: Experimental primitive improvements by taking notes from Win7 cycle pinching
[*] +regression in condvar
2023-07-10 01:13:55 +01:00
355f7db711 [*] Forgot to reintroduce these: 75b71275 (cont) 2023-07-09 22:34:31 +01:00
75b71275e7 [*] Made past and present NT condvar optional spin steps configurable via the runtime config 2023-07-09 20:52:31 +01:00
03dbfeefe1 [*] Enhance Windows 7 scheduling resolution 2023-07-09 12:56:35 +01:00
627bdddfdc [*] Ensure AuProcAddresses.NT.* is used for all dynamically linked symbols 2023-07-09 10:03:29 +01:00
94e2f7924e [-] More redundant code from WakeOnAddress 2023-07-06 09:47:46 +01:00
b90feae7d0 [-] Remove preemptive POSIX optimization
This'll just get in the way of Linux optimizations for the sake of trying to hit the correct yield period without a spurious wake up - all in one shot.
2023-07-06 09:41:09 +01:00
e2758ea243 [-] Remove unused code from WakeOnAddress 2023-07-06 09:37:58 +01:00
99e8c68c62 [*] Update a Win8+ sync branch; can back out earlier 2023-07-05 19:32:01 +01:00
e2accb900b [*] Begin work around for use after thread-local free; WaitOnAddress emulation 2023-07-05 18:25:07 +01:00
894df69fe0 [*] remove redundant branch from sync primitive
[*] optimize event
2023-06-28 02:24:53 +01:00
a454a2d71e [*] Sync primitive improvements
[*] Reverted a change for UNIX: always never-spin acquire under observational lock
[*] Decreased common case of syscall operations under Linux and UNIX
[*] Unix signaling: prevent waits while during condvar wake up by unlocking before the signal
[*] NT no wait: semaphores must not spin under lock
2023-06-26 08:59:49 +01:00
fa90463a73 [*] im not sure why this was written like this 2023-06-23 22:36:13 +01:00
0d05fd3d33 [*] Minor mostly unnoticeable primitive improvements 2023-06-23 21:37:04 +01:00
2d6dca4e21 [+] 32bit SOO sizes for sync primitives under x86_32/MSVC
[*] Optimize the write-biased reentrant read-write lock down to 88 bytes on MSVC x64
2023-06-17 17:08:58 +01:00
451b9025c0 [*] Fix major recent regressions
amend: 48075bfd
amend: 25b933aa
amend: f50067e6 (to be overwritten)
et al
2023-06-17 15:12:16 +01:00
48075bfda7 [*] cleanup: added gUseNativeWaitSemapahore 2023-06-16 00:06:32 +01:00
25b933aafa [*] Fixed regression in RWLock size without sacrificing on features
(TODO: I would like to WoA optimize it for modern oses at some point)
2023-06-16 00:02:42 +01:00
e11028bb03 [*] Timeout division: ensure this never deadlocks 2023-06-15 21:15:58 +01:00
74b813f051 [*] Bloat RWLock by adding a separate yield queue for writers (we were already writer biased)
This will help us reduce cpu usage and latency at the cost of 32 bytes.

We are now hopelessly oversized: 136 bytes for a single primitive. 104 was barely passble.
2023-06-15 20:54:19 +01:00
d389f9dda3 [*] Re-optimize the primitives for Windows 8+ on top of a Windows XP+ core 2023-06-15 20:52:28 +01:00
28201db2d7 [+] Improve WoA on Windows 8+
[+] AuThreading::WaitOnAddressSteady
2023-06-15 20:44:27 +01:00
17c50eff64 [*] fix old unix sync regressions
do not hold switching lock while spinning as originally written and intended
2023-06-13 12:05:55 +01:00
b91ce52195 [*] Not sure how WOA regressed 2023-06-12 19:35:54 +01:00
1a8acbdde5 [+] By-raw pointer WOA lists
(also they are now fairer)
[+] Steps towards future proofing NT (not the future proofing itself)
2023-06-12 18:31:44 +01:00
50413f36e5 [*] keyed events should yield indefinitely in their failure path
(amended one day later: removed one of the fixes. this is gonna apply to just one place for now)
2023-06-12 15:51:54 +01:00
123e34d224 [*] been meaning to remove this debug preemptive wake up for awhile 2023-06-11 21:35:47 +01:00
1bda1f469f [*] simplify wake on address emulation
Windows 7 reporting improved time to wake, but it is still averaging about the same... everything.
2023-06-11 19:13:37 +01:00
5b495f7fd9 [*] sched: minor clean up 2023-06-11 17:52:50 +01:00
50f25e147a [*] improve latency (i think - benchmark pending) 2023-06-07 11:45:14 +01:00
81b3550825 [+] AURT_ADD_USR_DATA usage across some relevant contexts 2023-06-04 17:28:29 +01:00
b423ce14b1 [*] change-up cond-vars mutual exclusivity locking 2023-05-31 05:34:36 +01:00
5cb56da924 [*] missed break [regression in 53df1ee8] 2023-05-31 05:21:05 +01:00
055b149e11 [*] remove verbose "!= 0" 2023-05-31 04:38:05 +01:00
f92a19621a [*] adjust undershooted ms scale sleeps to smt spin, then yield, in an effort to match nano-scale sleeps within 10s of kns 2023-05-30 13:12:53 +01:00
53df1ee81d [*] Work on AuConditionVariable.NT some more
[*] Fix high cpu regression in 6af9940b
2023-05-30 12:53:26 +01:00
9f59d4f921 [*] Fix TLS thread index out of bounds access 2023-05-09 14:21:55 +01:00
f842573352 [*] copy/pasted function parity 2023-05-08 15:21:15 +01:00
a2cfb7765b [*] i want every bit of performance i can squeeze out of old windows operating systems 2023-05-08 15:16:06 +01:00
08f790c3af [*] Update fenceless notes in AuMutex.NT.cpp 2023-05-08 14:46:20 +01:00
fca5b90b85 [*] adjust tls coefficients 2023-04-30 14:46:36 +01:00
7c1a1566fd [*] missing tls impersonation in bd94b73d 2023-04-30 09:05:14 +01:00
448d840e4c [*] missing free in bd94b73d 2023-04-30 09:02:13 +01:00
bd94b73dde [+] New TLSView implementation
[+] AuTLSVariable
2023-04-30 08:24:27 +01:00
36dee459ca [*] TryLockRead was unware of RWRenterableLocks specifications
(not an issue for regular blocking lock paths)
2023-04-24 19:39:36 +01:00
8dcf857da5 [*] updated comments 2023-04-23 19:39:54 +01:00
f74a41e286 [*] Refactor our thread primitives for an SOO change, where the SOO[_t]-suffix is no longer required, resulting a new type conflict issue 2023-04-23 19:25:37 +01:00
2a33d61e63 [*] further deprecate high res clock
[*] further posix resolution reporting
2023-04-22 22:58:20 +01:00
92af491fe8 [*] if (count == 1) * 2023-04-21 18:52:30 +01:00
0c494cb99a [*] another preemptive linux fix. i missed a step in calculating the mask (i didnt calculate the mask at all) 2023-04-16 23:58:27 +01:00
5d979bff6d [*] I dont think this path is really hit but still we shouldnt wake up after 4 seconds under here 2023-04-12 12:26:53 +01:00
abed78a15f [*] QtCore6 crash on Windows 7 2023-04-06 22:24:47 +01:00
6e7cee70e1 [*] added mandatory smt spin here 2023-04-05 09:42:48 +01:00
6c25b5a5e6 [*] atomicity bug fix: hold up this is bad 2023-04-03 10:13:29 +01:00
d755a9d651 [*] Massive perf boost by removing atomic and
[*] Refactor ambiguous IWaitable::Lock(timeoutMs) to LockMS to prevent final using collisions
2023-04-03 08:21:44 +01:00
39072499dd [*] remove dumb cas loops
[*] refactor
2023-04-01 09:53:00 +01:00
440b5877b2 [*] link errors 2023-03-22 16:59:21 +00:00
c22a13ec56 [*] preemptive linux fix [?] 2023-03-22 15:19:32 +00:00
8272959249 [*] Further compress 2023-03-22 13:42:07 +00:00
6974c713f7 [+] Allocationless thread primitives
[*] Rename SMPYield to SMTYield
2023-03-21 03:19:22 +00:00
5d8f4e6901 [*] Further optimize 2023-03-17 15:41:05 +00:00
a1f4614316 [*] i see a possible bug 2023-03-16 22:18:52 +00:00
1476307a60 [*] Force this optimization under nonship builds 2023-03-16 19:24:05 +00:00
e5981a5747 [*] Reintroduce the older implementation based on Vista sync primitives when best implementation under NT 5.1 apis isn't available (microsoft being cunts under the false guise of sandboxing xbox and uwp) 2023-03-16 18:25:23 +00:00