14af18995SSascha Wildner.\" 298b2ba80SSascha Wildner.\" Copyright (c) 2006, 2007 34af18995SSascha Wildner.\" The DragonFly Project. All rights reserved. 44af18995SSascha Wildner.\" 54af18995SSascha Wildner.\" Redistribution and use in source and binary forms, with or without 64af18995SSascha Wildner.\" modification, are permitted provided that the following conditions 74af18995SSascha Wildner.\" are met: 84af18995SSascha Wildner.\" 94af18995SSascha Wildner.\" 1. Redistributions of source code must retain the above copyright 104af18995SSascha Wildner.\" notice, this list of conditions and the following disclaimer. 114af18995SSascha Wildner.\" 2. Redistributions in binary form must reproduce the above copyright 124af18995SSascha Wildner.\" notice, this list of conditions and the following disclaimer in 134af18995SSascha Wildner.\" the documentation and/or other materials provided with the 144af18995SSascha Wildner.\" distribution. 154af18995SSascha Wildner.\" 3. Neither the name of The DragonFly Project nor the names of its 164af18995SSascha Wildner.\" contributors may be used to endorse or promote products derived 174af18995SSascha Wildner.\" from this software without specific, prior written permission. 184af18995SSascha Wildner.\" 194af18995SSascha Wildner.\" THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 204af18995SSascha Wildner.\" ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 214af18995SSascha Wildner.\" LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 224af18995SSascha Wildner.\" FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 234af18995SSascha Wildner.\" COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 244af18995SSascha Wildner.\" INCIDENTAL, SPECIAL, EXEMPLARY OR CONSEQUENTIAL DAMAGES (INCLUDING, 254af18995SSascha Wildner.\" BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 264af18995SSascha Wildner.\" LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED 274af18995SSascha Wildner.\" AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 284af18995SSascha Wildner.\" OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT 294af18995SSascha Wildner.\" OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 304af18995SSascha Wildner.\" SUCH DAMAGE. 314af18995SSascha Wildner.\" 32dd7331feSSascha Wildner.Dd June 20, 2015 334af18995SSascha Wildner.Dt VKERNEL 7 344af18995SSascha Wildner.Os 354af18995SSascha Wildner.Sh NAME 360592e24dSSascha Wildner.Nm vkernel , 3798b2ba80SSascha Wildner.Nm vcd , 380592e24dSSascha Wildner.Nm vkd , 390592e24dSSascha Wildner.Nm vke 404af18995SSascha Wildner.Nd virtual kernel architecture 414af18995SSascha Wildner.Sh SYNOPSIS 42b6a66df5SSascha Wildner.Cd "platform vkernel64 # for 64 bit vkernels" 4398b2ba80SSascha Wildner.Cd "device vcd" 44c8e7d028SSascha Wildner.Cd "device vkd" 45c8e7d028SSascha Wildner.Cd "device vke" 46c8e7d028SSascha Wildner.Pp 471a92ebbbSSamuel J. Greear.Pa /var/vkernel/boot/kernel/kernel 48*dc1b9d13SMatthew Dillon.Op Fl hdstUv 49a72d8a9fSMatthew Dillon.Op Fl c Ar file 5009b03fffSSascha Wildner.Op Fl e Ar name Ns = Ns Li value : Ns Ar name Ns = Ns Li value : Ns ... 51dd54cb3aSSascha Wildner.Op Fl i Ar file 52cbbd1e6dSAntonio Huete Jimenez.Op Fl I Ar interface Ns Op Ar :address1 Ns Oo Ar :address2 Oc Ns Oo Ar /netmask Oc Ns Oo Ar =mac Oc 53702acf06SJoe Talbott.Op Fl l Ar cpulock 544af18995SSascha Wildner.Op Fl m Ar size 559bea6114SMihai Carabas.Op Fl n Ar numcpus Ns Op Ar :lbits Ns Oo Ar :cbits Oc 56bc3cc25eSMatthew Dillon.Op Fl p Ar pidfile 572a4f37b8SAntonio Huete Jimenez.Op Fl r Ar file Ns Op Ar :serno 5854ea00b8SMatthew Dillon.Op Fl R Ar file Ns Op Ar :serno 594af18995SSascha Wildner.Sh DESCRIPTION 604af18995SSascha WildnerThe 614af18995SSascha Wildner.Nm 624af18995SSascha Wildnerarchitecture allows for running 634af18995SSascha Wildner.Dx 644af18995SSascha Wildnerkernels in userland. 654af18995SSascha Wildner.Pp 664af18995SSascha WildnerThe following options are available: 674af18995SSascha Wildner.Bl -tag -width ".Fl m Ar size" 68a72d8a9fSMatthew Dillon.It Fl c Ar file 697834fbccSSascha WildnerSpecify a readonly CD-ROM image 70a72d8a9fSMatthew Dillon.Ar file 71a72d8a9fSMatthew Dillonto be used by the kernel, with the first 72a72d8a9fSMatthew Dillon.Fl c 73a72d8a9fSMatthew Dillonoption defining 74a72d8a9fSMatthew Dillon.Li vcd0 , 75a72d8a9fSMatthew Dillonthe second one 76a72d8a9fSMatthew Dillon.Li vcd1 , 7762aea38eSSascha Wildnerand so on. 7862aea38eSSascha WildnerThe first 7954ea00b8SMatthew Dillon.Fl r , 8054ea00b8SMatthew Dillon.Fl R , 81a72d8a9fSMatthew Dillonor 82a72d8a9fSMatthew Dillon.Fl c 83a72d8a9fSMatthew Dillonoption specified on the command line will be the boot disk. 847834fbccSSascha WildnerThe CD9660 filesystem is assumed when booting from this media. 85822dfb20SSascha Wildner.It Fl d 86822dfb20SSascha WildnerDisables hardware pagetable for 87822dfb20SSascha Wildner.Nm . 8809b03fffSSascha Wildner.It Fl e Ar name Ns = Ns Li value : Ns Ar name Ns = Ns Li value : Ns ... 8909b03fffSSascha WildnerSpecify an environment to be used by the kernel. 90974f8ffeSAntonio Huete JimenezThis option can be specified more than once. 91278c4e67SSamuel J. Greear.It Fl h 92278c4e67SSamuel J. GreearShows a list of available options, each with a short description. 93dd54cb3aSSascha Wildner.It Fl i Ar file 94dd54cb3aSSascha WildnerSpecify a memory image 95dd54cb3aSSascha Wildner.Ar file 96dd54cb3aSSascha Wildnerto be used by the virtual kernel. 97dd54cb3aSSascha WildnerIf no 98dd54cb3aSSascha Wildner.Fl i 99dd54cb3aSSascha Wildneroption is given, the kernel will generate a name of the form 100dd54cb3aSSascha Wildner.Pa /var/vkernel/memimg.XXXXXX , 101dd54cb3aSSascha Wildnerwith the trailing 102dd54cb3aSSascha Wildner.Ql X Ns s 103dd54cb3aSSascha Wildnerbeing replaced by a sequential number, e.g.\& 104dd54cb3aSSascha Wildner.Pa memimg.000001 . 10586d2b040SAntonio Huete Jimenez.It Fl I Ar interface Ns Op Ar :address1 Ns Oo Ar :address2 Oc Ns Oo Ar /netmask Oc Ns Oo Ar =MAC Oc 10609b03fffSSascha WildnerCreate a virtual network device, with the first 10709b03fffSSascha Wildner.Fl I 10809b03fffSSascha Wildneroption defining 1090592e24dSSascha Wildner.Li vke0 , 11009b03fffSSascha Wildnerthe second one 1110592e24dSSascha Wildner.Li vke1 , 11209b03fffSSascha Wildnerand so on. 11309b03fffSSascha Wildner.Pp 11409b03fffSSascha WildnerThe 11509b03fffSSascha Wildner.Ar interface 11609b03fffSSascha Wildnerargument is the name of a 11709b03fffSSascha Wildner.Xr tap 4 118bc3cc25eSMatthew Dillondevice node or the path to a 119bc3cc25eSMatthew Dillon.Xr vknetd 8 120bc3cc25eSMatthew Dillonsocket. 12109b03fffSSascha WildnerThe 12209b03fffSSascha Wildner.Pa /dev/ 123bc3cc25eSMatthew Dillonpath prefix does not have to be specified and will be automatically prepended 124bc3cc25eSMatthew Dillonfor a device node. 12509b03fffSSascha WildnerSpecifying 12609b03fffSSascha Wildner.Cm auto 12709b03fffSSascha Wildnerwill pick the first unused 12809b03fffSSascha Wildner.Xr tap 4 12909b03fffSSascha Wildnerdevice. 13009b03fffSSascha Wildner.Pp 13109b03fffSSascha WildnerThe 13209b03fffSSascha Wildner.Ar address1 13309b03fffSSascha Wildnerand 13409b03fffSSascha Wildner.Ar address2 13509b03fffSSascha Wildnerarguments are the IP addresses of the 13609b03fffSSascha Wildner.Xr tap 4 13709b03fffSSascha Wildnerand 1380592e24dSSascha Wildner.Nm vke 13909b03fffSSascha Wildnerinterfaces. 14009b03fffSSascha WildnerOptionally, 14109b03fffSSascha Wildner.Ar address1 14209b03fffSSascha Wildnermay be of the form 14309b03fffSSascha Wildner.Li bridge Ns Em X 14409b03fffSSascha Wildnerin which case the 14509b03fffSSascha Wildner.Xr tap 4 14609b03fffSSascha Wildnerinterface is added to the specified 14709b03fffSSascha Wildner.Xr bridge 4 14809b03fffSSascha Wildnerinterface. 149a8cc122dSSascha WildnerThe 150a8cc122dSSascha Wildner.Nm vke 151a8cc122dSSascha Wildneraddress is not assigned until the interface is brought up in the guest. 15209b03fffSSascha Wildner.Pp 15309b03fffSSascha WildnerThe 15409b03fffSSascha Wildner.Ar netmask 15509b03fffSSascha Wildnerargument applies to all interfaces for which an address is specified. 156bc3cc25eSMatthew Dillon.Pp 15786d2b040SAntonio Huete JimenezThe 15886d2b040SAntonio Huete Jimenez.Ar MAC 15986d2b040SAntonio Huete Jimenezargument is the MAC address of the 16086d2b040SAntonio Huete Jimenez.Xr vke 4 16186d2b040SAntonio Huete Jimenezinterface. 16286d2b040SAntonio Huete JimenezIf not specified, a pseudo-random one will be generated. 16386d2b040SAntonio Huete Jimenez.Pp 164bc3cc25eSMatthew DillonWhen running multiple vkernels it is often more convenient to simply 165bc3cc25eSMatthew Dillonconnect to a 166bc3cc25eSMatthew Dillon.Xr vknetd 8 167c6e9e022SSascha Wildnersocket and let vknetd deal with the tap and/or bridge. 168c6e9e022SSascha WildnerAn example of this would be 169c6e9e022SSascha Wildner.Pa /var/run/vknet:0.0.0.0:10.2.0.2/16 . 170702acf06SJoe Talbott.It Fl l Ar cpulock 171702acf06SJoe TalbottSpecify which, if any, real CPUs to lock virtual CPUs to. 172702acf06SJoe Talbott.Ar cpulock 173702acf06SJoe Talbottis one of 174702acf06SJoe Talbott.Cm any , 17526ea2793SSascha Wildner.Cm map Ns Op Ns , Ns Ar startCPU , 17626ea2793SSascha Wildneror 17726ea2793SSascha Wildner.Ar CPU . 178702acf06SJoe Talbott.Pp 179702acf06SJoe Talbott.Cm any 18026ea2793SSascha Wildnerdoes not map virtual CPUs to real CPUs. 18126ea2793SSascha WildnerThis is the default. 182702acf06SJoe Talbott.Pp 183702acf06SJoe Talbott.Cm map Ns Op Ns , Ns Ar startCPU 184702acf06SJoe Talbottmaps each virtual CPU to a real CPU starting with real CPU 0 or 185702acf06SJoe Talbott.Ar startCPU 186702acf06SJoe Talbottif specified. 187702acf06SJoe Talbott.Pp 188702acf06SJoe Talbott.Ar CPU 18926ea2793SSascha Wildnerlocks all virtual CPUs to the real CPU specified by 19026ea2793SSascha Wildner.Ar CPU . 1914af18995SSascha Wildner.It Fl m Ar size 1924af18995SSascha WildnerSpecify the amount of memory to be used by the kernel in bytes, 1934af18995SSascha Wildner.Cm K 1943cea05a4SSascha Wildner.Pq kilobytes , 1954af18995SSascha Wildner.Cm M 1963cea05a4SSascha Wildner.Pq megabytes 1973cea05a4SSascha Wildneror 1984af18995SSascha Wildner.Cm G 1993cea05a4SSascha Wildner.Pq gigabytes . 20009b03fffSSascha WildnerLowercase versions of 2014af18995SSascha Wildner.Cm K , M , 2024af18995SSascha Wildnerand 2034af18995SSascha Wildner.Cm G 2044af18995SSascha Wildnerare allowed. 2059bea6114SMihai Carabas.It Fl n Ar numcpus Ns Op Ar :lbits Ns Oo Ar :cbits Oc 2069bea6114SMihai Carabas.Ar numcpus 2079bea6114SMihai Carabasspecifies the number of CPUs you wish to emulate. 2086e837288SSascha WildnerUp to 16 CPUs are supported with 2 being the default unless otherwise 2096e837288SSascha Wildnerspecified. 21082065d92SSascha Wildner.Pp 2119bea6114SMihai Carabas.Ar lbits 2129bea6114SMihai Carabasspecifies the number of bits within APICID(=CPUID) needed for representing 2139bea6114SMihai Carabasthe logical ID. 2149bea6114SMihai CarabasControls the number of threads/core (0 bits - 1 thread, 1 bit - 2 threads). 2159bea6114SMihai CarabasThis parameter is optional (mandatory only if 2169bea6114SMihai Carabas.Ar cbits 2179bea6114SMihai Carabasis specified). 21882065d92SSascha Wildner.Pp 2199bea6114SMihai Carabas.Ar cbits 2209bea6114SMihai Carabasspecifies the number of bits within APICID(=CPUID) needed for representing 2219bea6114SMihai Carabasthe core ID. 2229bea6114SMihai CarabasControls the number of core/package (0 bits - 1 core, 1 bit - 2 cores). 2239bea6114SMihai CarabasThis parameter is optional. 224bc3cc25eSMatthew Dillon.It Fl p Ar pidfile 225bc3cc25eSMatthew DillonSpecify a pidfile in which to store the process ID. 226bc3cc25eSMatthew DillonScripts can use this file to locate the vkernel pid for the purpose of 227bc3cc25eSMatthew Dillonshutting down or killing it. 228bc3cc25eSMatthew Dillon.Pp 229bc3cc25eSMatthew DillonThe vkernel will hold a lock on the pidfile while running. 230bc3cc25eSMatthew DillonScripts may test for the lock to determine if the pidfile is valid or 23167cdc5a5SSascha Wildnerstale so as to avoid accidentally killing a random process. 232bc3cc25eSMatthew DillonSomething like '/usr/bin/lockf -ks -t 0 pidfile echo -n' may be used 233bc3cc25eSMatthew Dillonto test the lock. 234bc3cc25eSMatthew DillonA non-zero exit code indicates that the pidfile represents a running 235bc3cc25eSMatthew Dillonvkernel. 236bc3cc25eSMatthew Dillon.Pp 237bc3cc25eSMatthew DillonAn error is issued and the vkernel exits if this file cannot be opened for 238bc3cc25eSMatthew Dillonwriting or if it is already locked by an active vkernel process. 2392a4f37b8SAntonio Huete Jimenez.It Fl r Ar file Ns Op Ar :serno 240a72d8a9fSMatthew DillonSpecify a R/W disk image 2414af18995SSascha Wildner.Ar file 242ec1a8a4dSSascha Wildnerto be used by the kernel, with the first 243ec1a8a4dSSascha Wildner.Fl r 244ec1a8a4dSSascha Wildneroption defining 2450592e24dSSascha Wildner.Li vkd0 , 246ec1a8a4dSSascha Wildnerthe second one 2470592e24dSSascha Wildner.Li vkd1 , 24862aea38eSSascha Wildnerand so on. 2492a4f37b8SAntonio Huete JimenezA serial number for the virtual disk can be specified in 2502a4f37b8SAntonio Huete Jimenez.Ar serno . 2512a4f37b8SAntonio Huete Jimenez.Pp 25262aea38eSSascha WildnerThe first 253a72d8a9fSMatthew Dillon.Fl r 254a72d8a9fSMatthew Dillonor 255a72d8a9fSMatthew Dillon.Fl c 256a72d8a9fSMatthew Dillonoption specified on the command line will be the boot disk. 25754ea00b8SMatthew Dillon.It Fl R Ar file Ns Op Ar :serno 25854ea00b8SMatthew DillonWorks like 25954ea00b8SMatthew Dillon.Fl r 26054ea00b8SMatthew Dillonbut treats the disk image as copy-on-write. This allows 26154ea00b8SMatthew Dillona private copy of the image to be modified but does not 26254ea00b8SMatthew Dillonmodify the image file. The image file will not be locked 26354ea00b8SMatthew Dillonin this situation and multiple vkernels can run off the 26454ea00b8SMatthew Dillonsame image file if desired. 26554ea00b8SMatthew Dillon.Pp 26654ea00b8SMatthew DillonSince modifications are thrown away, any data you wish 26754ea00b8SMatthew Dillonto retain across invocations needs to be exported over 26854ea00b8SMatthew Dillonthe network prior to shutdown. 26954ea00b8SMatthew DillonThis gives you the flexibility to mount the disk image 27054ea00b8SMatthew Dilloneither read-only or read-write depending on what is 27154ea00b8SMatthew Dillonconvenient. 27254ea00b8SMatthew DillonHowever, keep in mind that when mounting a COW image 27354ea00b8SMatthew Dillonread-write, modifications will eat system memory and 27454ea00b8SMatthew Dillonswap space until the vkernel is shut down. 275c8e7d028SSascha Wildner.It Fl s 276c8e7d028SSascha WildnerBoot into single-user mode. 277*dc1b9d13SMatthew Dillon.It Fl t 278*dc1b9d13SMatthew DillonTell the vkernel to use a precise host timer when calculating clock values. 279*dc1b9d13SMatthew DillonThis will impose higher overhead on the vkernel as it will have to make 280*dc1b9d13SMatthew Dillona system call to the real host every time it wants to get the time. 281*dc1b9d13SMatthew DillonHowever, the more precise timer might be necessary for your application. 282*dc1b9d13SMatthew Dillon.Pp 283*dc1b9d13SMatthew DillonBy default, the vkernel uses an imprecise (host-tick-resolution) timer 284*dc1b9d13SMatthew Dillonwhich uses a user-mapped kernel page and does not have any syscall overhead. 28503071031SSascha Wildner.It Fl U 28603071031SSascha WildnerEnable writing to kernel memory and module loading. 28703071031SSascha WildnerBy default, those are disabled for security reasons. 2884af18995SSascha Wildner.It Fl v 2894af18995SSascha WildnerTurn on verbose booting. 2904af18995SSascha Wildner.El 2910592e24dSSascha Wildner.Sh DEVICES 2920592e24dSSascha WildnerA number of virtual device drivers exist to supplement the virtual kernel. 2930592e24dSSascha Wildner.Ss Disk device 2940592e24dSSascha WildnerThe 2950592e24dSSascha Wildner.Nm vkd 2960592e24dSSascha Wildnerdriver allows for up to 16 2970592e24dSSascha Wildner.Xr vn 4 2980592e24dSSascha Wildnerbased disk devices. 2990592e24dSSascha WildnerThe root device will be 3000592e24dSSascha Wildner.Li vkd0 3010592e24dSSascha Wildner(see 3020592e24dSSascha Wildner.Sx EXAMPLES 3030592e24dSSascha Wildnerfor further information on how to prepare a root image). 30498b2ba80SSascha Wildner.Ss CD-ROM device 30598b2ba80SSascha WildnerThe 30698b2ba80SSascha Wildner.Nm vcd 30798b2ba80SSascha Wildnerdriver allows for up to 16 virtual CD-ROM devices. 30898b2ba80SSascha WildnerBasically this is a read only 30998b2ba80SSascha Wildner.Nm vkd 31098b2ba80SSascha Wildnerdevice with a block size of 2048. 3110592e24dSSascha Wildner.Ss Network interface 3120592e24dSSascha WildnerThe 3130592e24dSSascha Wildner.Nm vke 3140592e24dSSascha Wildnerdriver supports up to 16 virtual network interfaces which are associated with 3150592e24dSSascha Wildner.Xr tap 4 3160592e24dSSascha Wildnerdevices on the host. 3170592e24dSSascha WildnerFor each 3180592e24dSSascha Wildner.Nm vke 3190592e24dSSascha Wildnerdevice, the per-interface read only 3200592e24dSSascha Wildner.Xr sysctl 3 3210592e24dSSascha Wildnervariable 3220592e24dSSascha Wildner.Va hw.vke Ns Em X Ns Va .tap_unit 3230592e24dSSascha Wildnerholds the unit number of the associated 3240592e24dSSascha Wildner.Xr tap 4 3250592e24dSSascha Wildnerdevice. 32633c27d6cSAntonio Huete Jimenez.Pp 32733c27d6cSAntonio Huete JimenezBy default, half of the total mbuf clusters available is distributed equally 328c6e9e022SSascha Wildneramong all the vke devices up to 256. 32949af6f0fSSascha WildnerThis can be overridden with the tunable 33033c27d6cSAntonio Huete Jimenez.Va hw.vke.max_ringsize . 33133c27d6cSAntonio Huete JimenezTake into account the number passed will be aligned to the lower power of two. 3321e4d9fd9SSascha Wildner.Sh SIGNALS 333bb195a01SMatthew DillonThe virtual kernel only enables 334bb195a01SMatthew Dillon.Dv SIGQUIT 335bb195a01SMatthew Dillonand 336bb195a01SMatthew Dillon.Dv SIGTERM 337bb195a01SMatthew Dillonwhile operating in regular console mode. 338bb195a01SMatthew DillonSending 3391e4d9fd9SSascha Wildner.Ql \&^\e 3401e4d9fd9SSascha Wildner.Pq Dv SIGQUIT 341bb195a01SMatthew Dillonto the virtual kernel causes the virtual kernel to enter its internal 3421e4d9fd9SSascha Wildner.Xr ddb 4 343bb195a01SMatthew Dillondebugger and re-enable all other terminal signals. 344bb195a01SMatthew DillonSending 345bb195a01SMatthew Dillon.Dv SIGTERM 346bb195a01SMatthew Dillonto the virtual kernel triggers a clean shutdown by passing a 347bb195a01SMatthew Dillon.Dv SIGUSR2 348bb195a01SMatthew Dillonto the virtual kernel's 349bb195a01SMatthew Dillon.Xr init 8 350bb195a01SMatthew Dillonprocess. 351974b26bfSSascha Wildner.Sh DEBUGGING 352974b26bfSSascha WildnerIt is possible to directly gdb the virtual kernel's process. 353974b26bfSSascha WildnerIt is recommended that you do a 354974b26bfSSascha Wildner.Ql handle SIGSEGV noprint 3554010bf94SNicolas Theryto ignore page faults processed by the virtual kernel itself and 356e7c2f376SNicolas Thery.Ql handle SIGUSR1 noprint 35720ce32a9SSascha Wildnerto ignore signals used for simulating inter-processor interrupts. 358b96eeefdSSascha Wildner.Sh PROFILING 359b96eeefdSSascha WildnerTo compile a vkernel with profiling support, the 360b96eeefdSSascha Wildner.Va CONFIGARGS 361b96eeefdSSascha Wildnervariable needs to be used to pass 362b96eeefdSSascha Wildner.Fl p 363b96eeefdSSascha Wildnerto 364b96eeefdSSascha Wildner.Xr config 8 . 365b96eeefdSSascha Wildner.Bd -literal 366b96eeefdSSascha Wildnercd /usr/src 367dd7331feSSascha Wildnermake -DNO_MODULES CONFIGARGS=-p buildkernel KERNCONF=VKERNEL64 368b96eeefdSSascha Wildner.Ed 369a154d422SThomas Nikolajsen.Sh FILES 370ec363e75SSascha Wildner.Bl -tag -width ".It Pa /sys/config/VKERNEL64" -compact 371ec363e75SSascha Wildner.It Pa /dev/vcdX 372ec363e75SSascha Wildner.Nm vcd 373ec363e75SSascha Wildnerdevice nodes 374ec363e75SSascha Wildner.It Pa /dev/vkdX 375ec363e75SSascha Wildner.Nm vkd 376ec363e75SSascha Wildnerdevice nodes 377163fd4e7SAntonio Huete Jimenez.It Pa /sys/config/VKERNEL64 378a154d422SThomas Nikolajsen.El 379163fd4e7SAntonio Huete Jimenez.Pp 380163fd4e7SAntonio Huete Jimenez.Nm 381dd7331feSSascha Wildnerconfiguration file, for 382163fd4e7SAntonio Huete Jimenez.Xr config 8 . 383a68e0df0SSascha Wildner.Sh CONFIGURATION FILES 384a68e0df0SSascha WildnerYour virtual kernel is a complete 385a68e0df0SSascha Wildner.Dx 386a68e0df0SSascha Wildnersystem, but you might not want to run all the services a normal kernel runs. 387a68e0df0SSascha WildnerHere is what a typical virtual kernel's 388a68e0df0SSascha Wildner.Pa /etc/rc.conf 389a68e0df0SSascha Wildnerfile looks like, with some additional possibilities commented out. 390a68e0df0SSascha Wildner.Bd -literal 391a68e0df0SSascha Wildnerhostname="vkernel" 392a68e0df0SSascha Wildnernetwork_interfaces="lo0 vke0" 393a68e0df0SSascha Wildnerifconfig_vke0="DHCP" 394a68e0df0SSascha Wildnersendmail_enable="NO" 395a68e0df0SSascha Wildner#syslog_enable="NO" 396a68e0df0SSascha Wildnerblanktime="NO" 397a68e0df0SSascha Wildner.Ed 39854ea00b8SMatthew Dillon.Sh BOOT DRIVE SELECTION 39954ea00b8SMatthew DillonYou can override the default boot drive selection and filesystem 40054ea00b8SMatthew Dillonusing a kernel environment variable. Note that the filesystem 40154ea00b8SMatthew Dillonselected must be compiled into the vkernel and not loaded as 40254ea00b8SMatthew Dillona module. You need to escape some quotes around the variable data 40354ea00b8SMatthew Dillonto avoid mis-interpretation of the colon in the 40454ea00b8SMatthew Dillon.Fl e 40554ea00b8SMatthew Dillonoption. For example: 40654ea00b8SMatthew Dillon.Pp 40754ea00b8SMatthew Dillon.Fl e 40854ea00b8SMatthew Dillonvfs.root.mountfrom=\\"hammer:vkd0s1d\\" 409163fd4e7SAntonio Huete Jimenez.Sh DISKLESS OPERATION 410163fd4e7SAntonio Huete JimenezTo boot a 411163fd4e7SAntonio Huete Jimenez.Nm 412163fd4e7SAntonio Huete Jimenezfrom a NFS root, a number of tunables need to be set: 413163fd4e7SAntonio Huete Jimenez.Bl -tag -width indent 414163fd4e7SAntonio Huete Jimenez.It Va boot.netif.ip 415163fd4e7SAntonio Huete JimenezIP address to be set in the vkernel interface. 416163fd4e7SAntonio Huete Jimenez.It Va boot.netif.netmask 417163fd4e7SAntonio Huete JimenezNetmask for the IP to be set. 418163fd4e7SAntonio Huete Jimenez.It Va boot.netif.name 419163fd4e7SAntonio Huete JimenezNetwork interface name inside the vkernel. 420163fd4e7SAntonio Huete Jimenez.It Va boot.nfsroot.server 421163fd4e7SAntonio Huete JimenezHost running 422163fd4e7SAntonio Huete Jimenez.Xr nfsd 8 . 423163fd4e7SAntonio Huete Jimenez.It Va boot.nfsroot.path 424163fd4e7SAntonio Huete JimenezHost path where a world and distribution 425163fd4e7SAntonio Huete Jimeneztargets are properly installed. 426163fd4e7SAntonio Huete Jimenez.El 427163fd4e7SAntonio Huete Jimenez.Pp 428163fd4e7SAntonio Huete JimenezSee an example on how to boot a diskless 429163fd4e7SAntonio Huete Jimenez.Nm 430163fd4e7SAntonio Huete Jimenezin the 431163fd4e7SAntonio Huete Jimenez.Sx EXAMPLES 432163fd4e7SAntonio Huete Jimenezsection. 433c8e7d028SSascha Wildner.Sh EXAMPLES 4344af18995SSascha WildnerA couple of steps are necessary in order to prepare the system to build and 4354af18995SSascha Wildnerrun a virtual kernel. 4364af18995SSascha Wildner.Ss Setting up the filesystem 4374af18995SSascha WildnerThe 4384af18995SSascha Wildner.Nm 4394af18995SSascha Wildnerarchitecture needs a number of files which reside in 4404af18995SSascha Wildner.Pa /var/vkernel . 4414af18995SSascha WildnerSince these files tend to get rather big and the 4424af18995SSascha Wildner.Pa /var 4434af18995SSascha Wildnerpartition is usually of limited size, we recommend the directory to be 4444af18995SSascha Wildnercreated in the 4454af18995SSascha Wildner.Pa /home 4464af18995SSascha Wildnerpartition with a link to it in 4474af18995SSascha Wildner.Pa /var : 448c8e7d028SSascha Wildner.Bd -literal 449c009fcfaSThomas Nikolajsenmkdir -p /home/var.vkernel/boot 4504af18995SSascha Wildnerln -s /home/var.vkernel /var/vkernel 4514af18995SSascha Wildner.Ed 4524af18995SSascha Wildner.Pp 4534af18995SSascha WildnerNext, a filesystem image to be used by the virtual kernel has to be 45462aea38eSSascha Wildnercreated and populated (assuming world has been built previously). 45562aea38eSSascha WildnerIf the image is created on a UFS filesystem you might want to pre-zero it. 45649802d4eSMatthew DillonOn a HAMMER filesystem you should just truncate-extend to the image size 45749802d4eSMatthew Dillonas HAMMER does not re-use data blocks already present in the file. 458c8e7d028SSascha Wildner.Bd -literal 459f73862c5SSascha Wildnervnconfig -c -S 2g -T vn0 /var/vkernel/rootimg.01 46058c55700SSascha Wildnerdisklabel -r -w vn0s0 auto 461c009fcfaSThomas Nikolajsendisklabel -e vn0s0 # add `a' partition with fstype `4.2BSD' 46258c55700SSascha Wildnernewfs /dev/vn0s0a 46358c55700SSascha Wildnermount /dev/vn0s0a /mnt 464c8e7d028SSascha Wildnercd /usr/src 465c8e7d028SSascha Wildnermake installworld DESTDIR=/mnt 466c8e7d028SSascha Wildnercd etc 467c8e7d028SSascha Wildnermake distribution DESTDIR=/mnt 4687a3238b8SMatthew Dillonecho '/dev/vkd0s0a / ufs rw 1 1' >/mnt/etc/fstab 4697a3238b8SMatthew Dillonecho 'proc /proc procfs rw 0 0' >>/mnt/etc/fstab 4707834fbccSSascha Wildner.Ed 4717834fbccSSascha Wildner.Pp 4727834fbccSSascha WildnerEdit 4737834fbccSSascha Wildner.Pa /mnt/etc/ttys 4747834fbccSSascha Wildnerand replace the 4757834fbccSSascha Wildner.Li console 4767834fbccSSascha Wildnerentry with the following line and turn off all other gettys. 4777834fbccSSascha Wildner.Bd -literal 4787834fbccSSascha Wildnerconsole "/usr/libexec/getty Pc" cons25 on secure 4797834fbccSSascha Wildner.Ed 4807834fbccSSascha Wildner.Pp 481eed435ddSStathis KamperisReplace 482eed435ddSStathis Kamperis.Li \&Pc 483eed435ddSStathis Kamperiswith 484eed435ddSStathis Kamperis.Li al.Pc 485eed435ddSStathis Kamperisif you would like to automatically log in as root. 486eed435ddSStathis Kamperis.Pp 4877834fbccSSascha WildnerThen, unmount the disk. 4887834fbccSSascha Wildner.Bd -literal 4894af18995SSascha Wildnerumount /mnt 4904af18995SSascha Wildnervnconfig -u vn0 4914af18995SSascha Wildner.Ed 4924af18995SSascha Wildner.Ss Compiling the virtual kernel 4934af18995SSascha WildnerIn order to compile a virtual kernel use the 494dd7331feSSascha Wildner.Li VKERNEL64 4954af18995SSascha Wildnerkernel configuration file residing in 496a154d422SThomas Nikolajsen.Pa /sys/config 4974af18995SSascha Wildner(or a configuration file derived thereof): 498c8e7d028SSascha Wildner.Bd -literal 4994af18995SSascha Wildnercd /usr/src 500dd7331feSSascha Wildnermake -DNO_MODULES buildkernel KERNCONF=VKERNEL64 501dd7331feSSascha Wildnermake -DNO_MODULES installkernel KERNCONF=VKERNEL64 DESTDIR=/var/vkernel 5024af18995SSascha Wildner.Ed 5034af18995SSascha Wildner.Ss Enabling virtual kernel operation 5044af18995SSascha WildnerA special 5054af18995SSascha Wildner.Xr sysctl 8 , 5064af18995SSascha Wildner.Va vm.vkernel_enable , 5074af18995SSascha Wildnermust be set to enable 5084af18995SSascha Wildner.Nm 5094af18995SSascha Wildneroperation: 510c8e7d028SSascha Wildner.Bd -literal 5114af18995SSascha Wildnersysctl vm.vkernel_enable=1 5124af18995SSascha Wildner.Ed 51309b03fffSSascha Wildner.Ss Configuring the network on the host system 51409b03fffSSascha WildnerIn order to access a network interface of the host system from the 51509b03fffSSascha Wildner.Nm , 51609b03fffSSascha Wildneryou must add the interface to a 51709b03fffSSascha Wildner.Xr bridge 4 51809b03fffSSascha Wildnerdevice which will then be passed to the 51909b03fffSSascha Wildner.Fl I 52009b03fffSSascha Wildneroption: 52109b03fffSSascha Wildner.Bd -literal 52209b03fffSSascha Wildnerkldload if_bridge.ko 52309b03fffSSascha Wildnerkldload if_tap.ko 52409b03fffSSascha Wildnerifconfig bridge0 create 52509b03fffSSascha Wildnerifconfig bridge0 addm re0 # assuming re0 is the host's interface 52609b03fffSSascha Wildnerifconfig bridge0 up 52709b03fffSSascha Wildner.Ed 5284af18995SSascha Wildner.Ss Running the kernel 5294af18995SSascha WildnerFinally, the virtual kernel can be run: 530c8e7d028SSascha Wildner.Bd -literal 53179b58aaeSMatthew Dilloncd /var/vkernel 5327374a7a6SMatthew Dillon\&./boot/kernel/kernel -m 1g -r rootimg.01 -I auto:bridge0 5334af18995SSascha Wildner.Ed 534c8e7d028SSascha Wildner.Pp 53579b58aaeSMatthew DillonYou can issue the 53679b58aaeSMatthew Dillon.Xr reboot 8 , 53779b58aaeSMatthew Dillon.Xr halt 8 , 53879b58aaeSMatthew Dillonor 53979b58aaeSMatthew Dillon.Xr shutdown 8 54079b58aaeSMatthew Dilloncommands from inside a virtual kernel. 54179b58aaeSMatthew DillonAfter doing a clean shutdown the 542c8e7d028SSascha Wildner.Xr reboot 8 54379b58aaeSMatthew Dilloncommand will re-exec the virtual kernel binary while the other two will 54479b58aaeSMatthew Dilloncause the virtual kernel to exit. 5457374a7a6SMatthew Dillon.Ss Diskless operation (vkernel as a NFS client) 546163fd4e7SAntonio Huete JimenezBooting a 547163fd4e7SAntonio Huete Jimenez.Nm 548163fd4e7SAntonio Huete Jimenezwith a 549163fd4e7SAntonio Huete Jimenez.Xr vknetd 8 5507374a7a6SMatthew Dillonnetwork configuration. The line continuation backslashes have been 5517374a7a6SMatthew Dillonomitted. For convenience and to reduce confusion I recommend mounting 5527374a7a6SMatthew Dillonthe server's remote vkernel root onto the host running the vkernel binary 5537374a7a6SMatthew Dillonusing the same path as the NFS mount. It is assumed that a full system 5547374a7a6SMatthew Dilloninstall has been made to /var/vkernel/root using a kernel KERNCONF=VKERNEL64 5557374a7a6SMatthew Dillonfor the kernel build. 556163fd4e7SAntonio Huete Jimenez.Bd -literal 5577374a7a6SMatthew Dillon\&/var/vkernel/root/boot/kernel/kernel 5587374a7a6SMatthew Dillon -m 1g -n 4 -I /var/run/vknet 5597374a7a6SMatthew Dillon -e boot.netif.ip=10.100.0.2 560163fd4e7SAntonio Huete Jimenez -e boot.netif.netmask=255.255.0.0 5617374a7a6SMatthew Dillon -e boot.netif.gateway=10.100.0.1 562163fd4e7SAntonio Huete Jimenez -e boot.netif.name=vke0 5637374a7a6SMatthew Dillon -e boot.nfsroot.server=10.0.0.55 5647374a7a6SMatthew Dillon -e boot.nfsroot.path=/var/vkernel/root 565163fd4e7SAntonio Huete Jimenez.Ed 5667374a7a6SMatthew Dillon.Pp 5677374a7a6SMatthew DillonIn this example vknetd is assumed to have been started as shown below, before 5687374a7a6SMatthew Dillonrunning the vkernel, using an unbridged TAP configuration routed through 5697374a7a6SMatthew Dillonthe host. 5707374a7a6SMatthew DillonIP forwarding must be turned on, and in this example the server resides 5717374a7a6SMatthew Dillonon a different network accessible to the host executing the vkernel but not 5727374a7a6SMatthew Dillondirectly on the vkernel's subnet. 5737374a7a6SMatthew Dillon.Bd -literal 5747374a7a6SMatthew Dillonkldload if_tap 5757374a7a6SMatthew Dillonsysctl net.inet.ip.forwarding=1 5767374a7a6SMatthew Dillonvknetd -t tap0 10.100.0.1/16 5777374a7a6SMatthew Dillon.Ed 5787374a7a6SMatthew Dillon.Pp 5797374a7a6SMatthew DillonYou can run multiple vkernels trivially with the same NFS root as long as 5807374a7a6SMatthew Dillonyou assign each one a different IP on the subnet (2, 3, 4, etc). You 5817374a7a6SMatthew Dillonshould also be careful with certain directories, particularly /var/run 5827374a7a6SMatthew Dillonand possibly also /var/db depending on what your vkernels are going to be 5837374a7a6SMatthew Dillondoing. 5847374a7a6SMatthew DillonThis can complicate matters with /var/db/pkg. 58534caba04SMatthew Dillon.Sh BUILDING THE WORLD UNDER A VKERNEL 58634caba04SMatthew DillonThe virtual kernel platform does not have all the header files expected 58734caba04SMatthew Dillonby a world build, so the easiest thing to do right now is to specify a 588579b67d2SSascha Wildnerpc64 (in a 64 bit vkernel) target when building the world under a virtual 589579b67d2SSascha Wildnerkernel, like this: 59034caba04SMatthew Dillon.Bd -literal 591579b67d2SSascha Wildnervkernel# make MACHINE_PLATFORM=pc64 buildworld 592579b67d2SSascha Wildnervkernel# make MACHINE_PLATFORM=pc64 installworld 59334caba04SMatthew Dillon.Ed 5944af18995SSascha Wildner.Sh SEE ALSO 595666855caSSascha Wildner.Xr vknet 1 , 59609b03fffSSascha Wildner.Xr bridge 4 , 5978988c073SSascha Wildner.Xr ifmedia 4 , 59809b03fffSSascha Wildner.Xr tap 4 , 599c8e7d028SSascha Wildner.Xr vn 4 , 600a154d422SThomas Nikolajsen.Xr sysctl.conf 5 , 601c8e7d028SSascha Wildner.Xr build 7 , 602b96eeefdSSascha Wildner.Xr config 8 , 603c8e7d028SSascha Wildner.Xr disklabel 8 , 60409b03fffSSascha Wildner.Xr ifconfig 8 , 605dbfd168bSMatthew Dillon.Xr vknetd 8 , 606c8e7d028SSascha Wildner.Xr vnconfig 8 607c203b6f9SSascha Wildner.Rs 608c203b6f9SSascha Wildner.%A Aggelos Economopoulos 609c203b6f9SSascha Wildner.%D March 2007 610c203b6f9SSascha Wildner.%T "A Peek at the DragonFly Virtual Kernel" 611c203b6f9SSascha Wildner.Re 6124af18995SSascha Wildner.Sh HISTORY 6134af18995SSascha WildnerVirtual kernels were introduced in 6144af18995SSascha Wildner.Dx 1.7 . 6154af18995SSascha Wildner.Sh AUTHORS 6164af18995SSascha Wildner.An -nosplit 6174af18995SSascha Wildner.An Matt Dillon 6184af18995SSascha Wildnerthought up and implemented the 6194af18995SSascha Wildner.Nm 6200592e24dSSascha Wildnerarchitecture and wrote the 6210592e24dSSascha Wildner.Nm vkd 6220592e24dSSascha Wildnerdevice driver. 6230592e24dSSascha Wildner.An Sepherosa Ziehau 6240592e24dSSascha Wildnerwrote the 6250592e24dSSascha Wildner.Nm vke 6260592e24dSSascha Wildnerdevice driver. 6274af18995SSascha WildnerThis manual page was written by 6284af18995SSascha Wildner.An Sascha Wildner . 629