Read-Cache


nikeee

Recommended Posts

1 hour ago, nikeee said:

Unterstützt unRAID einen Lese-Cache? Gibt's Alternativen, um das trotzdem in unRAID hinzubekommen? Ist es geplant?

Für was brauchst du den bzw. was willst du damit bezwecken?

 

Bitte führe einen genauen Use Case an sonst wird dir hier keine beantworten können ob es realisierbar ist oder nicht.

unRAID, wie der Name schon sagt, ist kein konventionelles RAID system.

 

Welche Geschwindigkeiten willst du erreichen?

Link to comment

Konkrete Geschwindigkeiten kann ich gerade nicht benennen.

 

Was ich vorhabe, ist eine (S)FTP-Freigabe, über die mehrere Millionen kleine Dateien (ca. 0-100MB) über eine 10Gibit-Leitung serviert werden sollen. Habe keinen Zugriff auf die Konfiguration der Switche. Die Dateien sind größentechnisch zu viel, um in den SSD-Schreibcache zu passen. Die Abfragereihenfolge der Dateien kann ich nicht kontrollieren.  Ich denke, ein LRU-Cache wäre ausreichend. Generell wäre es gut, wenn die Netzwerkkarte das Bottleneck wäre.

 

Meine Befürchtung ist (getestet habe ich es nicht, Erfahrung habe ich auch nicht), dass durch die vielen kleinen Dateien die Bandbreite auf den HDDs extrem runter gehen könnte. Grundsätzlich würde ich es auch ohne Read-Cache versuchen wollen, aber es wäre gut, wenn es die Option gäbe.

 

Kann man den RAM als Read-Cache verwenden? Oder braucht ein Read-Cache (egal ob im RAM oder auf einer SSD) grundsätzlich einenen HW-RAID-Controller (, welcher von unRAID nicht unterstützt würde)?

 

Link to comment
30 minutes ago, nikeee said:

dass durch die vielen kleinen Dateien die Bandbreite auf den HDDs extrem runter gehen könnte. Grundsätzlich würde ich es auch ohne Read-Cache versuchen wollen, aber es wäre gut, wenn es die Option gäbe.

 

das wird schwer, nur als Ansatz, anstelle HDD's nimm halt SSD Platten ... damit hättest du schon eine ganz andere Performance, gerade bei der Anzahl an Zugriffen ...

Link to comment
On 11/23/2021 at 9:55 PM, nikeee said:

Die Dateien sind größentechnisch zu viel, um in den SSD-Schreibcache zu passen

Wie willst du einen SSD Lesecache realisieren, wenn deine SSDs zu klein sind?

 

Simple Lösung: Größere SSDa kaufen oder du betreibst einen separaten HDD Pool, wo du diese Daten ablegst.

Link to comment
22 hours ago, mgutt said:

Wie willst du einen SSD Lesecache realisieren, wenn deine SSDs zu klein sind?

Ich verstehe die Frage nicht. Caches sind nicht notwendigerweise so groß wie das Medium, wo die Daten liegen.

Z. B. Synology unterstützt Lese-Caches, die haben aber auch einen richtigen RAID-Controller. Das Prinzip ansich sollte aber nicht beschränkt auf HW-Unterstützung sein.

 

Welche Eviction-Strategie unterstützt wird, ist mir im Prinzip egal.

 

Also kann ich davon ausgehen, dass unRAID einen Lese-Cache nicht untersützt und auch nicht unterstützen wird?

Link to comment
5 minutes ago, nikeee said:

. B. Synology unterstützt Lese-Caches, die haben aber auch einen richtigen RAID-Controller. 

Raid Modes auf der Syno sind auch nur SW...nix Hardware Raid...ein HW Raid Cache ist auch nicht zum lesen da, sondern zum schreiben....dafür ist der Batterie-geschützt.

 

Willst Du einen Lese-Cache für Clients (beachte, der beschleunigt erst, nachem der erste, langsame Zugriff die Daten in den Cache befördert hat, also beim 2ten Zugriff) leg doch einen Proxy oben drüber.

Link to comment
28 minutes ago, nikeee said:

Caches sind nicht notwendigerweise so groß wie das Medium, wo die Daten liegen.

Z. B. Synology unterstützt Lese-Caches

