[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] Anyone know how and where the do_sched_op(SCHEDOP_BLOCK) got called? -- Sam
Hi, Lan: Thanks for you reply! I appreciate your help very much! :) I checked the Linux side of calling the do_sched_op, with parameters of SCHEDOP_block. it is called in the following places: arch/x86/xen/irq.c: static void xen_safe_halt(void) { /* Blocking includes an implicit local_irq_enable(). */ if (HYPERVISOR_sched_op(SCHEDOP_block, NULL) != 0) BUG(); } arch/x86/include/mach-xen/asm/hypervisor.h: static inline int HYPERVISOR_block(void) { int rc = HYPERVISOR_sched_op(SCHEDOP_block, NULL); return rc; } Time-xen.c (arch\x86\kernel): void xen_safe_halt(void) { stop_hz_timer(); /* Blocking includes an implicit local_irq_enable(). */ HYPERVISOR_block(); start_hz_timer(); } It seems it has something to do with the xen_safe_halt, and xen_safe_halt is bind with: static inline void raw_safe_halt(void) { xen_safe_halt(); } Irq.c (arch\x86\xen): static void xen_halt(void) { if (irqs_disabled()) HYPERVISOR_vcpu_op(VCPUOP_down, smp_processor_id(), NULL); else xen_safe_halt(); } static const struct pv_irq_ops xen_irq_ops __initdata = { .safe_halt = xen_safe_halt, } Does anyone know why this is called? why can I only get 95% utilization with one busy VCPU? Thanks very much! best! Sam On Mon, Nov 1, 2010 at 3:18 AM, Ian Campbell <Ian.Campbell@xxxxxxxxxx> wrote: > On Sun, 2010-10-31 at 05:09 +0000, walmart wrote: >> Hi, all: >> >> In the 64 bit Xen 4.0.1, compiled from the source code, >> >> under xen/common/schedule.c, >> ret_t do_sched_op(int cmd, XEN_GUEST_HANDLE(void) arg). >> >> Does anyone know how this function got called? > > It is an entry point for a hypercall so it will potentially be called > from any guest OS. See xen/arch/x86/*/entry.S for the hypercall table > entry which points at this function. In the pvops Linux kernel see the > callers of HYPERVISOR_sched_op() for the users of this hypercall. > > There are some other callers in the HVM code called in response to > certain events which lead to scheduling type decisions, such as the > guest executing a hlt instruction. > > Ian. > >> >> I raise this question cause I noticed in the default credit based >> scheduler, if I only configure one busy cpu to run(pinned to one >> specific core, it is also the only VCPU on that core). if I run a busy >> loop, I would only get 95% of the utilization. >> >> I add some printk into the code and found that: >> >> every 1s, the do_sched_op() would exec, and the cmd is schedop_block. >> which would block the vcpu for 50 ms. (50 ms / 1 s = 5%), causing the >> vcpu can only get 95% of the resources. >> >> Does anyone know the reason for this? >> >> Or, does anyone know how and where this do_sched_op() function get >> called? I did a grep and all I can found is the compat_do_sched_op, >> which is not called at all.. >> >> I would highly appreciate your help! >> >> Thanks very much! >> >> best! >> >> Sam >> >> _______________________________________________ >> Xen-devel mailing list >> Xen-devel@xxxxxxxxxxxxxxxxxxx >> http://lists.xensource.com/xen-devel > > > _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |