mirror of
https://github.com/fluencelabs/redis
synced 2025-04-01 23:31:03 +00:00
less delays in diskstore when there are many writes. more work to do.
This commit is contained in:
parent
900ab8fc7a
commit
419e1cca74
@ -323,7 +323,10 @@ void freeIOJob(iojob *j) {
|
|||||||
|
|
||||||
/* Every time a thread finished a Job, it writes a byte into the write side
|
/* Every time a thread finished a Job, it writes a byte into the write side
|
||||||
* of an unix pipe in order to "awake" the main thread, and this function
|
* of an unix pipe in order to "awake" the main thread, and this function
|
||||||
* is called. */
|
* is called.
|
||||||
|
*
|
||||||
|
* If privdata != NULL the function will try to put more jobs in the queue
|
||||||
|
* of IO jobs to process as more room is made. */
|
||||||
void vmThreadedIOCompletedJob(aeEventLoop *el, int fd, void *privdata,
|
void vmThreadedIOCompletedJob(aeEventLoop *el, int fd, void *privdata,
|
||||||
int mask)
|
int mask)
|
||||||
{
|
{
|
||||||
@ -331,7 +334,6 @@ void vmThreadedIOCompletedJob(aeEventLoop *el, int fd, void *privdata,
|
|||||||
int retval, processed = 0, toprocess = -1;
|
int retval, processed = 0, toprocess = -1;
|
||||||
REDIS_NOTUSED(el);
|
REDIS_NOTUSED(el);
|
||||||
REDIS_NOTUSED(mask);
|
REDIS_NOTUSED(mask);
|
||||||
REDIS_NOTUSED(privdata);
|
|
||||||
|
|
||||||
/* For every byte we read in the read side of the pipe, there is one
|
/* For every byte we read in the read side of the pipe, there is one
|
||||||
* I/O job completed to process. */
|
* I/O job completed to process. */
|
||||||
@ -390,6 +392,7 @@ void vmThreadedIOCompletedJob(aeEventLoop *el, int fd, void *privdata,
|
|||||||
freeIOJob(j);
|
freeIOJob(j);
|
||||||
}
|
}
|
||||||
processed++;
|
processed++;
|
||||||
|
if (privdata != NULL) cacheScheduleIOPushJobs(0);
|
||||||
if (processed == toprocess) return;
|
if (processed == toprocess) return;
|
||||||
}
|
}
|
||||||
if (retval < 0 && errno != EAGAIN) {
|
if (retval < 0 && errno != EAGAIN) {
|
||||||
@ -411,6 +414,7 @@ void *IOThreadEntryPoint(void *arg) {
|
|||||||
iojob *j;
|
iojob *j;
|
||||||
listNode *ln;
|
listNode *ln;
|
||||||
REDIS_NOTUSED(arg);
|
REDIS_NOTUSED(arg);
|
||||||
|
long long start;
|
||||||
|
|
||||||
pthread_detach(pthread_self());
|
pthread_detach(pthread_self());
|
||||||
lockThreadedIO();
|
lockThreadedIO();
|
||||||
@ -423,6 +427,7 @@ void *IOThreadEntryPoint(void *arg) {
|
|||||||
redisLog(REDIS_DEBUG,"[T] signal received");
|
redisLog(REDIS_DEBUG,"[T] signal received");
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
start = ustime();
|
||||||
redisLog(REDIS_DEBUG,"[T] %ld IO jobs to process",
|
redisLog(REDIS_DEBUG,"[T] %ld IO jobs to process",
|
||||||
listLength(server.io_newjobs));
|
listLength(server.io_newjobs));
|
||||||
ln = listFirst(server.io_newjobs);
|
ln = listFirst(server.io_newjobs);
|
||||||
@ -464,6 +469,7 @@ void *IOThreadEntryPoint(void *arg) {
|
|||||||
|
|
||||||
/* Signal the main thread there is new stuff to process */
|
/* Signal the main thread there is new stuff to process */
|
||||||
redisAssert(write(server.io_ready_pipe_write,"x",1) == 1);
|
redisAssert(write(server.io_ready_pipe_write,"x",1) == 1);
|
||||||
|
redisLog(REDIS_WARNING,"TIME (%c): %lld\n", j->type == REDIS_IOJOB_LOAD ? 'L' : 'S', ustime()-start);
|
||||||
}
|
}
|
||||||
/* never reached, but that's the full pattern... */
|
/* never reached, but that's the full pattern... */
|
||||||
unlockThreadedIO();
|
unlockThreadedIO();
|
||||||
@ -739,7 +745,7 @@ void cacheScheduleIO(redisDb *db, robj *key, int type) {
|
|||||||
* scheduled completion time, but just do the operation ASAP. This is useful
|
* scheduled completion time, but just do the operation ASAP. This is useful
|
||||||
* when we need to reclaim memory from the IO queue.
|
* when we need to reclaim memory from the IO queue.
|
||||||
*/
|
*/
|
||||||
#define MAX_IO_JOBS_QUEUE 100
|
#define MAX_IO_JOBS_QUEUE 10
|
||||||
int cacheScheduleIOPushJobs(int flags) {
|
int cacheScheduleIOPushJobs(int flags) {
|
||||||
time_t now = time(NULL);
|
time_t now = time(NULL);
|
||||||
listNode *ln;
|
listNode *ln;
|
||||||
|
@ -637,6 +637,9 @@ dictType hashDictType;
|
|||||||
* Functions prototypes
|
* Functions prototypes
|
||||||
*----------------------------------------------------------------------------*/
|
*----------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
/* Utils */
|
||||||
|
long long ustime(void);
|
||||||
|
|
||||||
/* networking.c -- Networking and Client related operations */
|
/* networking.c -- Networking and Client related operations */
|
||||||
redisClient *createClient(int fd);
|
redisClient *createClient(int fd);
|
||||||
void closeTimedoutClients(void);
|
void closeTimedoutClients(void);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user