WARNING - OLD ARCHIVES

This is an archived copy of the Xen.org mailing list, which we have preserved to ensure that existing links to archives are not broken. The live archive, which contains the latest emails, can be found at http://lists.xen.org/
   
 
 
Xen 
 
Home Products Support Community News
 
   
 

xen-users

[Xen-users] Xen + VServer

To: Xen userlist Userlist <xen-users@xxxxxxxxxxxxxxxxxxx>, vserver@xxxxxxxxxxxxxxxxxxxxxx
Subject: [Xen-users] Xen + VServer
From: Michal Ludvig <michal@xxxxxxxx>
Date: Wed, 03 Aug 2005 22:20:32 +1200
Delivery-date: Wed, 03 Aug 2005 10:19:09 +0000
Envelope-to: www-data@xxxxxxxxxxxxxxxxxxx
List-help: <mailto:xen-users-request@lists.xensource.com?subject=help>
List-id: Xen user discussion <xen-users.lists.xensource.com>
List-post: <mailto:xen-users@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-users>, <mailto:xen-users-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-users>, <mailto:xen-users-request@lists.xensource.com?subject=unsubscribe>
Sender: xen-users-bounces@xxxxxxxxxxxxxxxxxxx
User-agent: Mozilla Thunderbird 1.0 (X11/20041206)
Hi all,

I used to run VServer in the past and recently gave Xen a try. I pretty
much like both of these technologies - each of them has some advantages
that the other one can't offer. I appreciate the real independence of
Xen domains but the memory overhead of running a kernel for each domain
and the need to partition the memory space may become a limitation. On
the other hand in VServer the contexts run on top of the same kernel and
may share the available memory which may come handy in some deployments.

So I decided to merge both patches and surprisingly enough - it works! I
don't now (yet) how stable it is but the kernel booted as domU and a
guest vserver context was created, some prcosses are running inside and
everything looks just fine.

Versions used:
* Linux kernel 2.6.11
* Xen 2.0-testing from yesterday
* VServer 2.0-rc4 (last version for 2.6.11)

Apply the attached patch on top of these.

Xen userspace is 2.0-testing as well, util-vserver 0.30.204 (debian
build), running on Debian Sarge.

My configuration was x86, statically compiled without modules, domU with
no physdev access, 3G/1G memspace split on x86, no preempt, no selinux.
What else?

This is the very first shot, I don't guarantee that it is stable,
secure, etc, but if you're brave enough give it a try ;-)

Michal Ludvig
--
* Personal homepage: http://www.logix.cz/michal



Index: linux-2.6.11/arch/xen/i386/Kconfig
===================================================================
--- linux-2.6.11.orig/arch/xen/i386/Kconfig
+++ linux-2.6.11/arch/xen/i386/Kconfig
@@ -546,6 +546,46 @@ config HIGHMEM4G
 
 endchoice
 
+choice
+       prompt "Memory Split User Space"
+       default SPLIT_3GB
+       help
+         A different Userspace/Kernel split allows you to
+         utilize up to alsmost 3GB of RAM without the requirement
+         for HIGHMEM. It also increases the available lowmem.
+
+config SPLIT_3GB
+       bool "3.0GB/1.0GB Kernel (Default)"
+       help
+         This is the default split of 3GB userspace to 1GB kernel
+         space, which will result in about 860MB of lowmem.
+
+config SPLIT_25GB
+       bool "2.5GB/1.5GB Kernel"
+       help
+         This split provides 2.5GB userspace and 1.5GB kernel
+         space, which will result in about 1370MB of lowmem.
+
+config SPLIT_2GB
+       bool "2.0GB/2.0GB Kernel"
+       help
+         This split provides 2GB userspace and 2GB kernel
+         space, which will result in about 1880MB of lowmem.
+
+config SPLIT_15GB
+       bool "1.5GB/2.5GB Kernel"
+       help
+         This split provides 1.5GB userspace and 2.5GB kernel
+         space, which will result in about 2390MB of lowmem.
+
+config SPLIT_1GB
+       bool "1.0GB/3.0GB Kernel"
+       help
+         This split provides 1GB userspace and 3GB kernel
+         space, which will result in about 2900MB of lowmem.
+
+endchoice
+
 config HIGHMEM
        bool
        depends on HIGHMEM64G || HIGHMEM4G
