Discussion:
tmpfs
(zu alt für eine Antwort)
Jan Schmidt
2024-08-19 19:31:29 UTC
Permalink
Hi,

ich möchte eine kleine (js-) Datei (<1k) sehr häufig erstellen
(1x pro s) um IPC zu realisieren.

Die Datei würde ich auf tmpfs (/run/user/$uid), also Ramdisk
erstellen. Im home-fs (ext4) ist ein Symlink auf die Datei im
tmpfs. Ein primitiver Webserver liest bei Verwendung die Datei
via Link zyklisch und schreibt sie zum Browser. Das passiert
deutlich seltener als das Erzeugen der Datei.

Wird dieses Konstrukt die ext4- Partition stessen und so evtl. zu
vorzeitiger Alterung führen?

Es handelt sich um einen Raspberry Pi mit dem default-Image.

Zum Hintergrund: u.a. die js-Datei wird durch ein Programm aus
Nachrichten vom angeschlossenen CAN-Bus erzeugt. Der Webserver
liefert eine statische html-Datei aus. Der Browser ersetzt die
Defaultwerte via XQuery durch die Daten aus der js-Datei und
realisiert damit eine einfache GUI.

Da die Daten nicht gespeichert werden müssen wäre eine Datenbank
overkill. Außerdem ist nicht wirklich viel Rechenleistung "übrig".

Danke,
Jan
Thomas Klix
2024-08-19 19:51:52 UTC
Permalink
Post by Jan Schmidt
Hi,
ich möchte eine kleine (js-) Datei (<1k) sehr häufig erstellen
(1x pro s) um IPC zu realisieren.
Die Datei würde ich auf tmpfs (/run/user/$uid), also Ramdisk
erstellen. Im home-fs (ext4) ist ein Symlink auf die Datei im
tmpfs. Ein primitiver Webserver liest bei Verwendung die Datei
via Link zyklisch und schreibt sie zum Browser. Das passiert
deutlich seltener als das Erzeugen der Datei.
Das erscheint mir verbesserungsfähig, aber darum geht es nicht.
Post by Jan Schmidt
Wird dieses Konstrukt die ext4- Partition stessen und so evtl. zu
vorzeitiger Alterung führen?
Wenn ich das richtig sehe, siehst du ein Problem beim laufenden
Neuerstellen des Syslinks auf ext4 - das sollte aber der Block Buffer
eliminieren. Der schreibt Änderungen auf dem Block Device nicht sofort,
sondern wenn es passt. Bei Änderungen jede Sekunde also eher nie. :-)
(Es sollte aber kein explizites sync ausgeführt werden.)

Thomas
Thomas Klix
2024-08-19 23:39:59 UTC
Permalink
Post by Jan Schmidt
Hi,
ich möchte eine kleine (js-) Datei (<1k) sehr häufig erstellen
(1x pro s) um IPC zu realisieren.
Die Datei würde ich auf tmpfs (/run/user/$uid), also Ramdisk
erstellen. Im home-fs (ext4) ist ein Symlink auf die Datei im
tmpfs. Ein primitiver Webserver liest bei Verwendung die Datei
via Link zyklisch und schreibt sie zum Browser. Das passiert
deutlich seltener als das Erzeugen der Datei.
Das erscheint mir verbesserungsfähig, aber darum geht es nicht.
Post by Jan Schmidt
Wird dieses Konstrukt die ext4- Partition stessen und so evtl. zu
vorzeitiger Alterung führen?
Wenn ich das richtig sehe, siehst du ein Problem beim laufenden
Neuerstellen des Symlinks auf ext4 - das sollte aber der Block Buffer
eliminieren. Der schreibt Änderungen auf dem Block Device nicht sofort,
sondern wenn es passt. Bei Änderungen jede Sekunde also eher nie. :-)
(Es sollte aber kein explizites sync ausgeführt werden.)

Thomas
Gregor Szaktilla
2024-08-20 06:01:36 UTC
Permalink
Post by Thomas Klix
Wenn ich das richtig sehe, siehst du ein Problem beim laufenden
Neuerstellen des Symlinks auf ext4 ...
Ich verstehe die Aufgabenstellung anders: Der Symlink bleibt immer
gleich – die Datei, auf die er zeigt, ändert sich aber regelmäßig.

Da sich diese Datei meinem Verständnis nach aber im RAM befindet, wird
die SSD nicht gestresst.

Mal sehen, ob jemand auf eine dritte Interpretation des OPs kommt :-)

Gruß

Gregor
--
Dreck ist Materie am falschen Platz. (Schotty)
Jan Schmidt
2024-08-20 18:13:35 UTC
Permalink
Post by Gregor Szaktilla
Post by Thomas Klix
Wenn ich das richtig sehe, siehst du ein Problem beim laufenden
Neuerstellen des Symlinks auf ext4 ...
Ich verstehe die Aufgabenstellung anders: Der Symlink bleibt
immer gleich – die Datei, auf die er zeigt, ändert sich aber
regelmäßig.
Da sich diese Datei meinem Verständnis nach aber im RAM befindet,
wird die SSD nicht gestresst.
Mal sehen, ob jemand auf eine dritte Interpretation des OPs kommt :-)
ja, genau das war mein Ansinnen. ;-)

Ich hatte Bedenken, dass sich der inode in dem der symllink
gespeichert ist, bei Änderung des Link-Ziel (der Datei) geändert
wird.

Der Webserver ist
https://metacpan.org/pod/HTTP::Server::Simple

Und die Datei war nötig geworden, weil durch das fork der
Serverprozess nicht mehr auf die Variable des Haupt-Prozess
zugreifen kann (und mir das auf die Schnelle mit sys5-IPC zu
aufwendig war). Außerdem sind die Zugriffe (lesen/schreiben)
asynchron, d.h. ich müsste das mit shared memory mit locking machen.

Danke,
Jan
Christian Garbs
2024-08-21 11:21:56 UTC
Permalink
Mahlzeit!
Post by Jan Schmidt
Ich hatte Bedenken, dass sich der inode in dem der symllink
gespeichert ist, bei Änderung des Link-Ziel (der Datei) geändert
wird.
Bei Änderung "des Link-Ziels" ja (ein neuer Ziel-Dateiname).

Bei Änderung "innerhalb des Link-Ziels" nein (neue Datei oder
geänderter Dateiinhalt im tmpfs unter gleichem Namen).

;-)

Gruß
Christian
--
....Christian.Garbs....................................https://www.cgarbs.de
Murphy's Laws of Combat:
2. Incoming fire has the right of way.
Hermann Riemann
2024-08-21 12:46:33 UTC
Permalink
Ich hatte Bedenken, dass sich der inode in dem der symlink gespeichert
ist, bei Änderung des Link-Ziel (der Datei) geändert wird.
In symlink steht vielleicht nur der Dateiname.
Selbst dann, wenn die Ziel Datei nicht mehr existiert.
Ich vermute, bei symlink ist auch das Datum im Verweis nicht gültig.

Meine Ramdisk in /etc/fstab

tmpfs /ramdisk tmpfs defaults 0 0

wobei der Name ramdisk Ersatz für eigenen Namen steht. Analog wie

tmpfs /tmp tmpfs defaults 0 0
tmpfs /run tmpfs defaults 0 0
Claus Reibenstein
2024-08-21 12:51:56 UTC
Permalink
Post by Hermann Riemann
Ich hatte Bedenken, dass sich der inode in dem der symlink gespeichert
ist, bei Änderung des Link-Ziel (der Datei) geändert wird.
In symlink steht vielleicht nur der Dateiname.
In einem Symlink steht _immer_ nur der Dateiname bzw. der Dateipfad.
Post by Hermann Riemann
Selbst dann, wenn die Ziel Datei nicht mehr existiert.
Das ist dem Symlink vollkommen egal.
Post by Hermann Riemann
Ich vermute, bei symlink ist auch das Datum im Verweis nicht gültig.
_Im_ Verweis steht kein Datum. Natürlich hat der Symlink selber ein
Erstelldatum, aber das meinst Du vermutlich nicht.

