[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Xen-devel] capturing SIGKILL in DomU


  • To: Michal Novotny <minovotn@xxxxxxxxxx>
  • From: "Srujan D. Kotikela" <ksrujandas@xxxxxxxxx>
  • Date: Tue, 5 Oct 2010 08:36:18 -0500
  • Cc: xen-devel@xxxxxxxxxxxxxxxxxxx
  • Delivery-date: Tue, 05 Oct 2010 06:37:08 -0700
  • Domainkey-signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :cc:content-type; b=rrYaymSicIIt835qiAusNIXpkm7X1RgJSlt2a6ryOvS0ChLtW9/TcRXTvvTJRDpAWX 9PF0PzC8hSyDC5XPrbdvVnJK3uMzBJnapJLp2QVAVKsLF41zEDjp/yIt6ilF8GicDwqx iwdJZUQCg6D2i1V5uvXBU7m3tqUI9nVkCks5Y=
  • List-id: Xen developer discussion <xen-devel.lists.xensource.com>

Hi Michal,

I would prefer an trigger-like mechanism for communication rather a a process where I have to constantly poll or look for an event in DomU. How computing intensive would be xenstore lookup compared to event-channels with 100s of DomUs? 

How about modifying hypervisor to do an upcall for the event handler in Dom0 when a specific interrupt occurs in DomU? If this can be done can you suggest any pointers for the same? 

Thanks for your help.

--
Srujan D. Kotikela


On Tue, Oct 5, 2010 at 8:22 AM, Michal Novotny <minovotn@xxxxxxxxxx> wrote:
Hi Srujan,

I'm not that familiar with event channels themselves however I was thinking about using xenstore. You can modify the device model (qemu-dm) to be watching some entry in the xenstore and the communication could be both way since if you establish a xenstore watch in both Dom0 and DomU you could intercept the changes on both sides.

If you would like to use interrupts instead you may have to modify the HVMLoader source codes at tools/firmware/hvmloader of the user-space stack but I think using the xenstore could do the job since this is how it's working with PV drivers AFAIK since PV drivers themselves implement xenbus to connect to host's xenstore facility.

Hope this helps!

Cheers,
Michal


On 10/05/2010 03:14 PM, Srujan D. Kotikela wrote:
Hi Michal,

I have no special interest in SIGKILL. All I want to do is notify Dom0 about an event in DomU (I don't need to pass any data). I am trying to indicate events by signals or interrupts. It means, if a "particular" interrupt has occurred in DomU, the Dom0 should be notified. Is there any other way of doing the same other than using event channels?

I am successful in establishing the event channel. But I am not quite sure how to send a notification that an event occurred in DomU to Dom0. Any pointers for the same would be appreciated.

--
Srujan D. Kotikela


On Tue, Oct 5, 2010 at 3:36 AM, Michal Novotny <minovotn@xxxxxxxxxx <mailto:minovotn@xxxxxxxxxx>> wrote:

   Hi Srujan,
   what about adding a signal handler to qemu-dm in the
   tools/ioemu-dir of the user-space tools? Using the signal() API?
   Nevertheless why would you like to catch SIGKILL? This one (as can
   be seen using included program source and killing it using kill -9
   pid or kill -SIGKILL pid) is not being caught at all nevertheless
   most of the other signals can be caught.

   This is the source of the example mentioned:
   #include <stdio.h>
   #include <signal.h>
   #include <stdlib.h>

   void sig_handler(int sig) {
      fprintf(stderr, "Signal %d caught.\n", sig);
      exit(sig);
   }

   int main()
   {
      signal(SIGINT, sig_handler);
      signal(SIGKILL, sig_handler);

      sleep(10000);
      return 0;
   }

   When I did try SIGINT (Ctrl + C or kill -2 pid) it caught the
   signal well but when I did try kill -9 pid (or kill -SIGKILL pid
   respectively) it was not working at all since it killed the
   process instead of going to the signal handler. When you need to
   catch signals like interruption signal (Ctrl + C one) this will
   work fine.

   Michal


   On 10/04/2010 09:03 PM, Srujan D. Kotikela wrote:

       Hi,

       I am trying to capture SIGKILL through event channel.

       On my Dom0, the following process is running (remaining code
       in attachment).


          int main(void){

              int ret, dom, remote_dom;

              //initialize domains
              dom=0;
              remote_dom=2;

              //create the event channel
              ret = create_channel(dom, remote_dom);


              if (0 == ret) {
                  printf("\n Event Channel established successfully \n");
              } else {
                  return -1;    //EVENT_CHANNEL_CREATION_FAILED
              }

              //wait 20 seconds for an event to occur in DomU
              wait_for_event(20);

              //close the opened interfaces
              close_channel();

              return 0;

          }


       While this process is running; I killed a process in DomU
       using `*kill SIGKILL pid*`

       How can I capture this event (occured in DomU) at the Dom0. I
       watched /dev/xen/evtchn, but no notification.


       --
       Srujan D. Kotikela


       _______________________________________________
       Xen-devel mailing list
       Xen-devel@xxxxxxxxxxxxxxxxxxx
       <mailto:Xen-devel@xxxxxxxxxxxxxxxxxxx>    --     Michal Novotny<minovotn@xxxxxxxxxx <mailto:minovotn@xxxxxxxxxx>>, RHCE

   Virtualization Team (xen userspace), Red Hat




--
Michal Novotny<minovotn@xxxxxxxxxx>, RHCE
Virtualization Team (xen userspace), Red Hat


_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel

 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.