antenope
Goto Top

Ein Datentransfer mit mehreren Zielen (Windows)

Nabend zusammen,
es gibt ja viele Möglichkeiten Daten von A nach B zu schaufeln. Aber gibt es die Möglichkeit von A nach B und C gleichzeitig zu kopieren, so das A nur einmal gelesen wird?

Quasi die Daten in A werden einmal eingelesen aber an zwei Orte gleichzeitig geschrieben?

Hier ein Beispiel:
Sagen wir man möchte von einer HDD (Quelle) ein großes Datenpaket auf 2 externe Festplatten (Ziel 1 und 2) kopieren. Die Festplatten schaffen jeweils ~130 MB/sec. Die Quelle limitiert also, weil sie prinzipiell 2x die Daten lesen müsste. Egal ob hierbei der Kopiervorgang sequenziell oder parallel abläuft.

Sequenziell: 1x 130 MB/sec, dann 1x 130 MB/sec
Parallel : 1x 65 MB/sec + 1x 65 MB/sec

Die benötigte Zeit ist bei beiden fast identisch. Ich meine nun aber nun, dass die Quelle mit 130 MB/sec gelesen wird und gleichzeitig auf Ziel1 UND Ziel2 mit jeweils 130 MB/sec geschrieben wird. Also simultan 😉.

Edit: fürs bessere Verständnis angepasst

Content-Key: 467994

Url: https://administrator.de/contentid/467994

Printed on: April 25, 2024 at 15:04 o'clock

Member: falscher-sperrstatus
falscher-sperrstatus Jul 01, 2019 at 18:11:46 (UTC)
Goto Top
Hallo,

nicht ohne Zwischenschritte (weiterer Server auf Z2) bzw schlicht Torrentähnlich, oder aber ein Proxy (was wieder auf dasselbe hinausläuft). Ansonsten wäre die Frage so, als würdest du einen LKW mit 100L Milch losschickst und erwartest, dass er an zwei Zielen mit jew. 100l ankommt.

VG
Member: anteNope
anteNope Jul 01, 2019 updated at 18:24:36 (UTC)
Goto Top
Mit physikalischen Gütern hingt der Vergleich leider etwas face-sad Da würde ja etwas aus dem Nichts entstehen. Bei Daten sieht das ja anders aus.

Die Daten werden ja von PC1 zu PC2 gesendet. Prinzipiell wäre es ja jetzt egal ob PC2 die auf 1 oder 2 lokale Ziele speichert. Dass dann das langsamste Ziel limitiert, ist klar. Könnte man vergleichen mit einem SoftwareRaid 1...
Mir ist nur kein Programm bekannt was das könnte oder vorsieht. Mal abgesehen von irgendwelchen SD-Karten/USB-Duplizierungsprogrammen die ein Image auf mehrere Ziele simultan schreiben können.
Member: falscher-sperrstatus
falscher-sperrstatus Jul 01, 2019 at 18:37:08 (UTC)
Goto Top
auch daten entstehen nicht aus dem nichts, wie gesagt, der vergleich hinkt nicht so sehr, wie du denkst.

Mit etwas Aufwand (siehe oben) kann ich auch aus 100l Milch 200l "milch" machen, klar, qualität leidet, da hinkt es dann. Mit einem Zwischenserver brauch ich Energie und Technik um selbes zu schaffen - aber dann kannst du den auch gleich als Publisher nehmen.

Gut, es gibt die Möglichkeit von Broadcasts (ich schreie heraus und jeder nimmt es auf 1x schreien, nx empfangen) aber ich gehe hier nicht von einem Broadcastnetz aus.
Member: anteNope
anteNope Jul 01, 2019 updated at 18:49:01 (UTC)
Goto Top
Wir schreiben gerade aneinander vorbei. Ich hab mich da etwas blöd ausgedrückt mit den Zielen. Im LAN ist dein Milch-Tanker natürlich das perfekte Beispiel! 😂 Du redest von einer Duplizierung im Netzwerk, ich rede von der Duplizierung auf dem PC mit 2 lokal angeschlossenen Zielen (z.B. USB).

Das LAN hatte ich nur im Beispiel für etwas limitierendes gegeben. (von SSD auf zwei Festplatten gleichzeitig, ginge nämlich auch parallel ohne Limitierung).

Der empfangende PC packt die Daten ja eh erstmal in den RAM. Und ob er die von dort an 1 oder 2 (lokal angeschlossene) Ziele schreibt, sollte relativ egal sein.
Member: nEmEsIs
nEmEsIs Jul 01, 2019 at 18:49:14 (UTC)
Goto Top
Hi

Du meinst also etwas in Richtung Multicast File Copy.

Weis nicht ob dir das hier hilft:
http://nuxref.com/2014/10/01/mass-file-distribution-using-multicasting/

Mit freundlichen Grüßen Nemesis
Member: em-pie
Solution em-pie Jul 01, 2019 updated at 18:55:43 (UTC)
Goto Top
Moin,

