Latenz eines SMB Share in einer Win10 VM unter unraid


DataCollector

Recommended Posts

Dies ist die Fortsetzung einer Diskussion die ich aber nun nicht kapern will. Deshalb mache ich ein neues Topic auf.

Es betrifft den von mir hier angeschnittenen Punkt:

 

Hier nun meine Darstellung:

Ich weiß jetzt nicht, was ich dazu sagen kann/soll/etwas vorbereiten kann.

 

Leider muß ich zur Beschreibung ausholen.
Um Strom zu sparen ist mein Ziel meine vielen Realen Win10 Maschinen möglichst weit in eine (bzw. solange MultiArray nicht geht in 2 oder 3) Unraidsysteme zu konsolidieren.

 

Ursprünglich hatte ich (ein seit einigen Monaten verstorbenes System):
einen DELL OPTIPLEX 7010MT Win10Pro 64Bit (I7-3770 32GB Ram, 6SATA SSD + 2 Festplatten per SAS HBA).
4 der jeweils 1TB SATA SSD waren in Windows zu einem 4TB Stripeset (vergleichbar Raid0) zusammengeschaltet.

 

Aktuell/neu ist das Konstrukt als VM in meinem 1st System realisiert.

 

Technik 1st System:
Gigabyte W480 Vision W (F22 4D16); Xeon W1290p; 4x32GB KSM29ED8/32ME; ADAPTEC 72405-24i JBOD: Array 23+2 Disks xfs enc.; Pool: 2 HDD +4SATA SSD +1 NVMe ADATA XPG SX8100; Mellanox X3 MCX311A; unraid 6.11.2-stable Pro
Relevante Datenträger:
 Pool: "Cache" ADATA_SX8100NP (NVMe 4TB) (xfs enc.), darauf aktuell etwas mehr als 3TB frei.
 Pool: "Poolssda" besteht aus 4x CT2000MX500SSD1 (SATA SSD 2TB an Mainboard SATA) Raid0 BTRFS enc. = ca. 8TB, davon aktuell etwas mehr als 5TB frei.
Der SMB Share heißt "poolsata" und ist als "Cache only" gesetzt und beinhaltet nur den "Poolssda" Cache.

Docker aktiv: krusader/ich777 + SABnzbd/ich777

 

Software:
Einzige WM Win10Pro 64Bit 22H2 im 24/7 Dauerlauf; 18Threads (9Core); 20480MB Ram; Q35-6.2; VDisk ist auf "Cache";
In der VM laufen aktiv 24/7:
Mediathekview
TotalCommander 10
Newsbin (welcher automatisiert 3x pro Tag in relevanten Newsgroups nach allen neuen Beiträgen sucht und alles als Dateien/Binaries nach D:\N lädt)
(Ab und zu läuft nebenher der Video Converter Ultimate, welcher per ffmpeg recodiert und in Summe dann maximal 50% der CPU Last der 18 Cores verursacht).)

 

Der SMB Share "poolsata" wurde in Windows als Laufwerk 😧 eingebunden:
  d:\net use
  Status       Lokal     Remote                    Netzwerk
  -------------------------------------------------------------------------------
  OK           😧 \\UR-TESSA\poolsata       Microsoft Windows Network
  ...
  OK           Z:        \\Tessa-main1064\d        Microsoft Windows Network

 

Somit landen auf D:\N täglich zwischen dutzenden und hunderten GB an Dateien (meist eine Datei und diverse zugehörende par2 zur Rekonstruktion/überprüfung). Eine Sammlung aus Quelldatei und PAR2 nenneich mal der Einfachheithalten einen "Datensatz".

Das sind täglich rund 2000-3000 Downloaddateien, wovon meist eine Quelldatei rund 5-8 PAR2 Dateien hat.

 

Wie beschrieben betrete ich dann einmal am Tag mit dem TotalCommander das Downloadverzeichnis der jeweiligen Newsgroup, klicke auf eine der par2 Dateien eines Datensatzes und dann wird aufgrund bestehender Verknüpfung in Win10 "Multipar V.1.3.2.4" aufgerufen, welcher dann die PAR2 und Quelldateien (Also einen zusammengehörenden Datensatz) einliest und deren Inhalt auf Korrektheit überprüft und bei Bedarf selbstständig repariert.
Nach positiver Überprüfung/Reparatur beendet sich diese Multipar Instanz dann sofort wieder. Bei Fehler bleibt die bestehen.


Das Vorgehen ist identisch zu dem, was ich vorher auf dem Dell Win10 gemacht hatte.

 

Da Multipar in der Regel nur wenig Last verursacht starte ich in schneller Folge mehrere par2 Dateien unterschiedlicher Datensätze um möglichst schnell alle geladenen Quelldateien in dem jeweiligen Verzeichnis zu überprüfen.
Es werden also in kurzer Zeit mehrere Instanzen von Multipar aufgerufen und laufen parallel.

 

Daß die ersten 1-4 Starts von Multipar etwas mehr Zeit in Anspruch nehmen ist logisch, weil in der Zwischenzeit (am Tag) der Ram ja mit etwas anderen belegt wurde und Multipar eben dann erst einmal von "C:" gestartet und im Ram festgestet (Cache) werden muß.


Auf der Dell Win10 Maschine hatte Windows aber dann nach eben diesen ersten Starts gemerkt, daß ich Multipar immer wider in kurzer Folge aufrufe und das dann eben schnell gestartet und die Datensätze überprüft.

"C:" und "D:"  waren dort eben lokale Datenträger.

 

Jetzt bei Unraid mit der VM sind "C:" (liegt auf Cache NVMe 4TB SSD) und "D:" (Pool 4 SATA SSD per SMB Share übergeben) ebenfalls Datenträger lokal im unraidsystem, aber jedesmal wenn unraid startet braucht es zur Findung der Dateien knapp unter 1 Sekunde länger, als ich es von dem Dell Win10 gewohnt war. Dabei hatte ich aus diversen früheren Beiträgen entnommen, daß ein lokales SMB Share (auf dem selben unraidsystem) gar nicht über die Netzwerkhardware läuft und sehr schnell sein soll.


Ein Geschwindigkeitsproblem (Transferspeed) selber ist es nicht, weil ich beim nackten Lesen von "D:" und kopieren über Netzwerk (10GB) auf einen anderen PC "Z:" bei großen Dateien (5GB) Geschwindigkeiten knapp um die 400MByte/s erreiche, was bei den beteiligten SATA SSD ("D:" Quelle)  und Ziel "Z:" (Win10 Freigabe eines anderen PC bestehend aus Festplatten Raid5 Verbund) erwartbar ist.

 

Ich weiss nicht, wie ich die Latenz (also jeweiliges neues einlesen der Verzeichnisse mit tausenden Dateien durch TotalCommander und Multipar) quantifizieren/messen kann, aber diese durchgehend knapp unter 1 Sekunde Startverzögerung pro Datensatz ist erst da, seit ich die Downloaddateien außerhalb der VM auf dem SMB Share liegen habe.

 

Hier die VM Einstellungen (Screenshot würde über 3 Seiten gehen, deshalb hier als Textdatei):

 

