From: Konstantin Osipov <kostja@tarantool.org> To: tarantool-patches@freelists.org Cc: Georgy Kirichenko <georgy@tarantool.org> Subject: [tarantool-patches] Re: [PATCH v4 5/9] wal: a dedicated wal scheduling fiber Date: Thu, 20 Jun 2019 10:53:22 +0300 [thread overview] Message-ID: <20190620075322.GE15155@atlas> (raw) In-Reply-To: <635cf91a85c898d73b176a7c264ca4f63d1b40ff.1560978655.git.georgy@tarantool.org> * Georgy Kirichenko <georgy@tarantool.org> [19/06/20 09:54]: First of all I think this patch is small enough to be collapsed with the subsequent patch which uses the machinery. Vova will remove yield from vinyl pretty soon, so we might not need this patch after all. > + /** A queue to schedule journal entry completions. */ > + struct stailq schedule_queue; > + /** True if writer is in rollback state. */ > + bool is_in_rollback; Why do you need a separate boolean variable? There is plenty of state which could be used to check that we're in rollback already. > + /** A condition to signal about new schedule queue entries. */ > + struct fiber_cond schedule_cond; > /* ----------------- wal ------------------- */ > /** A setting from instance configuration - rows_per_wal */ > int64_t wal_max_rows; > @@ -245,23 +251,35 @@ xlog_write_entry(struct xlog *l, struct journal_entry *entry) > return xlog_tx_commit(l); > } > > +/* > + * Tx schedule fiber function. > + */ > +static int > +tx_schedule_f(va_list ap) > +{ > + struct wal_writer *writer = va_arg(ap, struct wal_writer *); > + while (!fiber_is_cancelled()) { > + while (!stailq_empty(&writer->schedule_queue)) { > + struct journal_entry *req = > + stailq_shift_entry(&writer->schedule_queue, > + struct journal_entry, fifo); > + fiber_wakeup(req->fiber); > + } > + writer->is_in_rollback = false; > + fiber_cond_wait(&writer->schedule_cond); > + } > + return 0; > +} > + > /** > - * Invoke fibers waiting for their journal_entry's to be > - * completed. The fibers are invoked in strict fifo order: > - * this ensures that, in case of rollback, requests are > - * rolled back in strict reverse order, producing > - * a consistent database state. > + * Attach requests to a scheduling queue. > */ > static void > tx_schedule_queue(struct stailq *queue) > { > - /* > - * fiber_wakeup() is faster than fiber_call() when there > - * are many ready fibers. > - */ > - struct journal_entry *req; > - stailq_foreach_entry(req, queue, fifo) > - fiber_wakeup(req->fiber); > + struct wal_writer *writer = &wal_writer_singleton; > + stailq_concat(&writer->schedule_queue, queue); > + fiber_cond_signal(&writer->schedule_cond); > } Sorry for a nit, but you use fiber_wakeup() for tx fibers but cond_signal, which incurs an extra stailq manipulation, with this fiber. Why do you need another queue? Shouldn't you replace existing queues with a single one instead? Having commit, rollback and schedule queues is confusing. I like it that you effectively finalize all tx in one roll, and then yield to the user fibers. Effectively this is a double sweep over the list of tx, but it is less context switches overall, since we don't switch in and out of the scheduler fiber in this case, but switch from one ready fiber to another. Could you please confirm? -- Konstantin Osipov, Moscow, Russia
next prev parent reply other threads:[~2019-06-20 7:53 UTC|newest] Thread overview: 37+ messages / expand[flat|nested] mbox.gz Atom feed top 2019-06-19 21:23 [tarantool-patches] [PATCH v4 0/9] Parallel applier Georgy Kirichenko 2019-06-19 21:23 ` [tarantool-patches] [PATCH v4 1/9] txn: handle fiber stop event at transaction level Georgy Kirichenko 2019-06-20 7:28 ` [tarantool-patches] " Konstantin Osipov 2019-06-20 11:39 ` [tarantool-patches] " Vladimir Davydov 2019-06-19 21:23 ` [tarantool-patches] [PATCH v4 2/9] core: latch_steal routine Georgy Kirichenko 2019-06-20 7:28 ` [tarantool-patches] " Konstantin Osipov 2019-06-20 11:53 ` [tarantool-patches] " Vladimir Davydov 2019-06-20 20:34 ` Георгий Кириченко 2019-06-19 21:23 ` [tarantool-patches] [PATCH v4 3/9] txn: get rid of autocommit from a txn structure Georgy Kirichenko 2019-06-20 7:32 ` [tarantool-patches] " Konstantin Osipov 2019-06-20 11:52 ` [tarantool-patches] " Vladimir Davydov 2019-06-20 20:16 ` Георгий Кириченко 2019-06-19 21:23 ` [tarantool-patches] [PATCH v4 4/9] txn: get rid of fiber_gc from txn_rollback Georgy Kirichenko 2019-06-20 7:43 ` [tarantool-patches] " Konstantin Osipov 2019-06-20 20:35 ` Георгий Кириченко 2019-06-20 13:03 ` [tarantool-patches] " Vladimir Davydov 2019-06-20 20:16 ` Георгий Кириченко 2019-06-19 21:23 ` [tarantool-patches] [PATCH v4 5/9] wal: a dedicated wal scheduling fiber Georgy Kirichenko 2019-06-20 7:53 ` Konstantin Osipov [this message] 2019-06-20 13:05 ` Vladimir Davydov 2019-06-19 21:23 ` [tarantool-patches] [PATCH v4 6/9] wal: introduce a journal entry finalization callback Georgy Kirichenko 2019-06-20 7:56 ` [tarantool-patches] " Konstantin Osipov 2019-06-20 14:08 ` [tarantool-patches] " Vladimir Davydov 2019-06-20 20:22 ` Георгий Кириченко 2019-06-21 7:26 ` [tarantool-patches] " Konstantin Osipov 2019-06-19 21:23 ` [tarantool-patches] [PATCH v4 7/9] txn: introduce asynchronous txn commit Georgy Kirichenko 2019-06-20 8:01 ` [tarantool-patches] " Konstantin Osipov 2019-06-20 15:00 ` [tarantool-patches] " Vladimir Davydov 2019-06-21 7:28 ` [tarantool-patches] " Konstantin Osipov 2019-06-19 21:23 ` [tarantool-patches] [PATCH v4 8/9] applier: apply transaction in parallel Georgy Kirichenko 2019-06-20 7:41 ` [tarantool-patches] " Георгий Кириченко 2019-06-20 8:07 ` Konstantin Osipov 2019-06-20 16:37 ` Vladimir Davydov 2019-06-20 20:33 ` Георгий Кириченко 2019-06-21 8:36 ` Vladimir Davydov 2019-06-20 8:06 ` Konstantin Osipov 2019-06-19 21:23 ` [tarantool-patches] [PATCH v4 9/9] test: fix flaky test Georgy Kirichenko
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20190620075322.GE15155@atlas \ --to=kostja@tarantool.org \ --cc=georgy@tarantool.org \ --cc=tarantool-patches@freelists.org \ --subject='[tarantool-patches] Re: [PATCH v4 5/9] wal: a dedicated wal scheduling fiber' \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: link
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox