Gregory Burd
e9b1a9ea0b
Replace all enif implementations of mutexes and conditions with their POSIX pthread equivalent on the theory that we don't want to be bumping heads with the Erlang runtime.
2013-08-02 14:19:44 -04:00
Gregory Burd
6919515de5
Re-use the unchanging value of 'Args' rather than including it in every recursive call.
2013-08-02 14:18:19 -04:00
Gregory Burd
05c8c615ef
I think the make_ref() needs to be within the fun()'s context to trigger selective receive optimization in the beam's runtime.
2013-08-01 10:02:21 -04:00
Gregory Burd
f153509409
With some input from Jon I've managed to reduce this back into a macro rather than a fun and a macro calling a fun. He also suggested that on eagain I sleep a small amount of time so as to allow other work to catch up a bit.
2013-07-31 15:39:55 -04:00
Gregory Burd
ee904b4769
Lower the queue size to shrink potential for latency in queue. Remove earlier idea that more queues would lead to more even worker progress, just have 1 queue per Erlang-scheduler thread (generally, 1 per CPU core available). Also change the way worker threads decide when to cond_wait or migrate to other queues looking for work.
2013-07-31 15:06:28 -04:00
Gregory Burd
c9a4ab8325
Revert changes to async_nif and re-enable stats. Fixed selective recv.
2013-07-31 09:41:36 -04:00
Gregory Burd
2393257bef
Really disable stats.
2013-07-30 14:34:04 -04:00
Gregory Burd
211ffd884c
Ignore requests for stats for right now.
2013-07-30 14:30:04 -04:00
Gregory Burd
4418a74183
Increase the number of queues for work to reside. Worker threads, once started, don't exit until shutdown.
2013-07-30 14:21:26 -04:00
Gregory Burd
1623d5293c
Increase the max queue size.
2013-07-30 13:30:43 -04:00
Gregory Burd
56c2ac27c2
Revert to a macro-only, non-recursive on eagain method for managing requests.
2013-07-30 13:27:13 -04:00
Gregory Burd
27dba903ef
The ref needs to be in-scope of the recieve for it to be optimized.
2013-07-30 13:20:49 -04:00
Gregory Burd
8f415df69c
Merge pull request #10 from basho-labs/gsb-workers-migrate
...
Worker threads should check for work in other queues before exiting.
2013-07-26 17:12:15 -07:00
Gregory Burd
cce163db9f
Fix potential to use uninitialized value when branching.
2013-07-26 20:08:49 -04:00
Gregory Burd
9a5defd8c9
Merge remote-tracking branch 'origin/master' into gsb-workers-migrate
...
Conflicts:
c_src/async_nif.h
2013-07-26 10:31:23 -04:00
Gregory Burd
452d7694a6
Added some sanity checking of key/value sizes. Check for EAGAIN/INVAL/NOMEM when starting worker threads. Switch back to the 1.6.3 release branch of WT.
2013-07-26 10:27:21 -04:00
Gregory Burd
3627ff8690
Ensure that on EAGAIN we continue to try to spawn a worker. When workers finish with a queue have them migrate to the other queues looking for work.
2013-07-25 13:29:16 -04:00
Gregory Burd
122963133a
Seems logging isn't a valid config value anymore, so remove it.
2013-07-18 13:26:53 -04:00
Gregory Burd
2a847b82d0
Forgot to remove this when I dumped the MRU.
2013-07-18 13:21:22 -04:00
Gregory Burd
2694cc1dba
Remove the MRU, it wasn't really effective in most cases anyway and complicated logic (and was buggy). For now the cache mutex will be hot, but eventually I hope to move the cache to a lock-free dequeue. khash.h and cas.h aren't used anymore, so they have been removed.
2013-07-18 13:14:54 -04:00
Gregory Burd
bbadc81d53
Queue depth and num workers can race, so make sure that we start at least one worker when there are none active for that queue.
2013-07-15 16:51:08 -04:00
Gregory Burd
c3d3d39c36
Remove default setting from configuration.
2013-07-15 12:36:28 -04:00
Gregory Burd
bd0323af7a
Update to WiredTiger 1.6.3. Fix a condition where a mutex was unlocked twice on eagain when queues were all full.
2013-07-15 12:21:10 -04:00
Gregory Burd
420b658e27
Really fix the lower bound for session handles (session_max) to 1024 (upper bound is 8192).
2013-07-08 19:59:00 -04:00
Gregory Burd
fea52c4ec3
Change lower bound for session handles (session_max) to 1024 (upper bound is 8192).
2013-07-08 19:45:45 -04:00
Gregory Burd
ac835f7617
Reduce precision of bloom filters to something more reasonable to avoid having very large bloom filters in cache. Reduce leaf pages to a more reasonable default. Given all data in Riak is <<Bucket, Key>> enable prefix_compression to hopefully reduce key overhead.
2013-07-08 13:49:44 -04:00
Gregory Burd
565f95f9b5
Cleanup makefile a bit
2013-07-08 11:12:50 -04:00
Gregory Burd
b6e8b175e3
Merge pull request #9 from basho-labs/gsb-ctx-cache
...
Cache session/[{cursor, config}] for reuse and spawn threads when needed.
2013-07-03 05:31:14 -07:00
Gregory Burd
bc0f5dbfc7
Evict older half of items in the cache by removing items from the end of the list, don't waste cycles computing timestamps.
2013-07-02 22:23:32 -04:00
Gregory Burd
b727538162
Fix shutdown
2013-07-02 22:07:34 -04:00
Gregory Burd
2672bab3ea
Stats overhead due to hitting the clock and pulling a mutex caused a massive slowdown so now work is assigned to a new queue only when the candidate queue is deeper than the average of the other queues and threads are created only when the depth of the queue is larger than the number of threads working on that queue.
2013-07-02 19:58:00 -04:00
Gregory Burd
00e5889ac9
Changed conditions for worker thread creation.
2013-07-02 16:46:04 -04:00
Gregory Burd
4300b3036f
Working on triggers that start/stop worker threads.
2013-07-01 21:09:21 -04:00
Gregory Burd
c7b45a7c2b
Still ironing out stats.
2013-06-27 10:57:41 -04:00
Gregory Burd
c41e411a92
Worker threads come and go as needed with a lower bound of 2 and an
...
upper bound of ASYNC_NIF_MAX_WORKERS. Stats were improved to use
thread local storage for measures. With stats working again wterl
uses them to determine who to evict. Wterl's signature calculation
for an operation wasn't correct and so the cache wasn't efficient at
all, this has been fixed.
2013-06-25 13:31:43 -04:00
Gregory Burd
a3c54b1610
Cleanup a bit.
2013-06-19 14:54:27 -04:00
Gregory Burd
060abffcff
Minor oversight, fixed.
2013-06-19 14:42:56 -04:00
Gregory Burd
0f180a6531
Fixed a few mistakes.
2013-06-19 14:37:30 -04:00
Gregory Burd
450299dc2d
Comment out a test that's not yet working.
2013-06-18 16:40:43 -04:00
Gregory Burd
4ae8ffb4cd
Update debugging messages a bit. Fix a bug in the signature function.
2013-06-18 13:49:25 -04:00
Gregory Burd
34e88c9234
Add some debugging output.
2013-06-18 13:12:10 -04:00
Gregory Burd
50e24d0f48
Add a longer, multi-table test. Use a release version of WiredTiger from now on.
2013-06-18 09:21:58 -04:00
Gregory Burd
53307e8c01
A great deal of cleanup. EUnit and EQC tests pass.
2013-06-14 16:57:53 -04:00
Gregory Burd
ff7d1d6e20
WIP: further simplifying context cache
2013-06-14 10:52:45 -04:00
Gregory Burd
7952358781
WIP: cache wasn't returning items found
2013-06-12 09:08:09 -04:00
Gregory Burd
4460434db1
WIP: remove potential for infinite loops with CAS and fix a few issues in async
2013-06-12 08:09:51 -04:00
Gregory Burd
110b482962
Some paranoia and a few fixes
2013-06-11 12:13:06 -04:00
Gregory Burd
8ea866bf20
Logic inversion on CAS() operation.
2013-06-10 16:18:55 -04:00
Gregory Burd
2a4b8ee7d2
WIP: simplify the cache from hash-of-lists to list; use a CAS() operation to protect the most-recently-used (mru) list.
2013-06-10 14:31:59 -04:00
b2c0b65114
Fixes for OS/X and whitespace cleanup.
2013-06-06 15:16:50 -04:00