Jo und genau deswegen verheizt eine Syno auch jede SSD, weil ständig gecachte Daten rotieren. Auch funktioniert so ein Cache niemals ohne das HDD RAID, da nicht Dateien in den Cache geschrieben werden, sondern nur Teile der Dateien, die gerade gelesen werden (Blöcke).

 

Und was nützt der Cache, wenn erst ab dem 2. Zugriff beschleunigt wird und wegen der zu kleinen SSD die Daten wieder rausfliegen.

 

Genau das ist ja der Charme bei unRAID. Du entscheidest was dauerhaft auf den SSDs liegt und da bleibt es dann auch. Also zb VMs, Container oder wie in meinem Fall, die komplette Musik-Sammlung, da ich diese latenzfrei abspielen möchte. Die sonstigen Uploads landen zwar auch auf den SSDs, aber sie kicken niemals die persistenten Daten runter.

 

Wenn du einen Lesecache haben willst, dann installiere einfach mehr RAM. Genau dafür verwendet Linux den bereits.

Link to comment
18 hours ago, mgutt said:

sondern nur Teile der Dateien, die gerade gelesen werden (Blöcke).

Da unraid kein HW-Raid verwendet und Wissen über das konkrete Dateisystem hat, könnte es ja davon gebrauch machen und nicht nur Blöcke, sondern auf eine intelligentere Art Daten in den Cache schieben (z. B. über Zugriffsmuster oder durch Kopieren der gesamten Datei; wäre letztendlich nur ein Implementierungsdetail).

 

18 hours ago, mgutt said:

Und was nützt der Cache, wenn erst ab dem 2. Zugriff beschleunigt wird und wegen der zu kleinen SSD die Daten wieder rausfliegen.

Mir ist bewusst, wie ein Lese-Cache funktioniert.

 

Ich fasse mal meine bisherigen Antworten aus dem EIngangspost für die Nachwelt zusammen, als tl;dr:

 

Unterstützt unRAID einen Lese-Cache?

Nein.

 

Gibt's Alternativen, um das trotzdem in unRAID hinzubekommen?

Nicht built-in.

Ist es geplant?

Offenbar nicht.

 

Vielen Dank!

Edited by nikeee
Link to comment
15 minutes ago, nikeee said:

Nein.

 

Wie bei jedem Linux basierten OS existiert die Unterstützung für einen Lese- und Schreibcache im Linux Kernel und somit in Unraid. Herangezogen werden dafür konfigurierbare Anteile des Hauptspeichers. Weitergehendes minimales Caching existiert im Fuse System.

 

Hast Du Dich extra am Dienstag hier angemeldet um diese Diskussion loszutreten und dann auch noch die Statements nach kurzer Zeit in Großschrift rauszuschreien. Was ist Deine Intention?

 

Wie auch immer. Es gibt viele Dokumente die die Effizienz des Linux Caching beschreiben. Hier mal etwas Lesestoff mit weitergehenden Links am Ende:

 

https://www.thomas-krenn.com/en/wiki/Linux_Page_Cache_Basics

 

Weitergehendes von Dir gewünschtes Filecaching wäre IMHO kontraproduktiv da das ganze System Page- und Blockbasiert ist. Da müssten zwei Verwaltungsebenen parallel existieren. Ich denke Linux macht das ganz gut auf den Milliarden Geräten auf denen es im Einsatz ist.

 

Bau mal einen Filecache selbst. Ich habe die Aufgabe mehrfach selbst in Assembler und C bauen müssen. Heute würde ich das nicht mehr vorschlagen. Glaub mir, wenn Du das effizient hinbekommen würdest, dann hättest Du sehr schnell eine Einladung ins Ausland vorliegen.

 

Link to comment
27 minutes ago, nikeee said:

könnte es ja davon gebrauch machen und nicht nur Blöcke, sondern auf eine intelligentere Art Daten in den Cache schieben (z. B. über Zugriffsmuster oder durch Kopieren der gesamten Datei; wäre letztendlich nur ein Implementierungsdetail).

 

Nicht ganz perfekt, aber man könnte das Mover Tuning Plugin verwenden und dort nach Dateialter verschieben lassen:

Screenshot_20211126_180737.thumb.jpg.e3511d5fe89d8c0f34d65a8319739e45.jpg

 

Sagen wir mal, man stellt 14 Tage ein. Und nun lässt man täglich ein Skript alle Dateien auf dem Cache per "touch" vom Datum her gleich setzen, wie das Access Datum. Wobei ich nicht weiß, ob Mover Tuning das Access Datum bei jedem Durchlauf aktualisiert?!

 

