|
From: | Zhang Chen |
Subject: | Re: [Qemu-devel] [RFC PATCH V3 1/4] colo-compare: introduce colo compare initlization |
Date: | Thu, 12 May 2016 16:16:16 +0800 |
User-agent: | Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101 Thunderbird/38.7.2 |
On 05/12/2016 04:01 PM, Jason Wang wrote:
On 2016年05月12日 14:49, Zhang Chen wrote:On 05/09/2016 06:49 PM, Zhang Chen wrote:+ + s->chr_sec_in = qemu_chr_find(s->sec_indev); + if (s->chr_sec_in == NULL) { + error_setg(errp, "Secondary IN Device '%s' not found", + s->sec_indev); + return; + } + + s->chr_out = qemu_chr_find(s->outdev); + if (s->chr_out == NULL) { + error_setg(errp, "OUT Device '%s' not found", s->outdev); + return; + } + + qemu_chr_fe_claim_no_fail(s->chr_pri_in); + qemu_chr_add_handlers(s->chr_pri_in, compare_chr_can_read, + compare_pri_chr_in, NULL, s); + + qemu_chr_fe_claim_no_fail(s->chr_sec_in); + qemu_chr_add_handlers(s->chr_sec_in, compare_chr_can_read, + compare_sec_chr_in, NULL, s); +I mean we probably want to handle pri_in and sec_in in colo compare thread. Through this way, there's no need for extra synchronizationBtw, what's the reason of handling this in main loop? I thought itwould be better to do this in colo thread? Otherwise, you need lots of extra synchronizations?Do you mean we should start/stop/do checkpoint it by colo-frame?with main loop.I get your point, but how to do this. Now, we use qemu_chr_add_handlers to do this job.You probably want to start a new main loop in colo comparing thread.IIUC, do you mean - remove char device read_handler ↓at colo comparing thread↓ while (true) { - blocking read packet from char device with select(2)/poll(2)... - compare packet }Yes, something like this.But remove qemu_chr_add_handlers I can't get fd to select/poll. How to get fd from all kinds of chardev?Hi~ jason. If we use chardev socket the fd save in QIOChannelSocket. and if we use chardev file the fd save in QIOChannelFile. Have any common method to get fd?I'm not sure I get the question. But you probably can call qemu_chr_add_handlers() in colo comparing thread to solve this I think?
I have tested call qemu_chr_add_handlers() in colo comparing thread, but when data come,
the handler always running in main loop. Thanks Zhang Chen
Thanks Zhang ChenThis solution will lead comparing packet and reading packet in serial.But i don't know if this will have a good performance.This probably won't have the best performance but it simplify lots of things. Actually doing it in main loop will slow down all other I/O processing. Consider colo can only handling userspace network traffic now, we could start from this. For performance, it needs lots of other stuff: I think the most important thing is to add vhost support. ThanksThanks zhangchen...
-- Thanks zhangchen
[Prev in Thread] | Current Thread | [Next in Thread] |