# Ramdisk Verständnisfrage für KVM Gäste und Host

## LinuxTom

Hi Leute,

bevor ich mein System jetzt zig Mal abschieße vorher eine Frage, da Google mir die nicht wirklich beantworten kann.

Ich habe in meinem Server 24GB Ram. Von denen habe ich eine 12GB /tmp/ Partition gebildet (tmpfs). Alles gut. Bisher habe ich auf dieser meine vielen Gentoo-Clients vorkompilieren lassen (PORTAGE_TMPDIR). In seperaten CHROOT's. Alles gut. Nun haben sich jedoch so langsam (in den letzten 13 Jahren) die ganzen CPU's so unterschiedlich entwickelt, dass ich immer einen gemeinsamen Nenner zwischen Server (der alles bildet) und Client finden musste. Also wurden die Clients ausgebremst. Also Schwenk auf KVM und QEMU. Alles fein. Nun will ich jedoch den Gast-KVM's auch eine RAMDISK als /tmp/ zur Verfügung stellen. Hat jemand von Euch eine Idee, wie ich das machen kann? So dass ggf eine zu klein definierte RAMDISK auf SWAP ausgelagert wird innerhalb der VM? Und dass sich alle Gäste und der Server vielleicht insgesamt eine maximal festgelegte Größe teilen und dann auf SWAP auslagern?

Auf Festplatte dauert bspw. ein GCC 40 Minuten. Auf RAMDISK nur noch 10 Minuten.

----------

## bell

Also ich setze bei ramfs immer den Parameter "size=100%" Dadurch kann die ramfs den kompletten RAM belegen. Da eine ramfs nur soviel RAM tatsächlich belegt wie sie voll ist, machen auch 3x ramfs je 100% RAM nichts aus. Wenn der Platz knapp wird, wird natürlich geswappt, auch Teile aus der ramfs.

Hm, wie würde ich es in eine KVM einbinden: Ich würde eine (oder mehrere) ramfs auf dem Host anlegen und diese dann über 9p_virtio den VM's zur Verfügung stellen http://www.linux-kvm.org/page/9p_virtio

(ungetestet)

----------

## Christian99

nicht direkt zur frage über ramdiks und virtuellen maschinen, aber hast du schon mal was von ROOT und PORTAGE_CONFIGROOT gehört?

damit kannst du zb mit dem kompiler auf deinem system für andere systeme optimiert bauen. Schau dir mal am besten https://www.gentoo.org/proj/en/base/embedded/handbook/?part=1&chap=3 an. ich glaube damit kannst du dir die virtuellen maschinen sparen.

----------

## LinuxTom

@bell:

Danke, genau das habe ich gesucht. Da ich jedoch in meinen Kernels das nicht aktiviert habe, bieten mir das weder qemu noch der virt-manager an. Ich werde es anschalten und aktivieren. Dann sehe ich weiter und berichte.

----------

## LinuxTom

 *Christian99 wrote:*   

> damit kannst du zb mit dem kompiler auf deinem system für andere systeme optimiert bauen.

 

Ja. Distcc, chroot, cross-compile usw. Alles schon durch. Nicht sicher genug, wenn der Client 300km weit weg steht und dann doch ein Programm fehl schlägt. Man kann wirklich nur mit qemu den Prozessor des Zielsystem nachbilden und die Programme auch richtig testen. Unterm Strich erspart mir QEMU/KVM viel Fummelei und Unsicherheit, wenn das Host-System ein Update braucht. Erst recht, weil mein Host gleichzeitig mein VDR-Server ist. Wehe, die Lieblingsserie kann nicht geschaut werden, dann ist der Frieden zu hause aus. Darum wandert jetzt alles in entsprechende KVM-VM's. Als erstes mein VDR.

----------

## Christian99

ok, wenn du testen willst wirds natürlich schwierig  :Smile: 

----------

## LinuxTom

Vielleicht kann mir jemand helfen, da der virt-manager mir den Punkt, ein Filesystem als Gerät hinzuzufügen, nicht anbietet.

Die 9P-Sachen habe ich den Kernel des Hosts und des Gastes fest einkompiliert. Leider funktioniert es nicht. Auch wenn ich die Einträge manuell in die XML der Domain eintrage, werden die nicht als Parameter für qemu übergeben. Siehe hier.

Vielleicht hat jemand eine Idee, wieso, wenn ich die Konfiguration hier schreibe. *hoff*

