Cachefilesd mit Ramdisk (tmpfs)

Für ein Projekt kam ich in die Verlegenheit einen NFS Cache aufzusetzen um Zugriffe zu optimieren.

Um wirklich die beste Performance hin zu bekommen, entschied ich mich den Cache zusätzlich noch auf eine Ramdisk auszulagern.

Voraussetzung ist hier Ubuntu 12.04 (evtl. geht es auch mit andere Linuxen, aber ich nutze Ubuntu) da hier das CacheFS für NFS im Kernel integriert ist. Natürlich kann man auch den Kernel selber kompilieren, aber das ist mir zuviel Wartungsaufwand. Es ist auch nur NFS aktiviert, CIFS und anderes nicht.

Ich nutze immer 50% des verfügbaren Rams, mache ein maximal großes Loopfile und mounte das dann um es zum cachen zu nutzen.

Cachefilesd ist relativ schnell aufgesetzt.

aptitude install cachefilesd

dann in

/etc/default/cachefilesd
RUN=yes

und das Configfile /etc/cachefilesd.conf anpassen. Die anderen Option am besten erstmal so lassen (wer wissen will was die tun man cachfilesd.conf )

dir /cache/
tag [NAME des Caches]

Nicht beim Systemstart starten.

update-rc.d cachefilesd disable

Damit wäre cachfilesd auch bereits fertig.

Dem Eintrag zum mounten des NFS-Shares muss man noch die Option fsc verpassen.
z.B.

nfs suid,dev,exec,rsize=1048576,wsize=1048576,udp,fsc 0 0

Nun kommt die RamDisk:

nano /etc/fstab

dort ganz unten eintragen:

tmpfs /media/tmpfs default,tmpfs size=50% 0 0

Nun erstellt man am besten ein Skript das bei jedem Start oder auch manuell ausgeführt werden kann.

nano /usr/local/sbin/mkramloop.sh

—————–

#!/bin/bash

echo Starte Cache....

dd if=/dev/zero of=/media/tmpfs/cache bs=1024
losetup /dev/loop0 /media/tmpfs/cache
mkfs.ext4 /dev/loop0
tune2fs -m0 /dev/loop0
mount -o user_xattr /dev/loop0 /cache/
/etc/init.d/cachefilesd start

—————–

den Pfad zum Skript fügt man dann noch in die rc.local ein.

/usr/local/sbin/mkramloop.sh

Sicher geht es eleganter, aber es funktioniert.

Dieser Beitrag wurde unter Computer abgelegt und mit , , , , verschlagwortet. Setze ein Lesezeichen auf den Permalink.