"Christmas - the time to fix the computers of your loved ones" « Lord Wyrm

tmpfs,RAMDISK,ext2,shmfs?

Armax 17.05.2007 - 08:32 2000 3 Thread rating
Posts

Armax

OC Addicted
Registered: Apr 2004
Location: .
Posts: 1058
Hallo Leute,

Obwohl ich ein ziemlicher Linux noob bin, bastl ich schon fleißig an meinem sys rum und möchte mir nun ein ramfs erstellen. Leider verwirrt mich dabei, dass da gleich mehrere Varianten gibt. Deshalb auch gleich meine Frage:
Was ist eigentlich der Unterschied zwischen nen tmpfs (mount none -t tmpfs /mnt/ramfs) erstellen filesystem und einem mit ext2 (mkfs.ext2 /dev/ram0 && mount /dev/ram0 -t ext2 /mnt/ramfs)? Bzw. is "shmfs" nur eine alte Bezeichnung von tmpfs oder ist das wieder was anderes? Was macht eigentlich der RAMDISK-Treiber im Kernel?

tia für die antworten :)
armax

COLOSSUS

Administrator
Frickler
Avatar
Registered: Dec 2000
Location: ~
Posts: 11890
Schoen, man darf beim Basteln und Herumdoktorn nur keine falsche Zurueckhaltung ueben :) Soweit ich mich auskenne, will ich deinen Wissensdurst zu stillen versuchen:

tmpfs wird dynamisch alloziert (d. h. es belegt nicht immer die angeforderte Groesze, sondern gerade nur so viel Platz im RAM, wie die Daten (plus Metadaten) auf der Ramdisk gerade brauchen) und ist pageable, kann im Bedarfsfall also auf Swapspace ausgelagert werden.
Ramfs ist eine alte Variante eines aehnlichen Konzepts, aber nicht pageable. Darueberhinaus gibt es sicher noch einige Unterschiede, aber die kann ich dir nicht aus dem Stand benennen.

Tmpfs hat, wie die meisten Dateisysteme, andere Charakteristika als alle anderen ;) Waehrend ich dir zwar keine speziellen Eigenschaften von tmpfs nennen kann (ich schaetze mal, es ist auf das temporaere Ablegen von Files spezialisiert, und komplexe Algorithmen wie z. B. zur Fragmentationsvermeidung werden sich darin eher nicht finden lassen, weil der Hauptspeicher ja eh Zugriffszeiten jenseits von gut und boese hat), unterstuetzt ext2 z. B. POSIX-ACLs, extended attributes, damit dann auch SELinux Security Labels, und ein paar andere ganz interessante Flags fuer Files, wie z. B. Immutability. Das kann ein Filesystem speziell fuer temporaer zu lagernden Kram wohl nicht, weil es das einfach nicht muss.

Der Ramdisk-Treiber macht (Warnung: Educated Guess - ich habe nich in den Source geschaut und bin auch sonst nicht mit dem Teil vertraut, aber soweit meine Systemprogrammierungskenntnisse gehen, scheint mir das die logischste Variante einer moeglichen Erklaerung) vermutlich nicht viel mehr als einen bestimmten Bereich des Speichers zu allozieren (wohl mittels malloc, bzw. eines Kernel-internen workalike), und fuer diesen reservierten Speicher ioctls zu exportieren, die ihn wie ein stinknormales Blockdevice aussehen lassen. Sag ich einmal. *g*

Hoffe, ein wenig geholfen zu haben.

Viel Erfolg und Freude noch beim Forschen und Experimentieren! :)

Armax

OC Addicted
Registered: Apr 2004
Location: .
Posts: 1058
Danke für die Antwort! :)

Mir ist das mit der "dynamischen Allokierung" im tmpfs noch nicht klar. Welche Speichergröße wird vom tmpfs beim Aufruf belegt/reserviert? Sämtlicher freier Speicher oder nur ein bestimmter Block der erweitert wird sobald er voll ist? Ich kenn den Begriff nur von C wo man ja mit malloc beim Aufuf schon ne bestimmte Größe des heaps vorgeben muss...

COLOSSUS

Administrator
Frickler
Avatar
Registered: Dec 2000
Location: ~
Posts: 11890
Die Grosze, die du mein Mounten eines tmpfs anforderst, bestimmt nur die maximale Groesze dieses FS - das tmpfs frisst also bei `mount none -t tmpfs /mnt/ramfs` nicht immer 50% (das ist default, der Parameter "size" bestimmt beim Mounten das Maximum) deines Hauptspeichers, sondern kann bei Bedarf bis zu hoechstens dieser Groesze anwachsen.
Kontakt | Unser Forum | Über overclockers.at | Impressum | Datenschutz