[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-users] Xen + VServer
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
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |