xref: /dflybsd-src/share/man/man7/vkernel.7 (revision 5a7b5cadcbb76258b9798fa6766286810a90321b)
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.\"
325229377cSSascha Wildner.Dd September 7, 2021
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
485229377cSSascha Wildner.Op Fl hstUvz
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.
8509b03fffSSascha Wildner.It Fl e Ar name Ns = Ns Li value : Ns Ar name Ns = Ns Li value : Ns ...
8609b03fffSSascha WildnerSpecify an environment to be used by the kernel.
87974f8ffeSAntonio Huete JimenezThis option can be specified more than once.
88278c4e67SSamuel J. Greear.It Fl h
89278c4e67SSamuel J. GreearShows a list of available options, each with a short description.
90dd54cb3aSSascha Wildner.It Fl i Ar file
91dd54cb3aSSascha WildnerSpecify a memory image
92dd54cb3aSSascha Wildner.Ar file
93dd54cb3aSSascha Wildnerto be used by the virtual kernel.
94dd54cb3aSSascha WildnerIf no
95dd54cb3aSSascha Wildner.Fl i
96dd54cb3aSSascha Wildneroption is given, the kernel will generate a name of the form
97dd54cb3aSSascha Wildner.Pa /var/vkernel/memimg.XXXXXX ,
98dd54cb3aSSascha Wildnerwith the trailing
99dd54cb3aSSascha Wildner.Ql X Ns s
100dd54cb3aSSascha Wildnerbeing replaced by a sequential number, e.g.\&
101dd54cb3aSSascha Wildner.Pa memimg.000001 .
10286d2b040SAntonio 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
10309b03fffSSascha WildnerCreate a virtual network device, with the first
10409b03fffSSascha Wildner.Fl I
10509b03fffSSascha Wildneroption defining
1060592e24dSSascha Wildner.Li vke0 ,
10709b03fffSSascha Wildnerthe second one
1080592e24dSSascha Wildner.Li vke1 ,
10909b03fffSSascha Wildnerand so on.
11009b03fffSSascha Wildner.Pp
11109b03fffSSascha WildnerThe
11209b03fffSSascha Wildner.Ar interface
11309b03fffSSascha Wildnerargument is the name of a
11409b03fffSSascha Wildner.Xr tap 4
115bc3cc25eSMatthew Dillondevice node or the path to a
116bc3cc25eSMatthew Dillon.Xr vknetd 8
117bc3cc25eSMatthew Dillonsocket.
11809b03fffSSascha WildnerThe
11909b03fffSSascha Wildner.Pa /dev/
120bc3cc25eSMatthew Dillonpath prefix does not have to be specified and will be automatically prepended
121bc3cc25eSMatthew Dillonfor a device node.
12209b03fffSSascha WildnerSpecifying
12309b03fffSSascha Wildner.Cm auto
12409b03fffSSascha Wildnerwill pick the first unused
12509b03fffSSascha Wildner.Xr tap 4
12609b03fffSSascha Wildnerdevice.
12709b03fffSSascha Wildner.Pp
12809b03fffSSascha WildnerThe
12909b03fffSSascha Wildner.Ar address1
13009b03fffSSascha Wildnerand
13109b03fffSSascha Wildner.Ar address2
13209b03fffSSascha Wildnerarguments are the IP addresses of the
13309b03fffSSascha Wildner.Xr tap 4
13409b03fffSSascha Wildnerand
1350592e24dSSascha Wildner.Nm vke
13609b03fffSSascha Wildnerinterfaces.
13709b03fffSSascha WildnerOptionally,
13809b03fffSSascha Wildner.Ar address1
13909b03fffSSascha Wildnermay be of the form
14009b03fffSSascha Wildner.Li bridge Ns Em X
14109b03fffSSascha Wildnerin which case the
14209b03fffSSascha Wildner.Xr tap 4
14309b03fffSSascha Wildnerinterface is added to the specified
14409b03fffSSascha Wildner.Xr bridge 4
14509b03fffSSascha Wildnerinterface.
146a8cc122dSSascha WildnerThe
147a8cc122dSSascha Wildner.Nm vke
148a8cc122dSSascha Wildneraddress is not assigned until the interface is brought up in the guest.
14909b03fffSSascha Wildner.Pp
15009b03fffSSascha WildnerThe
15109b03fffSSascha Wildner.Ar netmask
15209b03fffSSascha Wildnerargument applies to all interfaces for which an address is specified.
153bc3cc25eSMatthew Dillon.Pp
15486d2b040SAntonio Huete JimenezThe
15586d2b040SAntonio Huete Jimenez.Ar MAC
15686d2b040SAntonio Huete Jimenezargument is the MAC address of the
15786d2b040SAntonio Huete Jimenez.Xr vke 4
15886d2b040SAntonio Huete Jimenezinterface.
15986d2b040SAntonio Huete JimenezIf not specified, a pseudo-random one will be generated.
16086d2b040SAntonio Huete Jimenez.Pp
161bc3cc25eSMatthew DillonWhen running multiple vkernels it is often more convenient to simply
162bc3cc25eSMatthew Dillonconnect to a
163bc3cc25eSMatthew Dillon.Xr vknetd 8
164c6e9e022SSascha Wildnersocket and let vknetd deal with the tap and/or bridge.
165c6e9e022SSascha WildnerAn example of this would be
166c6e9e022SSascha Wildner.Pa /var/run/vknet:0.0.0.0:10.2.0.2/16 .
167702acf06SJoe Talbott.It Fl l Ar cpulock
168702acf06SJoe TalbottSpecify which, if any, real CPUs to lock virtual CPUs to.
169702acf06SJoe Talbott.Ar cpulock
170702acf06SJoe Talbottis one of
171702acf06SJoe Talbott.Cm any ,
172*5a7b5cadSSascha Wildner.Cm map Ns Op , Ns Ar startCPU ,
17326ea2793SSascha Wildneror
17426ea2793SSascha Wildner.Ar CPU .
175702acf06SJoe Talbott.Pp
176702acf06SJoe Talbott.Cm any
17726ea2793SSascha Wildnerdoes not map virtual CPUs to real CPUs.
17826ea2793SSascha WildnerThis is the default.
179702acf06SJoe Talbott.Pp
180*5a7b5cadSSascha Wildner.Cm map Ns Op , Ns Ar startCPU
181702acf06SJoe Talbottmaps each virtual CPU to a real CPU starting with real CPU 0 or
182702acf06SJoe Talbott.Ar startCPU
183702acf06SJoe Talbottif specified.
184702acf06SJoe Talbott.Pp
185702acf06SJoe Talbott.Ar CPU
18626ea2793SSascha Wildnerlocks all virtual CPUs to the real CPU specified by
18726ea2793SSascha Wildner.Ar CPU .
188c5f1256bSMatthew Dillon.Pp
189c5f1256bSMatthew DillonLocking the vkernel to a set of cpus is recommended on multi-socket systems
190c5f1256bSMatthew Dillonto improve NUMA locality of reference.
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.
277dc1b9d13SMatthew Dillon.It Fl t
278dc1b9d13SMatthew DillonTell the vkernel to use a precise host timer when calculating clock values.
2797b21e5e4SImre VadászIf the TSC isn't used, this will impose higher overhead on the vkernel as it
2807b21e5e4SImre Vadászwill have to make a system call to the real host every time it wants to get
2817b21e5e4SImre Vadászthe time.
282dc1b9d13SMatthew DillonHowever, the more precise timer might be necessary for your application.
283dc1b9d13SMatthew Dillon.Pp
2847b21e5e4SImre VadászBy default, the vkernel uses the TSC cpu timer if possible, or an imprecise
285f37681eeSAaron LI(host-tick-resolution) timer which uses a user-mapped kernel page and does
2867b21e5e4SImre Vadásznot have any syscall overhead.
287fab26d8fSImre VadászTo disable the TSC cpu timer, use the
288fab26d8fSImre Vadász.Fl e Ar hw.tsc_cputimer_enable=0
289fab26d8fSImre Vadászflag.
29003071031SSascha Wildner.It Fl U
29103071031SSascha WildnerEnable writing to kernel memory and module loading.
29203071031SSascha WildnerBy default, those are disabled for security reasons.
2934af18995SSascha Wildner.It Fl v
2944af18995SSascha WildnerTurn on verbose booting.
295c5f1256bSMatthew Dillon.It Fl z
296c5f1256bSMatthew DillonForce the vkernel's ram to be pre-zerod.  Useful for benchmarking on
297c5f1256bSMatthew Dillonsingle-socket systems where the memory allocation does not have to be
298c5f1256bSMatthew DillonNUMA-friendly.
299c5f1256bSMatthew DillonThis options is not recommended on multi-socket systems or when the
300c5f1256bSMatthew Dillon.Fl l
301c5f1256bSMatthew Dillonoption is used.
3024af18995SSascha Wildner.El
3030592e24dSSascha Wildner.Sh DEVICES
3040592e24dSSascha WildnerA number of virtual device drivers exist to supplement the virtual kernel.
3050592e24dSSascha Wildner.Ss Disk device
3060592e24dSSascha WildnerThe
3070592e24dSSascha Wildner.Nm vkd
3080592e24dSSascha Wildnerdriver allows for up to 16
3090592e24dSSascha Wildner.Xr vn 4
3100592e24dSSascha Wildnerbased disk devices.
3110592e24dSSascha WildnerThe root device will be
3120592e24dSSascha Wildner.Li vkd0
3130592e24dSSascha Wildner(see
3140592e24dSSascha Wildner.Sx EXAMPLES
3150592e24dSSascha Wildnerfor further information on how to prepare a root image).
31698b2ba80SSascha Wildner.Ss CD-ROM device
31798b2ba80SSascha WildnerThe
31898b2ba80SSascha Wildner.Nm vcd
31998b2ba80SSascha Wildnerdriver allows for up to 16 virtual CD-ROM devices.
32098b2ba80SSascha WildnerBasically this is a read only
32198b2ba80SSascha Wildner.Nm vkd
32298b2ba80SSascha Wildnerdevice with a block size of 2048.
3230592e24dSSascha Wildner.Ss Network interface
3240592e24dSSascha WildnerThe
3250592e24dSSascha Wildner.Nm vke
3260592e24dSSascha Wildnerdriver supports up to 16 virtual network interfaces which are associated with
3270592e24dSSascha Wildner.Xr tap 4
3280592e24dSSascha Wildnerdevices on the host.
3290592e24dSSascha WildnerFor each
3300592e24dSSascha Wildner.Nm vke
3310592e24dSSascha Wildnerdevice, the per-interface read only
3320592e24dSSascha Wildner.Xr sysctl 3
3330592e24dSSascha Wildnervariable
3340592e24dSSascha Wildner.Va hw.vke Ns Em X Ns Va .tap_unit
3350592e24dSSascha Wildnerholds the unit number of the associated
3360592e24dSSascha Wildner.Xr tap 4
3370592e24dSSascha Wildnerdevice.
33833c27d6cSAntonio Huete Jimenez.Pp
33933c27d6cSAntonio Huete JimenezBy default, half of the total mbuf clusters available is distributed equally
340c6e9e022SSascha Wildneramong all the vke devices up to 256.
34149af6f0fSSascha WildnerThis can be overridden with the tunable
34233c27d6cSAntonio Huete Jimenez.Va hw.vke.max_ringsize .
34333c27d6cSAntonio Huete JimenezTake into account the number passed will be aligned to the lower power of two.
3441e4d9fd9SSascha Wildner.Sh SIGNALS
345bb195a01SMatthew DillonThe virtual kernel only enables
346bb195a01SMatthew Dillon.Dv SIGQUIT
347bb195a01SMatthew Dillonand
348bb195a01SMatthew Dillon.Dv SIGTERM
349bb195a01SMatthew Dillonwhile operating in regular console mode.
350bb195a01SMatthew DillonSending
3511e4d9fd9SSascha Wildner.Ql \&^\e
3521e4d9fd9SSascha Wildner.Pq Dv SIGQUIT
353bb195a01SMatthew Dillonto the virtual kernel causes the virtual kernel to enter its internal
3541e4d9fd9SSascha Wildner.Xr ddb 4
355bb195a01SMatthew Dillondebugger and re-enable all other terminal signals.
356bb195a01SMatthew DillonSending
357bb195a01SMatthew Dillon.Dv SIGTERM
358bb195a01SMatthew Dillonto the virtual kernel triggers a clean shutdown by passing a
359bb195a01SMatthew Dillon.Dv SIGUSR2
360bb195a01SMatthew Dillonto the virtual kernel's
361bb195a01SMatthew Dillon.Xr init 8
362bb195a01SMatthew Dillonprocess.
363974b26bfSSascha Wildner.Sh DEBUGGING
364974b26bfSSascha WildnerIt is possible to directly gdb the virtual kernel's process.
365974b26bfSSascha WildnerIt is recommended that you do a
366974b26bfSSascha Wildner.Ql handle SIGSEGV noprint
3674010bf94SNicolas Theryto ignore page faults processed by the virtual kernel itself and
368e7c2f376SNicolas Thery.Ql handle SIGUSR1 noprint
36920ce32a9SSascha Wildnerto ignore signals used for simulating inter-processor interrupts.
370a154d422SThomas Nikolajsen.Sh FILES
371ec363e75SSascha Wildner.Bl -tag -width ".It Pa /sys/config/VKERNEL64" -compact
372ec363e75SSascha Wildner.It Pa /dev/vcdX
373ec363e75SSascha Wildner.Nm vcd
374ec363e75SSascha Wildnerdevice nodes
375ec363e75SSascha Wildner.It Pa /dev/vkdX
376ec363e75SSascha Wildner.Nm vkd
377ec363e75SSascha Wildnerdevice nodes
378163fd4e7SAntonio Huete Jimenez.It Pa /sys/config/VKERNEL64
379a154d422SThomas Nikolajsen.El
380163fd4e7SAntonio Huete Jimenez.Pp
381163fd4e7SAntonio Huete Jimenez.Nm
382dd7331feSSascha Wildnerconfiguration file, for
383163fd4e7SAntonio Huete Jimenez.Xr config 8 .
384a68e0df0SSascha Wildner.Sh CONFIGURATION FILES
385a68e0df0SSascha WildnerYour virtual kernel is a complete
386a68e0df0SSascha Wildner.Dx
387a68e0df0SSascha Wildnersystem, but you might not want to run all the services a normal kernel runs.
388a68e0df0SSascha WildnerHere is what a typical virtual kernel's
389a68e0df0SSascha Wildner.Pa /etc/rc.conf
390a68e0df0SSascha Wildnerfile looks like, with some additional possibilities commented out.
391a68e0df0SSascha Wildner.Bd -literal
392a68e0df0SSascha Wildnerhostname="vkernel"
393a68e0df0SSascha Wildnernetwork_interfaces="lo0 vke0"
394a68e0df0SSascha Wildnerifconfig_vke0="DHCP"
395a68e0df0SSascha Wildnersendmail_enable="NO"
396a68e0df0SSascha Wildner#syslog_enable="NO"
397a68e0df0SSascha Wildnerblanktime="NO"
398a68e0df0SSascha Wildner.Ed
39954ea00b8SMatthew Dillon.Sh BOOT DRIVE SELECTION
40054ea00b8SMatthew DillonYou can override the default boot drive selection and filesystem
40154ea00b8SMatthew Dillonusing a kernel environment variable.  Note that the filesystem
40254ea00b8SMatthew Dillonselected must be compiled into the vkernel and not loaded as
40354ea00b8SMatthew Dillona module.  You need to escape some quotes around the variable data
40454ea00b8SMatthew Dillonto avoid mis-interpretation of the colon in the
40554ea00b8SMatthew Dillon.Fl e
40654ea00b8SMatthew Dillonoption.  For example:
40754ea00b8SMatthew Dillon.Pp
40854ea00b8SMatthew Dillon.Fl e
40954ea00b8SMatthew Dillonvfs.root.mountfrom=\\"hammer:vkd0s1d\\"
410163fd4e7SAntonio Huete Jimenez.Sh DISKLESS OPERATION
411163fd4e7SAntonio Huete JimenezTo boot a
412163fd4e7SAntonio Huete Jimenez.Nm
413163fd4e7SAntonio Huete Jimenezfrom a NFS root, a number of tunables need to be set:
414163fd4e7SAntonio Huete Jimenez.Bl -tag -width indent
415163fd4e7SAntonio Huete Jimenez.It Va boot.netif.ip
416163fd4e7SAntonio Huete JimenezIP address to be set in the vkernel interface.
417163fd4e7SAntonio Huete Jimenez.It Va boot.netif.netmask
418163fd4e7SAntonio Huete JimenezNetmask for the IP to be set.
419163fd4e7SAntonio Huete Jimenez.It Va boot.netif.name
420163fd4e7SAntonio Huete JimenezNetwork interface name inside the vkernel.
421163fd4e7SAntonio Huete Jimenez.It Va boot.nfsroot.server
422163fd4e7SAntonio Huete JimenezHost running
423163fd4e7SAntonio Huete Jimenez.Xr nfsd 8 .
424163fd4e7SAntonio Huete Jimenez.It Va boot.nfsroot.path
425163fd4e7SAntonio Huete JimenezHost path where a world and distribution
426163fd4e7SAntonio Huete Jimeneztargets are properly installed.
427163fd4e7SAntonio Huete Jimenez.El
428163fd4e7SAntonio Huete Jimenez.Pp
429163fd4e7SAntonio Huete JimenezSee an example on how to boot a diskless
430163fd4e7SAntonio Huete Jimenez.Nm
431163fd4e7SAntonio Huete Jimenezin the
432163fd4e7SAntonio Huete Jimenez.Sx EXAMPLES
433163fd4e7SAntonio Huete Jimenezsection.
434c8e7d028SSascha Wildner.Sh EXAMPLES
4354af18995SSascha WildnerA couple of steps are necessary in order to prepare the system to build and
4364af18995SSascha Wildnerrun a virtual kernel.
4374af18995SSascha Wildner.Ss Setting up the filesystem
4384af18995SSascha WildnerThe
4394af18995SSascha Wildner.Nm
4404af18995SSascha Wildnerarchitecture needs a number of files which reside in
4414af18995SSascha Wildner.Pa /var/vkernel .
4424af18995SSascha WildnerSince these files tend to get rather big and the
4434af18995SSascha Wildner.Pa /var
4444af18995SSascha Wildnerpartition is usually of limited size, we recommend the directory to be
4454af18995SSascha Wildnercreated in the
4464af18995SSascha Wildner.Pa /home
4474af18995SSascha Wildnerpartition with a link to it in
4484af18995SSascha Wildner.Pa /var :
449c8e7d028SSascha Wildner.Bd -literal
450c009fcfaSThomas Nikolajsenmkdir -p /home/var.vkernel/boot
4514af18995SSascha Wildnerln -s /home/var.vkernel /var/vkernel
4524af18995SSascha Wildner.Ed
4534af18995SSascha Wildner.Pp
4544af18995SSascha WildnerNext, a filesystem image to be used by the virtual kernel has to be
45562aea38eSSascha Wildnercreated and populated (assuming world has been built previously).
45662aea38eSSascha WildnerIf the image is created on a UFS filesystem you might want to pre-zero it.
45749802d4eSMatthew DillonOn a HAMMER filesystem you should just truncate-extend to the image size
45849802d4eSMatthew Dillonas HAMMER does not re-use data blocks already present in the file.
459c8e7d028SSascha Wildner.Bd -literal
460f73862c5SSascha Wildnervnconfig -c -S 2g -T vn0 /var/vkernel/rootimg.01
46158c55700SSascha Wildnerdisklabel -r -w vn0s0 auto
462c009fcfaSThomas Nikolajsendisklabel -e vn0s0	# add `a' partition with fstype `4.2BSD'
46358c55700SSascha Wildnernewfs /dev/vn0s0a
46458c55700SSascha Wildnermount /dev/vn0s0a /mnt
465c8e7d028SSascha Wildnercd /usr/src
466c8e7d028SSascha Wildnermake installworld DESTDIR=/mnt
467c8e7d028SSascha Wildnercd etc
468c8e7d028SSascha Wildnermake distribution DESTDIR=/mnt
4697a3238b8SMatthew Dillonecho '/dev/vkd0s0a	/	ufs	rw	1  1' >/mnt/etc/fstab
4707a3238b8SMatthew Dillonecho 'proc		/proc	procfs	rw	0  0' >>/mnt/etc/fstab
4717834fbccSSascha Wildner.Ed
4727834fbccSSascha Wildner.Pp
4737834fbccSSascha WildnerEdit
4747834fbccSSascha Wildner.Pa /mnt/etc/ttys
4757834fbccSSascha Wildnerand replace the
4767834fbccSSascha Wildner.Li console
4777834fbccSSascha Wildnerentry with the following line and turn off all other gettys.
4787834fbccSSascha Wildner.Bd -literal
4797834fbccSSascha Wildnerconsole	"/usr/libexec/getty Pc"		cons25	on  secure
4807834fbccSSascha Wildner.Ed
4817834fbccSSascha Wildner.Pp
482eed435ddSStathis KamperisReplace
483eed435ddSStathis Kamperis.Li \&Pc
484eed435ddSStathis Kamperiswith
485eed435ddSStathis Kamperis.Li al.Pc
486eed435ddSStathis Kamperisif you would like to automatically log in as root.
487eed435ddSStathis Kamperis.Pp
4887834fbccSSascha WildnerThen, unmount the disk.
4897834fbccSSascha Wildner.Bd -literal
4904af18995SSascha Wildnerumount /mnt
4914af18995SSascha Wildnervnconfig -u vn0
4924af18995SSascha Wildner.Ed
4934af18995SSascha Wildner.Ss Compiling the virtual kernel
4944af18995SSascha WildnerIn order to compile a virtual kernel use the
495dd7331feSSascha Wildner.Li VKERNEL64
4964af18995SSascha Wildnerkernel configuration file residing in
497a154d422SThomas Nikolajsen.Pa /sys/config
4984af18995SSascha Wildner(or a configuration file derived thereof):
499c8e7d028SSascha Wildner.Bd -literal
5004af18995SSascha Wildnercd /usr/src
501dd7331feSSascha Wildnermake -DNO_MODULES buildkernel KERNCONF=VKERNEL64
502dd7331feSSascha Wildnermake -DNO_MODULES installkernel KERNCONF=VKERNEL64 DESTDIR=/var/vkernel
5034af18995SSascha Wildner.Ed
5044af18995SSascha Wildner.Ss Enabling virtual kernel operation
5054af18995SSascha WildnerA special
5064af18995SSascha Wildner.Xr sysctl 8 ,
5074af18995SSascha Wildner.Va vm.vkernel_enable ,
5084af18995SSascha Wildnermust be set to enable
5094af18995SSascha Wildner.Nm
5104af18995SSascha Wildneroperation:
511c8e7d028SSascha Wildner.Bd -literal
5124af18995SSascha Wildnersysctl vm.vkernel_enable=1
5134af18995SSascha Wildner.Ed
51409b03fffSSascha Wildner.Ss Configuring the network on the host system
51509b03fffSSascha WildnerIn order to access a network interface of the host system from the
51609b03fffSSascha Wildner.Nm ,
51709b03fffSSascha Wildneryou must add the interface to a
51809b03fffSSascha Wildner.Xr bridge 4
51909b03fffSSascha Wildnerdevice which will then be passed to the
52009b03fffSSascha Wildner.Fl I
52109b03fffSSascha Wildneroption:
52209b03fffSSascha Wildner.Bd -literal
52309b03fffSSascha Wildnerkldload if_bridge.ko
52409b03fffSSascha Wildnerkldload if_tap.ko
52509b03fffSSascha Wildnerifconfig bridge0 create
52609b03fffSSascha Wildnerifconfig bridge0 addm re0	# assuming re0 is the host's interface
52709b03fffSSascha Wildnerifconfig bridge0 up
52809b03fffSSascha Wildner.Ed
5294af18995SSascha Wildner.Ss Running the kernel
5304af18995SSascha WildnerFinally, the virtual kernel can be run:
531c8e7d028SSascha Wildner.Bd -literal
53279b58aaeSMatthew Dilloncd /var/vkernel
5337374a7a6SMatthew Dillon\&./boot/kernel/kernel -m 1g -r rootimg.01 -I auto:bridge0
5344af18995SSascha Wildner.Ed
535c8e7d028SSascha Wildner.Pp
53679b58aaeSMatthew DillonYou can issue the
53779b58aaeSMatthew Dillon.Xr reboot 8 ,
53879b58aaeSMatthew Dillon.Xr halt 8 ,
53979b58aaeSMatthew Dillonor
54079b58aaeSMatthew Dillon.Xr shutdown 8
54179b58aaeSMatthew Dilloncommands from inside a virtual kernel.
54279b58aaeSMatthew DillonAfter doing a clean shutdown the
543c8e7d028SSascha Wildner.Xr reboot 8
54479b58aaeSMatthew Dilloncommand will re-exec the virtual kernel binary while the other two will
54579b58aaeSMatthew Dilloncause the virtual kernel to exit.
5467374a7a6SMatthew Dillon.Ss Diskless operation (vkernel as a NFS client)
547163fd4e7SAntonio Huete JimenezBooting a
548163fd4e7SAntonio Huete Jimenez.Nm
549163fd4e7SAntonio Huete Jimenezwith a
550163fd4e7SAntonio Huete Jimenez.Xr vknetd 8
5517374a7a6SMatthew Dillonnetwork configuration.  The line continuation backslashes have been
5527374a7a6SMatthew Dillonomitted.  For convenience and to reduce confusion I recommend mounting
5537374a7a6SMatthew Dillonthe server's remote vkernel root onto the host running the vkernel binary
5547374a7a6SMatthew Dillonusing the same path as the NFS mount.  It is assumed that a full system
5557374a7a6SMatthew Dilloninstall has been made to /var/vkernel/root using a kernel KERNCONF=VKERNEL64
5567374a7a6SMatthew Dillonfor the kernel build.
557163fd4e7SAntonio Huete Jimenez.Bd -literal
5587374a7a6SMatthew Dillon\&/var/vkernel/root/boot/kernel/kernel
5597374a7a6SMatthew Dillon	-m 1g -n 4 -I /var/run/vknet
5607374a7a6SMatthew Dillon	-e boot.netif.ip=10.100.0.2
561163fd4e7SAntonio Huete Jimenez	-e boot.netif.netmask=255.255.0.0
5627374a7a6SMatthew Dillon	-e boot.netif.gateway=10.100.0.1
563163fd4e7SAntonio Huete Jimenez	-e boot.netif.name=vke0
5647374a7a6SMatthew Dillon	-e boot.nfsroot.server=10.0.0.55
5657374a7a6SMatthew Dillon	-e boot.nfsroot.path=/var/vkernel/root
566163fd4e7SAntonio Huete Jimenez.Ed
5677374a7a6SMatthew Dillon.Pp
5687374a7a6SMatthew DillonIn this example vknetd is assumed to have been started as shown below, before
5697374a7a6SMatthew Dillonrunning the vkernel, using an unbridged TAP configuration routed through
5707374a7a6SMatthew Dillonthe host.
5717374a7a6SMatthew DillonIP forwarding must be turned on, and in this example the server resides
5727374a7a6SMatthew Dillonon a different network accessible to the host executing the vkernel but not
5737374a7a6SMatthew Dillondirectly on the vkernel's subnet.
5747374a7a6SMatthew Dillon.Bd -literal
5757374a7a6SMatthew Dillonkldload if_tap
5767374a7a6SMatthew Dillonsysctl net.inet.ip.forwarding=1
5777374a7a6SMatthew Dillonvknetd -t tap0 10.100.0.1/16
5787374a7a6SMatthew Dillon.Ed
5797374a7a6SMatthew Dillon.Pp
5807374a7a6SMatthew DillonYou can run multiple vkernels trivially with the same NFS root as long as
5817374a7a6SMatthew Dillonyou assign each one a different IP on the subnet (2, 3, 4, etc).  You
5827374a7a6SMatthew Dillonshould also be careful with certain directories, particularly /var/run
5837374a7a6SMatthew Dillonand possibly also /var/db depending on what your vkernels are going to be
5847374a7a6SMatthew Dillondoing.
5857374a7a6SMatthew DillonThis can complicate matters with /var/db/pkg.
58634caba04SMatthew Dillon.Sh BUILDING THE WORLD UNDER A VKERNEL
58734caba04SMatthew DillonThe virtual kernel platform does not have all the header files expected
58834caba04SMatthew Dillonby a world build, so the easiest thing to do right now is to specify a
589579b67d2SSascha Wildnerpc64 (in a 64 bit vkernel) target when building the world under a virtual
590579b67d2SSascha Wildnerkernel, like this:
59134caba04SMatthew Dillon.Bd -literal
592579b67d2SSascha Wildnervkernel# make MACHINE_PLATFORM=pc64 buildworld
593579b67d2SSascha Wildnervkernel# make MACHINE_PLATFORM=pc64 installworld
59434caba04SMatthew Dillon.Ed
5954af18995SSascha Wildner.Sh SEE ALSO
596666855caSSascha Wildner.Xr vknet 1 ,
59709b03fffSSascha Wildner.Xr bridge 4 ,
5988988c073SSascha Wildner.Xr ifmedia 4 ,
59909b03fffSSascha Wildner.Xr tap 4 ,
600c8e7d028SSascha Wildner.Xr vn 4 ,
601a154d422SThomas Nikolajsen.Xr sysctl.conf 5 ,
602c8e7d028SSascha Wildner.Xr build 7 ,
603b96eeefdSSascha Wildner.Xr config 8 ,
604c8e7d028SSascha Wildner.Xr disklabel 8 ,
60509b03fffSSascha Wildner.Xr ifconfig 8 ,
606dbfd168bSMatthew Dillon.Xr vknetd 8 ,
607c8e7d028SSascha Wildner.Xr vnconfig 8
608c203b6f9SSascha Wildner.Rs
609c203b6f9SSascha Wildner.%A Aggelos Economopoulos
610c203b6f9SSascha Wildner.%D March 2007
611c203b6f9SSascha Wildner.%T "A Peek at the DragonFly Virtual Kernel"
612c203b6f9SSascha Wildner.Re
6134af18995SSascha Wildner.Sh HISTORY
6144af18995SSascha WildnerVirtual kernels were introduced in
6154af18995SSascha Wildner.Dx 1.7 .
6164af18995SSascha Wildner.Sh AUTHORS
6174af18995SSascha Wildner.An -nosplit
6184af18995SSascha Wildner.An Matt Dillon
6194af18995SSascha Wildnerthought up and implemented the
6204af18995SSascha Wildner.Nm
6210592e24dSSascha Wildnerarchitecture and wrote the
6220592e24dSSascha Wildner.Nm vkd
6230592e24dSSascha Wildnerdevice driver.
6240592e24dSSascha Wildner.An Sepherosa Ziehau
6250592e24dSSascha Wildnerwrote the
6260592e24dSSascha Wildner.Nm vke
6270592e24dSSascha Wildnerdevice driver.
6284af18995SSascha WildnerThis manual page was written by
6294af18995SSascha Wildner.An Sascha Wildner .
630