also rein theoretisch sollte das ohne Zwischenlösung lösbar sein:
Mit ausreichend RAM und einen passenden Programm sollte das klappen. Ich denke hier ans Programmieren:
Wenn ich "dusselige" Textdateien einlese, liegen die Daten ja auch erstmal im RAM des Systems. Und von dort kann ich ja dann schnell nacheinander die Informationen waonders abspeichern, ohne die Daten (die Variable/ das Array) zu leeren.

Was du daher mal versuchen könntest:

Schneller wird es vermutlich nicht gehen; setzt aber natürlich voraus, dass du ausreichend RAM hast. Wenn dein File 1TB groß ist und du nur 4 GB RAM hast, wirds eng

Ob das in Summe tatsächlich einen Geschwindigkeitsvorteil bringt oder irgendweo doch hingt: mag sein. Habe mich damit auch noch nie befassen müssen.

Gruß
em-pie
Member: falscher-sperrstatus
falscher-sperrstatus Jul 01, 2019 at 18:53:40 (UTC)
Goto Top
Nein, ich glaube, das tun wir nicht so sehr, wie du glaubst.

Denn jeder Duplizierungsvorgang braucht Leistung. Das kann das Lan, die Platte, die CPU oder auch der Chipsatz sein, Fakt ist, irgendwo laufen die Daten (i.d.R) als singulärer Stream (1S -> 1T) durch, sprich jedes Ziel hat seine eigene Source und damit seine eigene Transaktion.

Ferner stimmt es uach nicht, dass eine Kopie von einer SSD auf zwei (annahme) HDD ohne Limitierung ginge, es würde nur (ggf!) die Limitierung nicht ausreizen (kann aber, siehe Chipset, Ram, Software...).

Aber erklär mal praktisch, was du haben willst.

Am ehesten sehe ich da noch einen Multicast Transport, aber auch hier ist wieder die Frage des Limitierenden Netzwerks (Weshalb MC Netzwerke nicht zu groß sein sollten - hier schliesst sich der Kreis).

Viele Grüße
Member: falscher-sperrstatus
falscher-sperrstatus Jul 01, 2019 at 18:58:13 (UTC)
Goto Top
Hier wie da Limitiert ihn aber die physik.

Eine Multicastlösung ist nicht so einfach, wie man sich das denkt, ich hatte mal ein "Schnapsidee" Projekt mit einer Streaminglösung durch zu planen und daher weiss ich genau, auf welche Physiknobelpreisideen manche Leute meinen zu kommen, wenn es darum geht Bandbreite einzusparen (und dabei ist sekundär, ob das nun Bus, Lan, WAN oder sonstwas ist, Bandbreite bleibt Bandbreite).

Viele Grüße,

Christian
certifiedit.net
Member: Lochkartenstanzer
Lochkartenstanzer Jul 01, 2019 at 19:17:48 (UTC)
Goto Top
Moin,

Baue einfach ein Sofware-Raid-1 aus den externen Platten und sorg dafür daß diese an getrennten Pci-Channels hängen, damit auch parallell darauf geschrieben werden kann.

Oder Du nimmst gleich ein externes RAID-Gehäuse dafür.

lks

.
Member: anteNope
anteNope Jul 01, 2019 updated at 19:36:10 (UTC)
Goto Top
So, die ursprüngliche Frage ist nun (hoffentlich) verständlicher formuliert. Komplett unabhängig von LAN! (von wo die Daten gelesen werden sollte prinzipiell keine Rolle spielen).

Ferner stimmt es uach nicht, dass eine Kopie von einer SSD auf zwei (annahme) HDD ohne Limitierung ginge, es würde nur (ggf!) die Limitierung nicht ausreizen (kann aber, siehe Chipset, Ram, Software...).

Klar Limits gibt es überall. Wenn man aber gerade keine Kartoffel als PC hat, sind die lächerlich hoch! Prinzipiell könnte man mit dem LowLevelFormatTool jeden SATA-Port sowie USB-Port mit Festplatten versehen und simultan beschreiben lassen. Das Limit für Chipsatz, CPU, sonstwas dürfte hierbei dann bei mehreren GB/sec liegen. (Board mit 2x NVMe Steckplätze = 6 GB/sec nur für die SSDs).

Darum und nur darum hatte ich den Flaschenhals LAN ins Beispiel eingebaut. Hier ist für GBIT-Verbindungen bei 100 MB/sec Ende.
Die Daten werden ja eh erstmal im RAM zwischengespeichert und dann auf dem endgültigen Ziel geschrieben. Und dem RAM sollte es relativ egal sein ob nun 1, 2 oder mehrere Ziele beschrieben werden sollen.

Kann man prinzipiell mit CD/DVD-Brennern vergleichen. Hier besteht auch die Möglichkeit EIN Image auf mehrere Datenträger simultan zu brennen. Da wird das Image auch nur einmal ausgelesen 😅