Index: linux-2.6.11/arch/xen/i386/kernel/entry.S
===================================================================
--- linux-2.6.11.orig/arch/xen/i386/kernel/entry.S
+++ linux-2.6.11/arch/xen/i386/kernel/entry.S
@@ -1011,7 +1011,7 @@ ENTRY(sys_call_table)
        .long sys_tgkill        /* 270 */
        .long sys_utimes
        .long sys_fadvise64_64
-       .long sys_ni_syscall    /* sys_vserver */
+       .long sys_vserver
        .long sys_mbind
        .long sys_get_mempolicy
        .long sys_set_mempolicy
Index: linux-2.6.11/arch/xen/i386/kernel/traps.c
===================================================================
--- linux-2.6.11.orig/arch/xen/i386/kernel/traps.c
+++ linux-2.6.11/arch/xen/i386/kernel/traps.c
@@ -53,6 +53,7 @@
 
 #include <linux/irq.h>
 #include <linux/module.h>
+#include <linux/vserver/debug.h>
 
 #include "mach_traps.h"
 
@@ -303,6 +304,7 @@ void die(const char * str, struct pt_reg
        };
        static int die_counter;
 
+       vxh_throw_oops();
        if (die.lock_owner != _smp_processor_id()) {
                console_verbose();
                spin_lock_irq(&die.lock);
@@ -337,6 +339,7 @@ void die(const char * str, struct pt_reg
        bust_spinlocks(0);
        die.lock_owner = -1;
        spin_unlock_irq(&die.lock);
+       vxh_dump_history();
        if (in_interrupt())
                panic("Fatal exception in interrupt");
 
Index: linux-2.6.11/include/asm-xen/asm-i386/page.h
===================================================================
--- linux-2.6.11.orig/include/asm-xen/asm-i386/page.h
+++ linux-2.6.11/include/asm-xen/asm-i386/page.h
@@ -167,16 +167,24 @@ extern int sysctl_legacy_va_layout;
 
 #endif /* __ASSEMBLY__ */
 
-#ifdef __ASSEMBLY__
+#if   defined(CONFIG_SPLIT_3GB)
 #define __PAGE_OFFSET          (0xC0000000)
-#else
-#define __PAGE_OFFSET          (0xC0000000UL)
+#elif defined(CONFIG_SPLIT_25GB)
+#define __PAGE_OFFSET          (0xA0000000)
+#elif defined(CONFIG_SPLIT_2GB)
+#define __PAGE_OFFSET          (0x80000000)
+#elif defined(CONFIG_SPLIT_15GB)
+#define __PAGE_OFFSET          (0x60000000)
+#elif defined(CONFIG_SPLIT_1GB)
+#define __PAGE_OFFSET          (0x40000000)
 #endif
 
 
 #define PAGE_OFFSET            ((unsigned long)__PAGE_OFFSET)
 #define VMALLOC_RESERVE                ((unsigned long)__VMALLOC_RESERVE)
-#define MAXMEM                 
(HYPERVISOR_VIRT_START-__PAGE_OFFSET-__VMALLOC_RESERVE)
+#define __MAXMEM               (-__PAGE_OFFSET-__VMALLOC_RESERVE)
+#define MAXMEM                 ((unsigned long)(-PAGE_OFFSET-VMALLOC_RESERVE))
+
 #define __pa(x)                        ((unsigned long)(x)-PAGE_OFFSET)
 #define __va(x)                        ((void *)((unsigned 
long)(x)+PAGE_OFFSET))
 #define pfn_to_kaddr(pfn)      __va((pfn) << PAGE_SHIFT)
Index: linux-2.6.11/include/asm-xen/asm-i386/processor.h
===================================================================
--- linux-2.6.11.orig/include/asm-xen/asm-i386/processor.h
+++ linux-2.6.11/include/asm-xen/asm-i386/processor.h
@@ -308,9 +308,10 @@ extern unsigned int mca_pentium_flag;
 extern int bootloader_type;
 
 /*
- * User space process size: 3GB (default).
+ * User space process size: (3GB default).
  */
-#define TASK_SIZE      (PAGE_OFFSET)
+#define __TASK_SIZE            (__PAGE_OFFSET)
+#define TASK_SIZE              ((unsigned long)__TASK_SIZE)
 
 /* This decides where the kernel will search for a free chunk of vm
  * space during mmap's.
_______________________________________________
Xen-users mailing list
Xen-users@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-users
<Prev in Thread] Current Thread [Next in Thread>