```
[I] app-emulation/qemu-kvm

Installed versions:  0.15.1-r1!t(12:39:15 25.09.2013)(aio alsa bluetooth jpeg ncurses png qemu_softmmu_targets_i386 qemu_softmmu_targets_x86_64 qemu_user_targets_i386 qemu_user_targets_x86_64 sasl sdl spice ssl threads vhost-net xattr -brltty -curl -debug -esd -fdt -hardened -nss -pulseaudio -qemu-ifup -qemu_softmmu_targets_arm -qemu_softmmu_targets_cris -qemu_softmmu_targets_m68k -qemu_softmmu_targets_microblaze -qemu_softmmu_targets_mips -qemu_softmmu_targets_mips64 -qemu_softmmu_targets_mips64el -qemu_softmmu_targets_mipsel -qemu_softmmu_targets_ppc -qemu_softmmu_targets_ppc64 -qemu_softmmu_targets_ppcemb -qemu_softmmu_targets_sh4 -qemu_softmmu_targets_sh4eb -qemu_softmmu_targets_sparc -qemu_softmmu_targets_sparc64 -qemu_user_targets_alpha -qemu_user_targets_arm -qemu_user_targets_armeb -qemu_user_targets_cris -qemu_user_targets_m68k -qemu_user_targets_microblaze -qemu_user_targets_mips -qemu_user_targets_mipsel -qemu_user_targets_ppc -qemu_user_targets_ppc64 -qemu_user_targets_ppc64abi32 -qemu_user_targets_sh4 -qemu_user_targets_sh4eb -qemu_user_targets_sparc -qemu_user_targets_sparc32plus -qemu_user_targets_sparc64 -rbd -vde -xen)
```

```
Install prefix    /usr

BIOS directory    /usr/share/qemu

binary directory  /usr/bin

library directory /usr/lib

config directory  /etc

Manual directory  /usr/share/man

ELF interp prefix /usr/gnemul/qemu-%M

Source path       /tmp/portage/app-emulation/qemu-kvm-0.15.1-r1/work/qemu-kvm-0.15.1

C compiler        x86_64-pc-linux-gnu-gcc

Host C compiler   x86_64-pc-linux-gnu-gcc

CFLAGS            -O2 -g -march=core2 -mcx16 -msahf -mpopcnt -msse4.2 --param l1-cache-size=32 --param l1-cache-line-size=64 --param l2-cache-size=256 -mtune=core2 -O2 -pipe

QEMU_CFLAGS       -m64 -D_FORTIFY_SOURCE=2 -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -Wstrict-prototypes -Wredundant-decls -Wall -Wundef -Wwrite-strings -Wmissing-prototypes -fno-strict-aliasing  -fstack-protector-all -Wendif-labels -Wmissing-include-dirs -Wempty-body -Wnested-externs -Wformat-security -Wformat-y2k -Winit-self -Wignored-qualifiers -Wold-style-declaration -Wold-style-definition -Wtype-limits -I/usr/include/libpng15   -I/usr/include/spice-server -I/usr/include/pixman-1 -I/usr/kerberos/include -I/usr/include/spice-1  

LDFLAGS           -Wl,--warn-common -m64 -g -Wl,-z,execheap -Wl,-O1 -Wl,--as-needed

make              make

install           install

python            python

smbd              /usr/sbin/smbd

host CPU          x86_64

host big endian   no

target list        i386-softmmu x86_64-softmmu  i386-linux-user x86_64-linux-user

tcg debug enabled no

Mon debug enabled no

gprof enabled     no

sparse enabled    no

strip binaries    no

profiler          no

static build      no

-Werror enabled   no

SDL support       yes

curses support    yes

curl support      no

check support     no

mingw32 support   no

Audio drivers     sdl alsa oss

Extra audio cards ac97 es1370 sb16 hda

Block whitelist   

Mixer emulation   no

VNC support       yes

VNC TLS support   yes

VNC SASL support  yes

VNC JPEG support  yes

VNC PNG support   yes

VNC thread        yes

xen support       no

CPU emulation     yes

brlapi support    no

bluez  support    yes

Documentation     yes

NPTL support      yes

GUEST_BASE        yes

PIE user targets  no

vde support       no

IO thread         yes

Linux AIO support yes

ATTR/XATTR support yes

Install blobs     yes

KVM support       yes

KVM PIT support   yes

KVM device assig. yes

fdt support       no

preadv support    yes

fdatasync         yes

madvise           yes

posix_madvise     yes

uuid support      yes

vhost-net support yes

Trace backend     nop

Trace output file trace-<pid>

spice support     yes

rbd support       no

xfsctl support    yes

nss used          no

usb net redir     no

OpenGL support    yes

build guest agent yes
```

```
[I] app-emulation/libvirt

Installed versions:  0.9.8(12:41:19 25.09.2013)(avahi caps elibc_glibc json libvirtd lvm lxc nfs nls numa parted pcap policykit python qemu sasl udev uml virt-network -debug -iscsi -macvtap -openvz -phyp -selinux -virtualbox -xen)
```

