Raspberrypi.md: Unterschied zwischen den Versionen

Aus OrgaMon Wiki
Zur Navigation springen Zur Suche springen
Zeile 78: Zeile 78:
* Alternativ zur GPU kann man auch über die Arm Neon Extension rechnen
* Alternativ zur GPU kann man auch über die Arm Neon Extension rechnen


  neon.uc
  https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/lib/raid6/neon.uc?h=v5.9
 
 
* Modernes Beispiel
 
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/lib/raid6/vpermxor.uc?h=v5.9


== Kernel ==
== Kernel ==

Version vom 16. Oktober 2020, 15:55 Uhr

  • Dies beschreibt das Konzept eines RAID-6-Systems bei dem ...
    • ... ein Raspberry Pi 4 den Master bereitstellt
      • er betreibt ein ext4-Dateisystem mit dem er Freigaben durchführt
      • er hat selbst kein Speichermedium,
      • er ist an einen internen Switch angeschlossen, an den auch alle Nodes gekoppelt sind
      • er berechnet niemals P oder Q
    • ... viele Raspberry Pi 4s als Nodes arbeiten
      • sie haben eine feste Rolle inerhalb des RAID-Verbundes
      • die haben nur eine Platte mit einer Partition angeschlossen
      • sie berechnen P und Q immer selbst anhand ihrer Rolle und der Sektornummer
      • sie nutzen für "xor" ihren Video Core
    • ... weitere Rapsberry Pi 4s als Spares oder Tranies arbeiten

write(Sector,Data):boolean

  • Der Master sendet ein Datagram mit
    • WRITE
    • Sector#
    • Data
  • auf den Switch. Das Datagram ist nicht an einen gewissen Node gerichtet, es ist für alle
  • Ein Node kann anhand seiner "Rolle" erkennen, ob er
  • raw oder P oder Q and der Stelle "Sector" speichern muss.
  • Nur die 3 Betroffenen Nodes senden das Ack, der Master weiss wer das sein sollte

read(Sector):Data

  • Der Master führt eine Statistik "wer" einen read beantworten muss
    • Ich bin mir jetzt unsicher wie das im raid-6 Code gemacht wird
    • wird immer raw,P und Q gelesen, also 3 Platten?
    • oder nur raw,P wegen der Kosten, und erst bei raw<>decrypt(P) wird Q gelesen?
  • es ist wiederum klar "wer" für einen gewissen Sektor verantwortlich ist
    • Node "raw" schickt die Daten ins Netz
    • Node "P" und Node "Q" lesen die Daten mit und prüfen lokal ob diese stimmen, senden ihr ACK an den Master
    • wenn beide zustimmen (nur ein kurzes OK) sind die Daten auch für den Master valide
    • wenn nicht, dann muss die Mehrheit entscheiden, wenn raw<>decrypt(P)<>decrypt(Q) dann haben wir ein Problem

RDMA

  • Lese und Schreibvorgänge könnte man mit diesem Protokoll ausführen
  • Gibt es schon Block-Devices auf Basis von RDMA?, also fabrics?

Spares

  • Spares lauschen nur auf den Master und haben ihre Platte wirklich deaktiviert, vorzugsweise stromlos
  • zumindest ein Spare sollte eingesetzt werden
  • ein "clone" sollte möglich sein, also ein ein Teamup im Laufenden Betrieb
    • Dazu soll ein Prozentsatz des Idle Betriebes der Kopierquelle zum Lesen genutzt werden
    • Ein Bitmap sorgt für Infos was wiederum kopiert werden muss
    • Ein Zähler durchpflügt die komplette Quelle

Trainee

  • Trainees arbeiten im Idle immer daran die Rolle eines Nodes übernehmen zu können
  • Dabei versuchen sie, die Anzahl der ungleichen Sektoren zwischen Node und Trainee auf "0" zu bringen
  • In der Phase imitieren Trainees die Schreibzugriffe ihrers Nodes
  • Dann ersetzen sie diesen und sind ab dem Moment Node
  • Ein Trainee könnte den Node bereits ersetzen wenn er noch gar nicht komplett ist
    • Er könnte die Schreibzugriffe verarbeiten und den alten Node so entlasten
    • den alten Node würde er nur noch leerlesen, dann aushängen

Revolution

  • eine "Revolution"-Situation ersetzt den Master, alle Nodes müssen zustimmen
  • das ext4 muss dafür unmounted werden, einen switch im laufenden Betrieb ? Das ist mir nicht bekannt, dass dies geht
  • alle Nodes müssen in einem tadellosen Zustand sein
  • dabei muss auf dem Master ein Prozess installiert sein, der es Nodes ermöglicht ihn abzuschalten

Network

P und Q berechnen

  • Alternativ zur GPU kann man auch über die Arm Neon Extension rechnen
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/lib/raid6/neon.uc?h=v5.9


  • Modernes Beispiel
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/lib/raid6/vpermxor.uc?h=v5.9

Kernel

Hardware

SoC

  • Raspberry Pi 4 (wegen Rechenleistung)
  • NanoPi R1S H5 mit Armbian (wegen 3x Network (2x LAN, 1x WLAN))

SATA


USV

Infrastruktur

  • Es wird ein POE-Switch verwendet der per VLAN-ID ein privates Netz betreibt
  • Der Switch hat einen "external" Port ohne VLAN-ID, das ist der eigentliche Anschluss des NAS
  • Bei einem 8-Port POE Switch gibt es z.B. (Best Practise)
    • Einen externen Port
    • Einen Master
    • Einen Spare
    • Einen "Free Port for alive Replacements"
    • 4 Nodes

Worker

  • Alle Worker sind identisch aufgebaut
  • Es gibt 5 Status LED
    • read-Aktivity
    • write-Aktivity
    • "I am Master" + good/fail
    • "I am Node" + good/fail
    • "I am Trainee" + good/fail
    • Replace me
  • Booten über die Festplatte, es gehen 16 GB fürs Betriebssystem verloren
  • USV mit Super CAPs

TODO

Historie

  • erstes Konzept am Donnerstag 07.11.2019

Links

http://www.aholme.co.uk/GPU_FFT/Main.htm