Alternativ müsste man was über SMB Logs lösen. Also alle Zugriffe mitloggen und an Hand der Logs die Zeitstempel aktualisieren.

 

Komplett live alle Dateizugriffe auf dem Cache überwachen, würde zu viel CPU Leistung kosten.

Link to comment
55 minutes ago, hawihoney said:

Wie bei jedem Linux basierten OS existiert die Unterstützung für einen Lese- und Schreibcache im Linux Kernel und somit in Unraid.

  Meine initiale Frage zielte explizit auf einen SSD-Schreibcache aus, nicht auf den RAM (die Möglichkeit habe ich selber später auch noch eingeworfen).

 

55 minutes ago, hawihoney said:

Hast Du Dich extra am Dienstag hier angemeldet um diese Diskussion loszutreten und dann auch noch die Statements nach kurzer Zeit in Großschrift rauszuschreien. Was ist Deine Intention?

Ich hab 3 Fragen gehabt, von denen wurden 2.5 beantwortet und wollte die Sache abschließen. Damit man nicht großartig suchen muss, hab ich kurze Antworten dazugeschrieben und noch ein paar Pointer zu StackExchange da gelassen. Wenn etwas technisch an meiner Zusammenfassung nicht stimmt, korrigiere mich gerne.

 

@mgutt sehr guter Hinweis, danke! Ich werd mal schauen, ob das funktionieren wird. SMB werde ich bei dem Use-Case nicht einsetzen (eher (S)FTP und HTTP). Daher wird's vielleicht auch ein simpler Webserver mit aggressivem Caching.

 

55 minutes ago, hawihoney said:

Bau mal einen Filecache selbst.

Das hatte ich nicht vor, deshalb hab ich hier gefragt. Keine Ahnung, wieso diese Aussage für diesen Thread relevant ist...?

 

Schaltet mal ein Trigger-Level runter. Ich hatte ein Problem, hab den Use-Case dargestellt und wir haben gemeinsam Lösungen im Rahmen der Unraid-Plattform erarbeitet. Nicht mehr, nicht weniger.

 

Viele Grüße

 

 

Edited by nikeee
Link to comment
13 hours ago, nikeee said:

SMB werde ich bei dem Use-Case nicht einsetzen (eher (S)FTP und HTTP). Daher wird's vielleicht auch ein simpler Webserver mit aggressivem Caching.

Dann ist es "simpel". Pack die Daten der Website auf die HDDs und vor dem zb Apache Webserver Container lässt du einen Nginx Container alle Anfragen in den Cache schreiben. 

 

Du musst dann vermutlich /var/nginx/cache vom Container auf den Cache des Hosts verweisen lassen und dann brauchst du nur noch ein Skript, dass jeden Tag / alle paar Stunden aufräumt. Also wenn größer als X GB, dann lösche Y GB an alten Dateien.

 

Für SSHFS wird es komplizierter:

https://serverfault.com/questions/293811/is-it-possible-to-set-the-cache-size-for-fuse-and-or-sshfs

 

Scheinbar kann man nur die Zeit, aber nicht die Größe festlegen?! Falls doch, könnte man einen Mount von /mnt/cache/sharename/sshfs_mount nach /mnt/disk1/sharename/daten erstellen. Wobei die Frage ist, wohin der cached. Wenn das nach /tmp geht (RAM), müsste man noch den passenden Unterordner auf die SSD mounten.

Link to comment
17 hours ago, nikeee said:

Unterstützt unRAID einen Lese-Cache?

Nein.

Depends.

 

Das ist immer Auslgungssache und deswegen erhältst du auch hier Aussagen die nicht ganz deinen Anforderungen entsprechen.

 

unRAID ≠ PrimoCache

 

unRAID war von Tom bzw. von den Machern nie für solche Sachen vorgesehen da es Ursprünglich für einen ganz anderen Anforderungszweck gemacht wurde (Medien Vault mit "speziellem" RAID für erweiterbarkeit und flexibiltät).

Ich meine es stimmt unRAID ist mit der Zeit um einiges an Funktionen gewachsen aber für einen lese Cache sehe ich echt keinen Anwendungszweck so wie es die meisten verwenden und da unRAID auch die Möglichkeit multipler Cache Pools bietet.

 