an getrennten Pci-Channels hängen, damit auch parallell darauf geschrieben werden kann.
... Ähm ja ... Ein B360 Chipsatz ist mit 8 GT/s via QPI / UPI angebunden, das entspricht etwa 20 GB/sec. https://de.wikipedia.org/wiki/Intel_QuickPath_Interconnect
Member: falscher-sperrstatus
falscher-sperrstatus Jul 01, 2019 at 19:25:35 (UTC)
Goto Top
Unter dem Aspekt muss ich dem Kollegen oben Recht geben, wenn der RAM Groß genug ist, kein Problem, nach wie vor gilt: Die HW ist das limitierende, ob du an die Limits stößt hängt vom Umstand ab.
Member: anteNope
anteNope Jul 01, 2019 updated at 19:40:53 (UTC)
Goto Top
Meine Frage bezog sich ja auch nicht auf möglich Limits, sondern einfach nur ob es etwas (Programm) gibt das zwei Ziele gleichzeitig beschreiben kann.

Quasi robocopy mit einer Quelle und zwei Ziel-Angaben die dann gleichzeitig mit den identischen Daten aus der Quelle beschrieben werden.

"robocopy Quelle1 Ziel1 Ziel2"
Member: falscher-sperrstatus
Solution falscher-sperrstatus Jul 01, 2019 at 19:45:06 (UTC)
Goto Top
Nein, nicht bewusst, da dies Spezialfälle sind (und demnach auch spezialisiert angegangen werden müssen, Stichwort Multicast, DVD, HDD, etc) und meist bleibt es dann auch nicht bei n = 2 sondern gleich n = m.

VG
Member: anteNope
anteNope Jul 01, 2019 at 19:49:14 (UTC)
Goto Top
Zitat von @em-pie:
Wenn ich "dusselige" Textdateien einlese, liegen die Daten ja auch erstmal im RAM des Systems. Und von dort kann ich ja dann schnell nacheinander die Informationen waonders abspeichern, ohne die Daten (die Variable/ das Array) zu leeren.

Genau, Windows nutzt den RAM eh als Schreib-Cache. Es würde von dort aus halt nur zwei unterschiedliche Ziele mit den Daten beliefert.

von der RAM-Disk auf die ext. HDDs, dann mit zwei parallel sich startenden Jobs (um die Performance der Quelle nutzen zu können)
Mal abgesehen davon, dass ich gerade keine 1000 GB RAM im PC stecken habe, würde das prinzipiell fast genauso lange benötigen.
1x 100 MB/sec den RAM befüllen. Dann zwar parallel jeweils 130 MB/sec auf die externen Festplatten ... Wären wiederum zwei sequenzielle Transfers ...

Das müsste für einen Vorteil direkt automatisch passieren. Dann wäre es nämlich ein Datentransfer mit 100 MB/sec und beide Ziele wären beschrieben.
Member: falscher-sperrstatus
falscher-sperrstatus Jul 01, 2019 at 19:51:22 (UTC)
Goto Top
Genau da spielt aber die Physik dir einen Streich (und ich denke, da stehst du auch etwas auf dem Schlauch), genau diesen "Zwischenschritt" benötigst du effektiv.
Member: anteNope
anteNope Jul 01, 2019 updated at 20:16:24 (UTC)
Goto Top
Ja das kann gut sein, vielleicht sehe ich da gerade das Problem nicht? Der Vorgang unterscheidet sich im prinzipiellen Ablauf nicht?

clipboard02

Nur, dass der Kopiervorgang nicht auf die Rückmeldung eines Zieles wartet, sondern auf alle Ziele. Sprich das langsamste Ziel gibt dann die Geschwindigkeit vor. Der Cache im RAM wird erst verworfen/erneuert, wenn alle Ziele die Daten verarbeitet haben. Selbst programmiertechnisch dürfte das jetzt nicht viel komplizierter sein? Im Prinzip muss der Cache nicht einmal sonderlich groß sein.

Aber hätte ja sein können, dass jemand die Funktion bei einem Programm kennt =)
Member: falscher-sperrstatus
falscher-sperrstatus Jul 01, 2019 at 20:32:59 (UTC)
Goto Top
Nunja, die einzelnen Schreibvorgänge von Ram auf ZielN+m sind wiederrum autarke Vorgänge, daher "warten" diese nicht auf die Schreibvorgänge von ZielN-1 und ZielN+1, das muss also synchronisiert sein (solange die Geschwindigkeit v nicht bereits physik. synchronisiert wird).

Ferner musst du eben auch aufpassen, dass nicht ggf. der Speicher "entladen" wird, bevor Summe(ZielN+m) mit SchreibvorgangX durch sind. Und Speicherhandling ist oftmals das größte Problem.

Natürlich stellt sich hierbei auch die Frage nach Ertrag für Aufwand - was willst du also praktisch erreichen und in welchem Umfang?
Member: Lochkartenstanzer
Lochkartenstanzer Jul 01, 2019 updated at 21:35:47 (UTC)
Goto Top
Moin

tee macht genau das was Du willst:

tee <eingabedatei ausgabedatei1 >ausgabedatei2 


Kopiert die Eingabedatei in die beiden Ausgabedateien. Ob das schneller geht als zwei einzelne Kopierbefehle hängt stark von der Implementierung und den Datenpfaden im System ab. Jedenfalls hat man damit die Leseoperationen im Vergleich zum doppelten Kopieren halbiert.

Die Syntax in der Powershell weicht von der Standardversion aus dem Unixumfeld ab.

lks