<?xml version='1.0' encoding='UTF-8'?>
<domain type='kvm' id='3'>
  <name>Win1064Pro-1</name>
  <uuid>b50ce884-66d8-c603-fcfa-eaf6c2df9a47</uuid>
  <metadata>
    <vmtemplate xmlns="unraid" name="Windows 10" icon="windows.png" os="windows10"/>
  </metadata>
  <memory unit='KiB'>20971520</memory>
  <currentMemory unit='KiB'>20971520</currentMemory>
  <memoryBacking>
    <nosharepages/>
  </memoryBacking>
  <vcpu placement='static'>18</vcpu>
  <cputune>
    <vcpupin vcpu='0' cpuset='1'/>
    <vcpupin vcpu='1' cpuset='11'/>
    <vcpupin vcpu='2' cpuset='2'/>
    <vcpupin vcpu='3' cpuset='12'/>
    <vcpupin vcpu='4' cpuset='3'/>
    <vcpupin vcpu='5' cpuset='13'/>
    <vcpupin vcpu='6' cpuset='4'/>
    <vcpupin vcpu='7' cpuset='14'/>
    <vcpupin vcpu='8' cpuset='5'/>
    <vcpupin vcpu='9' cpuset='15'/>
    <vcpupin vcpu='10' cpuset='6'/>
    <vcpupin vcpu='11' cpuset='16'/>
    <vcpupin vcpu='12' cpuset='7'/>
    <vcpupin vcpu='13' cpuset='17'/>
    <vcpupin vcpu='14' cpuset='8'/>
    <vcpupin vcpu='15' cpuset='18'/>
    <vcpupin vcpu='16' cpuset='9'/>
    <vcpupin vcpu='17' cpuset='19'/>
  </cputune>
  <resource>
    <partition>/machine</partition>
  </resource>
  <os>
    <type arch='x86_64' machine='pc-q35-6.2'>hvm</type>
  </os>
  <features>
    <acpi/>
    <apic/>
    <hyperv mode='custom'>
      <relaxed state='on'/>
      <vapic state='on'/>
      <spinlocks state='on' retries='8191'/>
      <vendor_id state='on' value='none'/>
    </hyperv>
  </features>
  <cpu mode='host-passthrough' check='none' migratable='on'>
    <topology sockets='1' dies='1' cores='9' threads='2'/>
    <cache mode='passthrough'/>
  </cpu>
  <clock offset='localtime'>
    <timer name='hypervclock' present='yes'/>
    <timer name='hpet' present='no'/>
  </clock>
  <on_poweroff>destroy</on_poweroff>
  <on_reboot>restart</on_reboot>
  <on_crash>restart</on_crash>
  <devices>
    <emulator>/usr/local/sbin/qemu</emulator>
    <disk type='file' device='cdrom'>
      <driver name='qemu' type='raw'/>
      <source file='/mnt/user/isos/virtio-win-0.1.217-2.iso' index='2'/>
      <backingStore/>
      <target dev='hdb' bus='sata'/>
      <readonly/>
      <alias name='sata0-0-1'/>
      <address type='drive' controller='0' bus='0' target='0' unit='1'/>
    </disk>
    <disk type='file' device='disk'>
      <driver name='qemu' type='raw' cache='writeback'/>
      <source file='/mnt/user/domains/Win1064Pro-1/vdisk1.img' index='1'/>
      <backingStore/>
      <target dev='hdc' bus='sata'/>
      <boot order='1'/>
      <alias name='sata0-0-2'/>
      <address type='drive' controller='0' bus='0' target='0' unit='2'/>
    </disk>
    <controller type='pci' index='0' model='pcie-root'>
      <alias name='pcie.0'/>
    </controller>
    <controller type='pci' index='1' model='pcie-root-port'>
      <model name='pcie-root-port'/>
      <target chassis='1' port='0x10'/>
      <alias name='pci.1'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0' multifunction='on'/>
    </controller>
    <controller type='pci' index='2' model='pcie-root-port'>
      <model name='pcie-root-port'/>
      <target chassis='2' port='0x11'/>
      <alias name='pci.2'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x1'/>
    </controller>
    <controller type='pci' index='3' model='pcie-root-port'>
      <model name='pcie-root-port'/>
      <target chassis='3' port='0x12'/>
      <alias name='pci.3'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x2'/>
    </controller>
    <controller type='pci' index='4' model='pcie-root-port'>
      <model name='pcie-root-port'/>
      <target chassis='4' port='0x13'/>
      <alias name='pci.4'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x3'/>
    </controller>
    <controller type='pci' index='5' model='pcie-root-port'>
      <model name='pcie-root-port'/>
      <target chassis='5' port='0x14'/>
      <alias name='pci.5'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x4'/>
    </controller>
    <controller type='pci' index='6' model='pcie-to-pci-bridge'>
      <model name='pcie-pci-bridge'/>
      <alias name='pci.6'/>
      <address type='pci' domain='0x0000' bus='0x01' slot='0x00' function='0x0'/>
    </controller>
    <controller type='virtio-serial' index='0'>
      <alias name='virtio-serial0'/>
      <address type='pci' domain='0x0000' bus='0x02' slot='0x00' function='0x0'/>
    </controller>
    <controller type='sata' index='0'>
      <alias name='ide'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x1f' function='0x2'/>
    </controller>
    <controller type='usb' index='0' model='ich9-ehci1'>
      <alias name='usb'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x07' function='0x7'/>
    </controller>
    <controller type='usb' index='0' model='ich9-uhci1'>
      <alias name='usb'/>
      <master startport='0'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x07' function='0x0' multifunction='on'/>
    </controller>
    <controller type='usb' index='0' model='ich9-uhci2'>
      <alias name='usb'/>
      <master startport='2'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x07' function='0x1'/>
    </controller>
    <controller type='usb' index='0' model='ich9-uhci3'>
      <alias name='usb'/>
      <master startport='4'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x07' function='0x2'/>
    </controller>
    <interface type='bridge'>
      <mac address='52:54:00:0e:15:7a'/>
      <source bridge='br0'/>
      <target dev='vnet2'/>
      <model type='virtio'/>
      <alias name='net0'/>
      <address type='pci' domain='0x0000' bus='0x03' slot='0x00' function='0x0'/>
    </interface>
    <serial type='pty'>
      <source path='/dev/pts/0'/>
      <target type='isa-serial' port='0'>
        <model name='isa-serial'/>
      </target>
      <alias name='serial0'/>
    </serial>
    <console type='pty' tty='/dev/pts/0'>
      <source path='/dev/pts/0'/>
      <target type='serial' port='0'/>
      <alias name='serial0'/>
    </console>
    <channel type='unix'>
      <source mode='bind' path='/var/lib/libvirt/qemu/channel/target/domain-3-Win1064Pro-1/org.qemu.guest_agent.0'/>
      <target type='virtio' name='org.qemu.guest_agent.0' state='connected'/>
      <alias name='channel0'/>
      <address type='virtio-serial' controller='0' bus='0' port='1'/>
    </channel>
    <input type='tablet' bus='usb'>
      <alias name='input0'/>
      <address type='usb' bus='0' port='1'/>
    </input>
    <input type='mouse' bus='ps2'>
      <alias name='input1'/>
    </input>
    <input type='keyboard' bus='ps2'>
      <alias name='input2'/>
    </input>
    <graphics type='vnc' port='5900' autoport='yes' websocket='5700' listen='0.0.0.0' keymap='de'>
      <listen type='address' address='0.0.0.0'/>
    </graphics>
    <sound model='ich9'>
      <alias name='sound0'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x08' function='0x0'/>
    </sound>
    <audio id='1' type='none'/>
    <video>
      <model type='qxl' ram='65536' vram='65536' vgamem='16384' heads='1' primary='yes'/>
      <alias name='video0'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x0'/>
    </video>
    <memballoon model='virtio'>
      <alias name='balloon0'/>
      <address type='pci' domain='0x0000' bus='0x04' slot='0x00' function='0x0'/>
    </memballoon>
  </devices>
  <seclabel type='dynamic' model='dac' relabel='yes'>
    <label>+0:+100</label>
    <imagelabel>+0:+100</imagelabel>
  </seclabel>