Wie @mgutt schon erwähnt hatte Lösungen wie sie Synology bietet mit diesem Read Cache, verheizen jede SSD da der Algorythmus nicht wirklich "optimiert" sind sag ich jetzt hier mal ohne einen Krieg zu beginnen... :D

(Kollege von mir hat damit schon seine erste 1TB Samsung 970 Evo Plus durch und der macht echt nicht viel...)

 

 

17 hours ago, nikeee said:

Ist es geplant?

Offenbar nicht.

Nein, kann ich mit Sicherheit sagen.

 

 

17 hours ago, nikeee said:

(z. B. über Zugriffsmuster oder durch Kopieren der gesamten Datei; wäre letztendlich nur ein Implementierungsdetail)

Genau das ist eben das schwierige einen Algorythmus zu schreiben der die Dateien wieder zurück in den Cache kopiert und dabei nicht den Cache übermäßig beansprucht.

 

 

Theoretisch könnte man sowas schon machen aber dann ist eben das schwierige der algorythmus, wie lange behältst du es im Cache, wieviele Lesezugriffe behalten das File für n Tage auf dem Cache, benutzt du einen Datenbank im hintergrund um das alles zu monitoren, willst du auch noch eine Begrenzung des Caches bevor er vollläuft und noch ca. 20 andere Dinge die mir auf die schnelle einfallen.

Mir ist klar das du sowas nicht selber schreiben bzw. machen willst also vergiss den Absatz wieder, will nur die Schwierigkeit(en) damit aufzeigen.

Link to comment
On 11/27/2021 at 8:59 AM, mgutt said:

Dann ist es "simpel"

Ja, ziemlich genau das wäre mein Backup-Plan gewesen.

 

On 11/27/2021 at 8:59 AM, mgutt said:

Für SSHFS wird es komplizierter:

Sicher, dass es bei dem von dir verlinkten Artikel nicht um clientseitiges Caching vom sshfs geht?

 

Bin zwar nicht so ein Fan von FUSE, aber zur Not gibt's sicher auch irgendein random FUSE-File-System, das genau das macht. Damit kann man dann transparent zu der eigentlichen Anwendung cachen.

 

Edit:
Gerade gefunden: Es gibt auch 2 richtige Kernelmodule, die sowas können: BCache und fscache, beide sind Teil von Linux. Bei dem ranzigen Fuse-FS von oben sind auch noch 5 andere verlinkt, die man probieren kann.

/Edit

 

Genau solche Lösungen wollte ich eigentlich vermeiten, da ich möglichst stets auf von Haus aus unterstützte Funktionen setzen will, allein aus Wartungsgründen. Deshalb würde ich auch den Write-Cache von Unraid verwenden, statt selbst irgendwas zu basteln. Da Read-Caches wohl ein Feature ist, was man von einer NAS-Firmware erwarten könnte, habe ich einfach mal nachgefragt. Synology war buchstäblich das erste Google-Suchergebnis von "nas ssd read cache", womit ich validiert hab, ob das ein Feature ist, das bei NAS erwartbar ist (hat nichts speziell mit dieser Firma zu tun, wollte es nur als Beispiel verlinken).
Mir ist selbstverständlich bewusst, was das für eine Auswirkung auf die SSDs haben wird.

 

On 11/27/2021 at 11:01 AM, ich777 said:

Genau das ist eben das schwierige einen Algorythmus zu schreiben der die Dateien wieder zurück in den Cache kopiert und dabei nicht den Cache übermäßig beansprucht.

Cache-Invalidation ist eines der "schwierigen" Probleme in der informatik. Da ich mit der reduzierten Laufzeit leben kann (ja, kann ich wirklich), wäre es mir egal, ob der Cache irgendwas fancyges wie FP-Growth-Analyse, einen LSM-Tree oder eine simple Cache-Eviction-Strategy der dutzenden existierenden verwendet (für mich würde auch ein simpler LRU-Cache mit Mindesthaltedauer reichen; in meinem Fall im Speziellen verändern sich die Daten auch nicht, das würde es noch deutlich vereinfachen). Sowas muss man im Jahr 2021 auch eigentlich nicht mehr selbst implementieren.

 

Hat sich dahingehend aber wohl erledigt.

 

Viele Grüße

Edited by nikeee
Link to comment

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.