Gruß
Claus

Marcel Mueller
2024-08-20 16:20:25 UTC
Permalink
Die Datei würde ich auf tmpfs (/run/user/$uid), also Ramdisk erstellen.
Im home-fs (ext4) ist ein Symlink auf die Datei im tmpfs. Ein primitiver
Webserver liest bei Verwendung die Datei via Link zyklisch und schreibt
sie zum Browser. Das passiert deutlich seltener als das Erzeugen der Datei.
Das wird üblicherweise daran scheitern, dass der Webserver deinen
Versuch aus dem Webserver-Root-Verzeichnis auszubrechen, aus
Sicherheitsgründen unterbindet.

Alternativ könntest du einen zusätzlichen tmpfs Mountpoint im
Verzeichnis der Webservers erstellen. Damit wäre kein Link mehr notwendig.
Wird dieses Konstrukt die ext4- Partition stessen und so evtl. zu
vorzeitiger Alterung führen?
Eher nicht.
Da die Daten nicht gespeichert werden müssen wäre eine Datenbank
overkill. Außerdem ist nicht wirklich viel Rechenleistung "übrig".
Datenbank würde ein Vielfaches auf die Disk schreiben. Da kommt ja neben
den eigentlichen Daten auch noch das Transaction-Log dazu.

Plan B wäre Shared Memory. Der könnte ggf. via CGI an den Webserver
geliefert werden. So viel anders als tmpfs ist das aber auch nicht.


Marcel
Peter J. Holzer
2024-08-20 16:28:26 UTC
Permalink
Post by Marcel Mueller
Die Datei würde ich auf tmpfs (/run/user/$uid), also Ramdisk erstellen.
Im home-fs (ext4) ist ein Symlink auf die Datei im tmpfs. Ein primitiver
Webserver liest bei Verwendung die Datei via Link zyklisch und schreibt
sie zum Browser. Das passiert deutlich seltener als das Erzeugen der Datei.
Das wird üblicherweise daran scheitern, dass der Webserver deinen
Versuch aus dem Webserver-Root-Verzeichnis auszubrechen, aus
Sicherheitsgründen unterbindet.
Da es sein Webserver ist, der auf seiner Hardware läuft, wird er ihn
entsprechend konfigurieren können.

(Allerdings sollte er ihn dann auch gleich so konfigurieren können, dass
er das File direkt vom tmpfs liest und den Symlink gar nicht braucht.)

hp
Christian Garbs
2024-08-21 11:15:29 UTC
Permalink
Mahlzeit!
Post by Jan Schmidt
ich möchte eine kleine (js-) Datei (<1k) sehr häufig erstellen
(1x pro s) um IPC zu realisieren.
Die Datei würde ich auf tmpfs (/run/user/$uid), also Ramdisk
erstellen. Im home-fs (ext4) ist ein Symlink auf die Datei im
tmpfs. Ein primitiver Webserver liest bei Verwendung die Datei
via Link zyklisch und schreibt sie zum Browser. Das passiert
deutlich seltener als das Erzeugen der Datei.
Wird dieses Konstrukt die ext4- Partition stessen und so evtl. zu
vorzeitiger Alterung führen?
Wenn sich das Ziel des Links nicht ändert, also der Link bei der
ganzen Sache nachträglich nicht mehr angefasst wird, dann hat die
ext4-Partition exakt gar nichts zu tun.

Falls Du die js-Datei mit laufender Nummer oder anderweitig
wechselndem Namen jedes Mal neu anlegt, dann schon.

Ich würde aber aus Deiner Beschreibung eher auf den ersten Fall
tippen.

Gruß
Christian
--
....Christian.Garbs....................................https://www.cgarbs.de
Erzähl's Wayne.
Wayne interssierts.
Lesen Sie weiter auf narkive:
Loading...