</domain>

 

Edited by DataCollector
Link to comment
5 hours ago, DataCollector said:

Leider muß ich zur Beschreibung ausholen

Und am Ende hast du das Ziel aus den Augen verloren. Ich fragte ja nach einem Testszenario, das jeder mal schnell nachstellen kann. Jetzt wissen wir nur, dass du irgendwelche PAR2 Dateien hast, die du mit Multipar öffnest und dieser Vorgang braucht dir zu lange. Wie kann ich das nun nachstellen?

 

Daher erstmal nur allgemeine Fragen:

1. Ist es auch langsam wenn das Verzeichnis nur 100 Dateien enthält?

2. Ist es auch langsam, wenn die Dateien auf einer Vdisk liegen?

3. Ist es auch langsam, wenn der Share durch eine Windows Maschine bereitgestellt wird?

Link to comment

So, nach einigen Scherereien mit Trennung der Nutzung auf mehrere NVMe und auch tests nun wieder hier zu:

On 11/9/2022 at 7:32 AM, mgutt said:

Daher erstmal nur allgemeine Fragen:

1. Ist es auch langsam wenn das Verzeichnis nur 100 Dateien enthält?

Es ist langsamer als, wenn dei Dateien auf C liegen, aber schneller als wenn einige tausend Dateien im Verzeichnis liegen.

Was ja auch logisch ist, weil die Latenz ja auch das Einlesen der einzelnen Dateiinformationen betrifft. Wenn nur 100 Dateien einzulesen sind hat man nur 100mal die Verzögerung, die bei 2000 Dateien eben 2000mal auftritt.

 

On 11/9/2022 at 7:32 AM, mgutt said:

2. Ist es auch langsam, wenn die Dateien auf einer Vdisk liegen?

Ich habe nun etwas gewartet, bis sich rund 2300 Dateien angesammelt haben (und die "C:" Vdisk leider voll gelaufen ist) und dann dort genau so abgearbeitet: es ist signifikant schneller/flüssiger zu arbeiten, wenn ich per TotalCommander die Par2-Dateien in schneller folge dort aufrufe und Multipar die ver-/bearbeitet.

 