```
configure: Configuration summary

configure: =====================

configure: 

configure: Drivers

configure: 

configure:      Xen: no

configure:     QEMU: yes

configure:      UML: yes

configure:   OpenVZ: no

configure:   VMware: yes

configure:     VBox: no

configure:   XenAPI: no

configure: xenlight: no

configure:      LXC: yes

configure:     PHYP: no

configure:      ESX: yes

configure:  Hyper-V: no

configure:     Test: yes

configure:   Remote: yes

configure:  Network: yes

configure: Libvirtd: yes

configure:    netcf: no

configure:  macvtap: no

configure: virtport: no

configure: 

configure: Storage Drivers

configure: 

configure:      Dir: yes

configure:       FS: yes

configure:    NetFS: yes

configure:      LVM: yes

configure:    iSCSI: no

configure:     SCSI: yes

configure:    mpath: yes

configure:     Disk: yes

configure: 

configure: Security Drivers

configure: 

configure:  SELinux: no

configure: AppArmor: no

configure: 

configure: Driver Loadable Modules

configure: 

configure:   dlopen: no

configure: 

configure: Libraries

configure: 

configure:   libxml: -I/usr/include/libxml2   -lxml2  

configure:   dlopen: -ldl

configure:  libcurl: -DCURL_DISABLE_TYPECHECK   -lcurl  

configure: openwsman: no

configure:  libssh2:  

configure:   gnutls:   -lgnutls   -lgcrypt

configure:     sasl:   -lsasl2

configure:     yajl:   -lyajl

configure:  sanlock: no

configure:    avahi: -D_REENTRANT   -lavahi-common -lavahi-client  

configure:   polkit: /usr/bin/pkcheck (version 1)

configure:    audit: no

configure:  selinux: no

configure: apparmor: no

configure:  numactl:  -lnuma

configure:    capng:  -lcap-ng

configure:      xen: no

configure:   xenapi: no

configure: xenlight: no

configure:      hal: no

configure:     udev:   -ludev -lrt     -lpciaccess  

configure:    netcf: no

configure:     pcap: -I/usr/include -L/usr/lib64 -Wl,-rpath,/usr/lib64 -lpcap

configure:       nl:   -lnl  

configure:    mscom: no

configure:      xdr: 

configure: 

configure: Test suite

configure: 

configure:    Coverage: no

configure:   Alloc OOM: no
```

----------

## LinuxTom

Der normale Satz, wer lesen kann ist klar im Vorteil, funktioniert hier leider nicht:

Im QEMU-Wiki steht als Beispiel:

 *Quote:*   

>  <filesystem type='mount' accessmode='$security_model'>
> 
>    <source dir='$hostpath'/>
> 
>    <target dir='$mount_tag'/>
> ...

 

Auch in LibVirt steht, dass der Parameter driver Optional ist:

 *Quote:*   

> driver
> 
>     The optional driver element allows specifying further details related to the hypervisor driver used to provide the filesystem. Since 1.0.6
> 
>         If the hypervisor supports multiple backend drivers, then the type attribute selects the primary backend driver name, while the format attribute provides the format type. For example, LXC supports a type of "loop", with a format of "raw" or "nbd" with any format. QEMU supports a type of "path" or "handle", but no formats.

 

Wenn ich jedoch den Parameter setze, funktioniert es:

 *Quote:*   

> <filesystem type='mount' accessmode='mapped'>
> 
>    <driver type='path'/>
> 
>    <source dir='/tmp/kvm'/>
> ...

 

Da meine qemu-kvm und libvirt - Versionen vielleicht doch etwas alt sind, kommt in meinem Gast der Fehler, egal was ich für Kompinationen der Einstellungen nehme. So funktioniert auch der driver=handle nicht:

 *Quote:*   

> fsdev: fstype handle not found

 

Ich werde wohl erst einmal das gesamte System aktualisieren und so lange die längeren Kompilierzeiten in kauf nehmen.

 *Quote:*   

> >>> Emerging (1 of 3) sys-devel/binutils-2.22-r1
> 
> [Errno 1] Operation not permitted: '/tmp/kvm/portage/.sys-devel.portage_lockfile': chown('/tmp/kvm/portage/.sys-devel.portage_lockfile', -1, 250)
> 
> Cannot chown a lockfile: '/tmp/kvm/portage/.sys-devel.portage_lockfile'
> ...

 

Zumal auch der virt-manager diese manuelle Konfiguration nicht auslesen kann. Fehleranfällig!

----------

