aboutsummaryrefslogtreecommitdiff
path: root/src/platform
Commit message (Collapse)AuthorAge
* Windows fixes; especially idempotent init/fini.Garrett D'Amore2017-08-11
| | | | | | | This fixes one major problem, which was that if nni_fini() was called once on Windows, it would not be further possible to call nni_init(). While here fixed a few compilation issues.
* Posix pollq fini is not properly idempotent.Garrett D'Amore2017-08-11
| | | | | This creates a use-after-free bug if nni_fini() is run, then new sockets are created.
* Thundering herd kills performance.Garrett D'Amore2017-08-10
| | | | | | | | | | | | | | A little benchmarking showed that we were encountering far too many wakeups, leading to severe performance degradation; we had a bunch of threads all sleeping on the same condition variable (taskqs) and this woke them all up, resulting in heavy mutex contention. Since we only need one of the threads to wake, and we don't care which one, let's just wake only one. This reduced RTT latency from about 240 us down to about 30 s. (1/8 of the former cost.) There's still a bunch of tuning to do; performance remains worse than we would like.
* Fix a few pointer vs. character errors found by gcc 7.Garrett D'Amore2017-08-07
|
* Fix warninsg about size types found in 64-bit windows build.Garrett D'Amore2017-08-05
|
* COnvert UDP to new style.Garrett D'Amore2017-08-04
|
* Refactor AIO logic to close numerous races and reduce complexity.Garrett D'Amore2017-08-04
| | | | | | | | | This passes valgrind 100% clean for both helgrind and deep leak checks. This represents a complete rethink of how the AIOs work, and much simpler synchronization; the provider API is a bit simpler to boot, as a number of failure modes have been simply eliminated. While here a few other minor bugs were squashed.
* Initial swag at UDP (POSIX only) low level handling.Garrett D'Amore2017-07-25
| | | | | | This includes async send and recv, driven from the poller. This will be requierd to support the underlying UDP and ZeroTier transports in the future. (ZeroTier is getting done first.)
* Update Capitar copyrights.Garrett D'Amore2017-07-21
|
* Simpler taskq API.Garrett D'Amore2017-07-21
| | | | | | | The queue is bound at initialization time of the task, and we call entries just tasks, so we don't have to pass around a taskq pointer across all the calls. Further, nni_task_dispatch is now guaranteed to succeed.
* Yet more race condition fixes.Garrett D'Amore2017-07-20
| | | | | | | | | We need to remember that protocol stops can run synchronously, and therefore we need to wait for the aio to complete. Further, we need to break apart shutting down aio activity from deallocation, as we need to shut down *all* async activity before deallocating *anything*. Noticed that we had a pipe race in the surveyor pattern too.
* Fixes most of the raaces in posix; but at least one remains outstanding.Garrett D'Amore2017-07-18
| | | | | | Apparently there are circumstances when a pipedesc may get orphaned form the pollq. This triggers an assertion failure when it occurs. I am still trying to understand how this can occur. Stay tuned.
* Sometimes providers don't clear the prov data details. (Backoff).Garrett D'Amore2017-07-18
|
* Fix close-related leak of pipes.Garrett D'Amore2017-07-18
| | | | | | | | | | | We have seen leaks of pipes causing test failures (e.g. the Windows IPC test) due to EADDRINUSE. This was caused by a case where we failed to pass the pipe up because the AIO had already been canceled, and we didn't realize that we had oprhaned the pipe. The fix is to add a return value to nni_aio_finish, and verify that we did finish properly, or if we did not then we must free the pipe ourself. (The zero return from nni_aio_finish indicates that it accepts ownership of resources passed via the aio.)
* Handle is INVALID_HANDLE_VALUE not NULLGarrett D'Amore2017-07-18
|
* Implemented asynchronous (fully) accept.Garrett D'Amore2017-07-14
| | | | | | This logic leaves a race condition in the dial side, which will be fixed with a subsequent change to convert that to fully asynchronous as well.
* Remove stale partial printf line causing syntax error.Garrett D'Amore2017-07-13
|
* Windows implmentation of TCP is "working now".Garrett D'Amore2017-07-13
| | | | | | This is only lightly tested, and I expect that there remain some race conditions. Endpoint logic in particular needs work.
* Attempts to minimize races, remove unused nni_sock_mtx function.Garrett D'Amore2017-07-12
| | | | | | We still have endpoint related races apparently; we need to examine the possibility of handling endpoints much like we do pipes, which seem to be race free.
* Fix likely close race in Windows ICP/IOCP code.Garrett D'Amore2017-07-12
| | | | | We are still seeing likely errors with pipes outliving their associated endpoints, so work is still needed here.
* Windows IPC working, mostly.Garrett D'Amore2017-07-11
| | | | | | | | | | | | | The IOCP code has been refactored to improve reuse, and hopefully will be easier to use with TCP now. Windows IPC using Named Pipes is mostly working -- mostly because there is a gnarly close-race. It seems that we need to take some more care to ensure that the pipe is not released while requests may be outstanding -- so some deeper synchronization between the IOCP callback logic and the win_event code is needed. In short, we need to add a condvar to the event, and notice when we have submitted work for async completion, and make sure we flag the event "idle" after either completion or cancellation of the event.
* Give up on uncrustify; switch to clang-format.Garrett D'Amore2017-07-10
|
* Windows IPC progress. Not working yet, but should be close.Garrett D'Amore2017-07-10
|
* Uncrustify.Garrett D'Amore2017-07-08
|
* Various cleanups of unused bits.Garrett D'Amore2017-07-08
|
* SRWLocks FTW!Garrett D'Amore2017-07-07
| | | | | | | | | Modern Windows (Vista and later) have light weight Slim Read/Write locks which only occupy 64 bits, and don't require any memory allocation to create. While here clean up a few more unreferenced variables found with the Microsoft compilers.
* Start of progress on Windows. Name resolution and IOCP work begins.Garrett D'Amore2017-07-07
|
* Clean up some unused variables.Garrett D'Amore2017-07-07
|
* TCP asynchronous working now.Garrett D'Amore2017-07-07
| | | | | | | | | | | | | | | | It turns out that I had to fix a number of subtle asynchronous handling bugs, but now TCP is fully asynchronous. We need to change the high-level dial and listen interfaces to be async as well. Some of the transport APIs have changed here, and I've elected to change what we expose to consumers as endpoints into seperate dialers and listeners. Under the hood they are the same, but it turns out that its helpful to know the intended use of the endpoint at initialization time. Scalability still occasionally hangs on Linux. Investigation pending.
* Fix lost event during poll.Garrett D'Amore2017-07-06
|
* Fixes for async resolver, plus a test suite for it.Garrett D'Amore2017-07-06
|
* Initial swag at asynchronous name resolution.Garrett D'Amore2017-07-06
|
* Make ipc work 100% async.Garrett D'Amore2017-07-05
| | | | | | | | | | | | | | | | | | The connect & accept logic for IPC is now fully asynchronous. This will serve as a straight-forward template for TCP. Note that the upper logic still uses a thread to run this "synchronously", but that will be able to be removed once the last transport (TCP) is made fully async. The unified ipcsock is also now separated, and we anticipate being able to remove the posix_sock.c logic shortly. Separating out the endpoint logic from the pipe logic helps makes things clearer, and may faciliate a day where endpoints have multiple addresses (for example with a connect() endpoint that uses a round-robin DNS list and tries to run the entire list in parallel, stopping with the first connection made.) The platform header got a little cleanup while we were here.
* Cleanup some unused things.Garrett D'Amore2017-07-05
|
* Remove obsolete poll.c.Garrett D'Amore2017-07-05
|
* epdesc functionality.Garrett D'Amore2017-07-05
|
* Separate out poller/pollq from basic socket operations.Garrett D'Amore2017-07-04
|
* Improved routines for list management.Garrett D'Amore2017-07-04
|
* All pipes are nonblocking.Garrett D'Amore2017-07-04
|
* Rename aio functions. Enhanced epdesc_finish.Garrett D'Amore2017-07-04
|
* IPC & TCP negotiation done using aio. Remove old sync send/recv.Garrett D'Amore2017-07-03
|
* Properly initialize eps during listen.Garrett D'Amore2017-06-30
|
* pipedesc_read/write -> pipedesc_send/recv.Garrett D'Amore2017-06-30
|
* More progress on POSIX async connect stuff.Garrett D'Amore2017-06-30
| | | | | | | | | Note that we're going to refactor this again, for both TCP and IPC, to actually push the endpoint abstraction further down instead of using a combined "socket" abstraction. This may help solve other problems, such as parallel outgoing connections. Nonetheless, most of the work to make POSIX sockets fully async is now done.
* IPC fixes: correct handling of path removal, and path absence.Garrett D'Amore2017-06-30
|
* Fixes for IPC: don't try to disable Nagle, and use SUN_LEN properly.Garrett D'Amore2017-06-29
|
* More plumbing for async connections.Garrett D'Amore2017-06-29
|
* Begin work on async connect/accept for POSIX. Not referenced yet.Garrett D'Amore2017-06-29
|
* Use common POSIX socket handling for IPC.Garrett D'Amore2017-06-29
|
* Avoid Solaris / illumos namespace collision.Garrett D'Amore2017-06-29
|