On 11/9/2022 at 7:32 AM, mgutt said:

3. Ist es auch langsam, wenn der Share durch eine Windows Maschine bereitgestellt wird?

 

Das habe ich noch nicht probiert. Es kommt als nächstes dran, wenn wieder ein paar tausend Dateien anliegen.

 

Link to comment
On 11/12/2022 at 5:49 PM, DataCollector said:

Q: 3. Ist es auch langsam, wenn der Share durch eine Windows Maschine bereitgestellt wird?

So, auch das habe ich nun  ausprobiert und rund 2000 Dateien auf ein Windowssytem (dort auf eine SSD) gelegt, dann rund 1/2 Tag gewartet während die  beiden Systeme mit anderen Sachen beschäftigt waren (damit unraid und auch Windows da nichts mehr im Ram zwischenlagern).

 

Dann habe ich die gleiche Vorgehensweise genutzt und die Par2-Dateien aus der VM Win10 über Netzwerk ("Z:") aufgerufen.

"Z:" ist die Netzwerkverknüpfung auf dem echten Win10 System zur SSD mit den Dateien.

 

Er bedient sich erheblich flotter als der Zugriff auf den ursprünglich erwähnten Pool aus SATA SSDs in unraud, welcher auch über Netzwerk stattfand.

Es macht für mich also leider nur wenig Sinn Dateien, die ich wirklich schnell in großer Menge verarbeiten will auf einem Netzlaufwerk (selbst wenn es innerhalb der selben unraidmaschine ist) zu platzieren. Somit überlege ich sogar mein Vm Image von nun aktuel rund 300GB auf 1TB oder mehr aufzublasen um di eVerarbeitung weitgehend innerhalb der VM durchführen zu können und dann nur die Ergebnisse nach aussen zu transferieren.

 

Link to comment

Ich habe jetzt auch mal testweise einige tausende Dateien (*.jpg) einmal auf einem unraid share (BTRFS SATA SSD Verbund Raid0) auf dem selben PC platziert, dann einige tausend Dateien auf "C:" (also in der Virtaul Disk in der VM Win10)  und einige tausende Dateien auf einem Netzlaufwerk, welches als "Z:" eingebunden ist und in Wirklichkeit auf einer SSD auf einer externen Win10 Maschine liegt.

 

In Folge ließ ich die PCs wieder einige Zeit etwas anderes machen, damit sie mit anderen Arbeiten den Ram füllen, und daß ich ausschließen kann, daß die zu verarbeitenden Dateien im Cache liegen/lagen.

 

Zum Test habe ich mal einfach mal ein Batch auf jedem der Verzeichnisse laufen lassen, welches die Dateien umbenennt (siehe unten).

 

Das unraidshare war beiweitem am langsamsten, die Abarbeitung auf der VDisk der VM Win10 ging rasend schnell und die Windowsfreigabe des anderen PC war nicht so flott wie die vdisk, aber beiweitem schneller als das unraid Share.

 

(Das Batch hat nur ganz simpel die Zählreihenfolge der Dateien auf durchgehend 3 stellig angepasst:

  ren "*(1)*.*" "*(001)*.*"
  ren "*(2)*.*" "*(002)*.*"
 ...
  ren "*(98)*.*" "*(098)*.*"
  ren "*(99)*.*" "*(099)*.*" )

 

Irgendwie fehlt mir immer noch eine Möglichkeit eine Latenz/Verzögerung pro Datei bei solchen Operationen zu messen, weshalb ich mir mit sowas behelfe um es nachvollziehbar zu beschreiben.

 

Achja, und es hat nicht wirklich etwas mit der reinen Transfergeschwindigkeit zu tun. Zwischenzeitlich habe ich von "C:" der VDisk auf "D:" (SATA SSD Raid0 Share 4x MX500 des selben unraid PC) Schreibgeschwindigkeiten bis zu ca. 700MByte/s beim verschieben großer Dateien (einige hundert MB bis einige GB Größe) erreicht, was für den Verbund der SATA SSD meiner Meinung nach sehr ordentlich ist.

Auch die Transfergeschwindigkeit von "C:" zu "Z:" (Netzlaufwerk externer Win10 PC SSD) ist mit 330MByte/s bei großen Dateien akzeptabel, auch wenn etwas langsam für ein 10GBLan.

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.