Commit Graph

256 Commits

Author SHA1 Message Date
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
99e8c68c62 [*] Update a Win8+ sync branch; can back out earlier 2023-07-05 19:32:01 +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
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
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
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
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
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
f842573352 [*] copy/pasted function parity 2023-05-08 15:21:15 +01:00
08f790c3af [*] Update fenceless notes in AuMutex.NT.cpp 2023-05-08 14:46:20 +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
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
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
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
02684d543e [*] New NT mutex should carry the fail under this unlikely path 2023-03-16 17:33:29 +00:00
2863d2c910 [*] pls do a zoomie 2023-03-15 17:54:59 +00:00
b4b7e4a083 [*] Repressing these vtables helps us get our time to wake down 2023-03-15 16:53:43 +00:00
89057139b3 [*] Further work on the legacy NT primitives
(can still be improved, optimized, and bug fixed)
(will add a build toggle between the old SRW and this)
(...and ironically it seems like our time to wake times are worse now)
2023-03-15 16:13:09 +00:00
0ad854284e [*] NT Condvar: Clean up 2023-03-15 08:43:46 +00:00
49bfecee32 [*] i need sleep and i broke the core primitives 2023-03-15 08:30:21 +00:00
f354a202ad [*] i forgot to remove this member and we took a massive sizeof hit for it 2023-03-15 03:23:17 +00:00
f24a1c1924 [*] im not even going to switch to a cross arch to assume this isnt going to compile
(actually it looked even worse under compiler explorer. this patch is much better)
2023-03-15 03:12:10 +00:00
e88718a48b [*] Windows 7 optimization [?] 2023-03-15 02:38:26 +00:00
2fc4564f5d [*] Amend legacy primitive 2023-03-15 01:03:42 +00:00
13028d767b [*] Cleanup optimization commit 2023-03-15 00:48:37 +00:00
046b70d7bc [*] [Pre-Win8.1] Optimize for modern nt instead of windows vista synch in legacy path; yes, this is how windows 7 and vista synch is somewhat implemented.
...on apis that predate those kernel revisions. so, technically this might be able to run on xp.
[*] GetThreadCookie optimization for all platforms
2023-03-15 00:35:29 +00:00
14c7d538e1 [*] Fix up modern WakeOnAddress fast path, of, well, WakeOnAddress
[*] Clean up AuEvent
[*] Dropped default spin power
2023-03-13 23:57:32 +00:00
1ba0519d8d [*] Amended UNIX yield paths 2023-03-12 20:59:03 +00:00
e82ec4a343 [+] IWaitable::LockNS(...)
[+] AuThreading.WakeAllOnAddress
[+] AuThreading.WakeOnAddress
[+] AuThreading.WakeNOnAddress
[+] AuThreading.TryWaitOnAddress
[+] AuThreading.WaitOnAddress
[*] Further optimize synch primitives
[+] AuThreadPrimitives::RWRenterableLock
2023-03-12 15:27:28 +00:00
88b0270435 [+] Broke out NT LoadLibrarys to a dedicated root AuProcAddesses.[NT.]hpp 2023-02-16 16:01:21 +00:00
7d46679969 [*] Fix RWLock regression in previous commit: (8ff81df1)
...despite being under lock for lock paths, we now need everything to be atomic.
[*] ...fixed monotonic timeouts under rwlock
2023-01-30 16:48:40 +00:00
8ff81df129 [*] Fix deadlock involving WaitFor under ThreadPool (shutdown race)
[*] Optimize mutex lock out of RWLockImpl::TryLockWrite
[*] Force all relevant members of RWLockImpl to be volatile just bc lol (afaik we cant justify it yet; however, i want to minimalize the risk of future issues in this type)
2023-01-30 14:35:48 +00:00
51a2816f3f [*] Merge GTK JS's branch fix for async shutdown
[+] IConditionMutex::TryLock()
... Timed is still too much of an ask for this interface, i think. There's a good reason as to why this isn't a iwaitable. This condvar interface must be as common and primitive as possible.
2023-01-30 13:26:17 +00:00
fbca5f22c5 Regression in: d1451142 2022-12-29 21:02:58 +00:00
0cdbc34c06 [*] Optimize allocations out of RWLock
[*] Fix linux regression
2022-12-29 09:42:02 +00:00
d14511429a [*] Optimize event primitive 2022-12-29 00:02:56 +00:00
2209aeb7a8 [+] Linux: semaphores and mutexes directly over futexes. Move UNIX pthread condvar mutex into the condvar mutex class.
[*] BSD: Rewrote fundamentally flawed pthread_mutex class code to use MONOTONIC clock time
[+] Linus SwInfo: Added enterprise check for RedHat
2022-12-28 23:44:45 +00:00
dbbcd14b57 [*] Optimize for Win8.1 scheduler that can bypass SRW CVs
[*] Update readme
2022-12-28 10:50:30 +00:00
766be57a46 [+] Linux build [again]
[+] ProcessSectionViewReserved.Unix.cpp
[*] Fix missing ::Flush() member on ViewWriter
2022-12-16 00:41:01 +00:00
267c2216b0 [+] UDP over socket API via existing INetSrvDatagram layer
(...missing send)
[+] AuIO::Buffer::ViewReader
[+] AuIO::Buffer::ViewSeekableReadable
[+] AuIO::Buffer::ViewWriter
[*] Clean up AuCompression
[*[ AuLog messages must always crunch for memory
[*] Various bug fixes
[*] Refactor+clean up
2022-12-12 23:50:05 +00:00
7be2d3fbdc [+] AuUtility::ThroughputCalculator
[+] AuNet::ISocketStats
[+] AuNet::ISocketChannel::GetRecvStats()
[+] AuNet::ISocketChannel::GetSendStats()
[+] AuIO::IOProcessor::RunTickEx(AuUInt32 dwTimeout)
[*] Refactor clock APIs
[+] Documentation in headers
[+] AuIO::IIOPipeWork::GetStartTickMS()
[+] AuIO::IIOPipeWork::GetLastTickMS()
[+] AuIO::IIOPipeWork::GetPredictedThroughput()
[+] AuIO::IIOPipeWork::GetBytesProcessed()
2022-12-06 22:58:15 +00:00
72dc0d715e [*] Begin enforcing steady time
[+] IOProcessor::WakeupThread
[+] NT: Begin hacking in timeBeginPeriod (must spam it in some places)
[+] ConsoleTTY (more specifically the win32 calls) are too slow to run on the mainthread. Delegate to worker.
[*] AuTime.CurrentClockSteady
[*] AuTime.CurrentClockSteadyMS
[*] AuTime.CurrentClockSteadyNS
2022-11-28 16:01:08 +00:00
f86665fd36 [+] Net: TCP servers can now be multi-threaded
[+] Net: Added missing UDP send datagram
[*] IO bug fixes
2022-11-17 20:58:48 +00:00
898c0ced37 [*] Refactoring in progress... 2022-11-17 08:03:20 +00:00
673872f632 [*] Fix critical bug in rwlock (few commits ago. still havent updated submodules so its ok)
[*] IAsyncTransaction::uStartOffset should be u64
2022-11-09 00:33:14 +00:00
d63571e4b5 [+] AuCompression::CompressionInterceptor
[+] AuCrypto::CBC::CBCContext
[+] AuFS::ReadDirRecursive
[+] AuFS::DirDeleter
[+] AuCrypto::PBKDF2
[+] AuCrypto::AES::CBCEncrypt
[+] AuCrypto::AES::CBCDecrypt
[+] AuCrypto::TDES::CBCEncrypt
[+] AuCrypto::TDES::CBCDecrypt
[+] Optimize read write locks
[*] Added `ContextFlags = CONTEXT_ALL` to Win32 PlatformWalkCallStack
2022-11-06 13:23:22 +00:00
e30e004d04 [*] It'll complain but this shutsdown (with grug crying) relatively cleanly 2022-08-14 22:09:25 +01:00
0fe4ad2087 [*] Wouldn't it be cool if Linux could safely exit under other conditions without core dumping? 2022-08-14 12:01:54 +01:00
64cb7404ba [+] Near 1:1 Linux IPC Pipe compared to the NT equivalent (~= CreateNamedPipeA(nMaxInstances=1, dwOpenMode=PIPE_ACCESS_DUPLEX, dwPipeMode=PIPE_TYPE_BYTE))
[+] Ability to bypass blocking limitation of certain io_submit reads, if the blocking subsystem is a pollable stream (ie: a pipe).
[*] Fixed major Linux bug where LoopQueue items weren't being submitted, if no dequeues were in the same tick
[*] Fix various Linux pipe related bugs
[*] Fix futex bug where the callback was nulled on server-release
2022-08-09 07:48:29 +01:00
d47aeda082 [+] EConanonicalInput::eTab
[+] if ^::eString, [+] ...isControlSequence, isAltSequence, isShiftSequence
[*] Update semaphore from class to struct types
[*] GetProfileDomain and frens should check the result string length before returning true
2022-06-16 02:29:55 +01:00
48e1ed80ae [*] Further malding 2022-06-02 18:05:38 +01:00
a5757c31e0 [*] Cheeky AuThreadPrimitives refactor 2022-06-01 22:49:38 +01:00
0a6e1adfbf [*] Update UNIX mutex primitive 2022-04-13 16:06:26 +01:00
9eecdcb0a9 [*] Update UNIX high speed thread primitives to better account for interrupts 2022-04-13 15:42:36 +01:00
fb287e6128 [*] Always reset the sigaction mask (sigemptyset) 2022-04-07 05:41:16 +01:00
d81d4564e9 [+] Initial Linux exit signal handler
[*] Linux Semaphore bug (apparently I can't write loops)
[*] Linux sleep bug
2022-04-07 05:35:17 +01:00
e7f6f79471 [+] RWLock::DowngradeWriteToRead 2022-03-30 12:32:03 +01:00
ba8602744b [+] Interim and incomplete Unix/Linux buildability 2022-03-22 05:10:40 +00:00
2c55b722d6 [+] AuAtomicTestAndSet 2022-02-19 13:21:34 +00:00
be7e9271e6 [+] Added casts for pointer types
[*] Nuke more std:: references
2022-02-19 11:43:57 +00:00
9aa5d9f434 [*] Add missing reentrantWriteLockHandle in rwlock upgrade 2022-02-19 10:25:58 +00:00
86ea34c7b1 [*] i think the spinlock was incomplete. not sure how to tune this yet 2022-02-19 06:36:50 +00:00
749b8deb8d [*] Updated bit utilities
[*] Updated default string type
[*] Spinlocks can now timeout
[*] Finish RW lock write entrant mode
2022-02-18 17:50:33 +00:00
fac6571504 [*] Fix bugs in Mutex.NT.cpp 2022-02-18 12:04:10 +00:00
cf70f0d45c [*/+/-] MEGA COMMIT. ~2 weeks compressed.
The intention is to quickly improve and add util apis, enhance functionality given current demands, go back to the build pipeline, finish that, publish runtime tests, and then use what we have to go back to to linux support with a more stable api.

[+] AuMakeSharedArray
[+] Technet ArgvQuote
[+] Grug subsystem (UNIX signal thread async safe ipc + telemetry flusher + log flusher.)
[+] auEndianness -> Endian swap utils
[+] AuGet<N>(...)
[*] AUE_DEFINE conversion for
        ECompresionType, EAnsiColor, EHashType, EStreamError, EHexDump
[+] ConsoleMessage ByteBuffer serialization
[+] CmdLine subsystem for parsing command line arguments and simple switch/flag checks
[*] Split logger from console subsystem
[+] StartupParameters -> A part of a clean up effort under Process
[*] Refactor SysErrors header + get caller hack
[+] Atomic APIs
[+] popcnt
[+] Ring Buffer sink
[+] Added more standard errors
        Catch,
        Submission,
        LockError,
        NoAccess,
        ResourceMissing,
        ResourceLocked,
        MalformedData,
        InSandboxContext,
        ParseError

[+] Added ErrorCategorySet, ErrorCategoryClear, GetStackTrace
[+] IExitSubscriber, ETriggerLevel
[*] Write bias the high performance RWLockImpl read-lock operation operation
[+] ExitHandlerAdd/ExitHandlerRemove (exit subsystem)
[*] Updated API style
        Digests
[+] CpuId::CpuBitCount
[+] GetUserProgramsFolder
[+] GetPackagePath
[*] Split IStreamReader with an inl file
[*] BlobWriter/BlobReader/BlobArbitraryReader can now take shared pointers to bytebuffers. default constructor allocates a new scalable bytebuffer
[+] ICharacterProvider
[+] ICharacterProviderEx
[+] IBufferedCharacterConsumer
[+] ProviderFromSharedString
[+] ProviderFromString
[+] BufferConsumerFromProvider
[*] Parse Subsystem uses character io bufferer
[*] Rewritten NT's high perf semaphore to use userland SRW/ConVars [like mutex, based on generic semaphore]
[+] ByteBuffer::ResetReadPointer
[*] Bug fix bytebuffer base not reset on free and some scaling issues
[+] ProcessMap -> Added kSectionNameStack, kSectionNameFile, kSectionNameHeap for Section
[*] ProcessMap -> Refactor Segment to Section. I was stupid for keeping a type conflict hack API facing
[+] Added 64 *byte* fast RNG seeds
[+] File Advisorys/File Lock Awareness
[+] Added extended IAuroraThread from OS identifier caches for debug purposes
[*] Tweaked how memory is reported on Windows. Better consistency of what values mean across functions.
[*] Broke AuroraUtils/Typedefs out into a separate library
[*] Update build script
[+] Put some more effort into adding detail to the readme before rewriting it, plus, added some media
[*] Improved public API documentation
[*] Bug fix `SetConsoleCtrlHandler`
[+] Locale TimeDateToFileNameISO8601
[+] Console config stdOutShortTime
[*] Begin using internal UTF8/16 decoders when platform support isnt available (instead of stl)
[*] Bug fixes in decoders
[*] Major bug fix, AuMax
[+] RateLimiter
[+] Binary file sink
[+] Log directory sink
[*] Data header usability (more operators)
[+] AuRemoveRange
[+] AuRemove
[+] AuTryRemove
[+] AuTryRemoveRange
[+] auCastUtils
[+] Finish NewLSWin32Source
[+] AuTryFindByTupleN, AuTryRemoveByTupleN
[+] Separated AuRead/Write types, now in auTypeUtils
[+] Added GetPosition/SetPosition to FileWriter
[*] Fix stupid AuMin in place of AuMax in SpawnThread.Unix.Cpp
[*] Refactored Arbitrary readers to SeekingReaders (as in, they could be atomic and/or parallelized, and accept an arbitrary position as a work parameter -> not Seekable, as in, you can simply set the position)
[*] Hack back in the sched deinit
[+] File AIO loop source interop
[+] Begin to prototype a LoopQueue object I had in mind for NT, untested btw
[+] Stub code for networking
[+] Compression BaseStream/IngestableStreamBase
[*] Major: read/write locks now support write-entrant read routines.
[*] Compression subsystem now uses the MemoryView concept
[*] Rewrite the base stream compressions, made them less broken
[*] Update hashing api
[*] WriterTryGoForward and ReaderTryGoForward now revert to the previous relative index instead of panicing
[+] Added new AuByteBuffer apis
    Trim, Pad, WriteFrom, WriteString, [TODO: ReadString]
[+] Added ByteBufferPushReadState
[+] Added ByteBufferPushWriteState
[*] Move from USC-16 to full UTF-16. Win32 can handle full UTF-16.
[*] ELogLevel is now an Aurora enum
[+] Raised arbitrary limit in header to 255, the max filter buffer
[+] Explicit GZip support
[+] Explicit Zip support
[+] Added [some] compressors

et al
2022-02-17 00:11:40 +00:00
d7c6d66fad [+] AuBitsToLower, AuBitsToHigher (returns half of an input word)
[+] AuPopCnt
[+] NormalizePath, GetFileFromPath, GetDirectoryFromPath, GoUpToSeparator
[*] Fix Version Helpers again
[*] Fix registry locale memory check under read registry in SWInfo
[*] Breakout portable process code away from evil win32 code
[*] .dynlib -> .dylib under macos
2022-01-27 05:52:45 +00:00
b8fde0bdf0 [*] Refactor and clean up exception and threading API
[-] Deprecated abstract vectors struct
2021-10-24 11:19:47 +01:00
f559897b42 [+] Added WorkerId_t structure
[-] Removed WorkerId_t typedef
[*] Added shared support to some older threading apis that have yet to be updated
2021-10-08 20:51:34 +01:00
6c0907fe9e [*] Unix should use absolute timeouts d'oh 2021-10-03 13:43:37 +01:00
97d6c96712 [*] Succesfully built on Linux for the first time in a very long time 2021-10-02 17:07:33 +01:00
caa983ecad [*] Major change in include convention 2021-09-30 15:57:41 +01:00
02dc2d59cf Patch 1.5/2 2021-09-06 14:08:37 +01:00
ffe4bc31fc Major patch [1/2] 2021-09-06 11:58:08 +01:00
452b49b610 [+] Begin work on the Async subsystem 2021-06-30 10:28:52 +01:00
337062b490 Update headers, untabify. I guess the vs extension killed itself 2021-06-27 22:33:58 +01:00
eb4a495199 Initial Commit 2021-06-27 22:25:29 +01:00