Software-Experimente mit Linux

Trinnov
Aktiver Hörer
Beiträge: 977
Registriert: 13.11.2009, 19:02

Beitrag von Trinnov »

frankl hat geschrieben: 23.12.2023, 20:42
Trinnov hat geschrieben: 21.12.2023, 18:13 Außerdem erlaubt die Software aktuell keine Leerzeichen also nicht "Diana Krall" sondern nur "Diana_Krall".
Hallo Horst,

auf welche Software beziehst Du Dich hier? Ich habe mal nachgeschaut, ob ich da etwas verbessern kann, aber 'improvefile' scheint mir auch mit Leerzeichen im Pfad zu funktionieren ...

Viele Grüße,
Frank
Hallo Frank,

so wie ich das verstanden habe, gelten die von mir genannten zwei "Regeln" nicht für dein Software Paket, sondern für das weitere Script, das Harald von der Bedienung her vor dein Paket setzt, um die Bedienung für den Nutzer noch flexibler zu gestalten.
Aber da kann Harald mehr dazu sagen als ich, da er es geschrieben hat.

Das neue Paket 0.9dev ist übrigens echt ein Segen. Vielen Dank dafür. Die Ausgabe der eventuellen delayed blocks im Terminal erlaubte es mir alle im improvefile Script verfügbaren "Stellschrauben" perfekt zu optimieren. Bin sehr zufrieden!

Viele Grüße
Horst
Bild
nihil.sine.causa
Aktiver Hörer
Beiträge: 1507
Registriert: 28.07.2011, 12:31
Wohnort: Bonn

Beitrag von nihil.sine.causa »

Hallo Horst, hallo Frank,
Trinnov hat geschrieben: 23.12.2023, 21:23 so wie ich das verstanden habe, gelten die von mir genannten zwei "Regeln" nicht für dein Software Paket, sondern für das weitere Script, das Harald von der Bedienung her vor dein Paket setzt, um die Bedienung für den Nutzer noch flexibler zu gestalten.
Aber da kann Harald mehr dazu sagen als ich, da er es geschrieben hat.
Ja, das mit den Leerzeichen habe ich verbrochen. Ich habe vor 35 Jahren mit Unix später Linux gearbeitet, an die Kenntnisse von damals knüpfe ich etwas an. Ich lese alle Musikalben aus einem Quellverzeichnis, improve die Inhalte mit Franks script und schreibe alles in ein Zielverzeichnis. Dazu haben meine Kenntnisse gereicht. Allerdings habe ich es auf Anhieb nicht geschafft, alle Verzeichnisnamen und Dateinamen per Script entsprechend automatisiert zu behandeln, wenn diese Leerzeichen enthalten. Also müssen die Leerzeichen ' ' vorher durch Unterstriche '_' ersetzt werden, wenn mein Script arbeiten soll. Room for improvement also fürs nächste Jahr! Dein Script "improvefile", Frank, kann nix dafür.

Viele Grüße
Harald
Bild
uli.brueggemann
Aktiver Hersteller
Beiträge: 4663
Registriert: 23.03.2009, 15:58
Wohnort: 33649
Kontaktdaten:

Beitrag von uli.brueggemann »

Hallo Harald,

Windows kommt mit Leerzeichen in Datei-/Ordnernamen klar wenn mann sie mit double quotes umrahmt. Also "Dies ist eine Datei.wav"
Das sollte mit Linux ebenfalls klappen.

Grüsse
Uli
Bild
nihil.sine.causa
Aktiver Hörer
Beiträge: 1507
Registriert: 28.07.2011, 12:31
Wohnort: Bonn

Beitrag von nihil.sine.causa »

Hallo Uli,
uli.brueggemann hat geschrieben: 24.12.2023, 12:49 Windows kommt mit Leerzeichen in Datei-/Ordnernamen klar wenn mann sie mit double quotes umrahmt. Also "Dies ist eine Datei.wav"
Das sollte mit Linux ebenfalls klappen.
Danke für den Tipp, irgendwie hat das auf Anhieb nicht funktioniert, aber ich schaffe das schon noch. Obwohl ... vielleicht klingt es am Ende weniger füllig, wenn die Dateinahmen mit Leerzeichen versehen sind? Wer weiß?

Viele Grüße
Harald
Bild
uli.brueggemann
Aktiver Hersteller
Beiträge: 4663
Registriert: 23.03.2009, 15:58
Wohnort: 33649
Kontaktdaten:

Beitrag von uli.brueggemann »

Ich habe mich die Tage mal ein bisschen intensiver mit dem improvefile beschäftigt. Dazu dann mal auf meinem Raspberry Pi4 das DietPi installiert und mit der letzten Version 0.9 gespielt. Nun habe ich am Pi4 keine SSD, also testweise einen USB-Stick verwendet. Was direkt dazu geführt hat, dass das improvefile-Skript, das ich als DAU noch mit verbose habe laufen lassen, nur noch lauter delay block Meldungen herausgeworfen hat. Nun gut, dann verringern wir also entsprechend Anweisung das loopspersec. Und das muss ich dann bis auf 1 !! reduzieren, damit es keine solche Meldung gibt.
Das ist also weit weg von den 100 loopspersec und noch viel weiter weg von den 2000 loopspersec in Version 0.8. Warum, weshalb, wieso?

Also habe ich mal in das bufhrt reingeschaut und versucht zu verstehen was da nun genau passiert. Letztlich gibt der Anwender da ja die loopspersec und die bytespersec vor. Und nun bin ich überzeugt, dass das nicht der richtige Ansatz ist, zumindest dann, wenn der Rechner nicht passt und der Anwender keine Ahnung hat, was er tut sondern nur nachmacht.

Zur Erläuterung ein bisschen Prosa:

Stellen wir uns vor wir arbeiten jeden Tag, unser Chef möchte das Ergebnis des Vortags an jedem Morgen pünktlich um 9 Uhr sehen. Es sei immer diesselbe Arbeit, deren Verrichtung eine gewisse Zeit braucht, z.B. 8 Stunden. Dann kann ich also jeden Tag nach dem Treffen mit dem Chef beginnen und bin um 17 Uhr fertig. Anschliessend habe ich frei, kann irgendwas anderes tun. Zuletzt geh ich schlafen und stell mir den Wecker, so dass ich punktgenau um 9 Uhr am nächsten Tag das Ergebnis übermittle.
Es sollte klar sein, es ist völlig egal, wann ich nach 9 Uhr mit der Arbeit beginne und wann ich damit fertig bin. Ich könnte jede Stunde eine halbe Stunde Pause machen. Oder zwischendurch einkaufen oder was auch immer. Ich könnte auch um 1 Uhr nachts erst mit der Arbeit beginnen. Mein Wecker erinnert mich immer daran, wann 9 Uhr ist und ich übermittle das Arbeitsergebnis.
Also sowas wie der Übergang von einer total geregelten Arbeitszeit zum Homeoffice.

Nun kommt aber die beste Ehefrau von allen und will dass ich was Wichtigeres tue. Ich werde also mit meiner eigentlichen Arbeit gebremst und damit langsamer ... vieeel langsamer. Plötzlich hat der Tag nur noch 5 Stunden für die Arbeit übrig und ich schaffe das 8-Stunden-Pensum nicht mehr.
LOGISCH: es hilft nix mehr, ich kann den Wecker stellen so viel wie ich will, es klappt nicht.

Und dann hilft es auch nicht, wenn mir der Chef vorgibt ich solle schneller schaffen (= Hochsetzen loopspersec oder bytespersec), ich kann ja nur das was ich eben kann. Möglicherweise kirege ich dann die Kündigung und der Chef stellt jemand anderen ein (sprich er nimmt einen schnelleren Rechner).
Und was dann, wenn der Chef keine Ahnung hat (= DAU) und unsinning mit loopspersec und bytespersec rumspielt?

Irgendwie erinnert mich das auch an das Bürokratie-Monster, welches immer größer wird und trotzdem nie das schafft, was es schaffen soll.

Mein Fazit:
Das Pferd muss andersherum aufgezäumt werden.

Ich habe einen beliebigen Rechner mit irgendeiner Rechenleistung. Der soll effektiv Daten wegschreiben und das zeitlich im genauen Raster. Direkt und ohne Zwischenspeichern (Cache). Das geht am besten, wenn ich die Paketgröße verwende, die er naturgemäß selbst anwendet. Bei Datenträgern aller Art sind das heute 4096 Bytes, Wikipedia weiss dazu einiges. Es gibt eine Reihe von Linuxkommandos, die das anzeigen, z.B. stat /dev/sda etc. In Linux heisst das üblicherweise Block. Theoretisch ergibt bytespersec/loopspersec die Blockgröße, in der Version 0.8 waren das 614400/2000 = 3072 Bytes. Was nicht zur nativen Blockgröße passt.
Also definiere ich eine Chunksize, die sinnvollerweise ein geradzahliges Vielfaches der Blockgröße von 4096 sein sollte. Z.B. 4096, 8192, 16384, ...
Oder auch 5 * 4096 = 20480. Letzteres bewirkt also ein 5-maliges Schreiben eines Blocks, auf keinen Fall aber ein Zwischenpuffern, um aus 3072 Bytes brauchbare Blockgrößen zusammenzuflicken.
Damit wird also schon einmal effektiv gearbeitet.

Um nun zu wissen, was der Rechner kann, gibt es eine einfache Lösung: der Rechner ermittelt das selbst, indem er misst. Mache ich 100 loops und messe die Zeit, ist die Zeit für einen loop das Ergebnis geteilt durch 100. Dann braucht der Anwender die Zeit dafür oder den Kehrwert = loopspersec nicht mehr vorzugeben.
Nun benutzen wir ja ein Multitasking-Betriebssystem und dieses funkt ja dazwischen wie die liebe Ehefrau. Also addiere ich auf die gemessene looptime noch eine sinnvollen sleeptime-Wert und schon habe ich die Vorgabe für die repetierende Weckzeit.

Und nun? Am Ende bin ich in die Linux-Welt eingetaucht und habe das bufhrt umgeschrieben. Alles rausgeworfen, was nicht gebraucht wird. Variablen so benamst, dass man verstehen kann, wofür sie geschaffen sind. Dazu, sofern gewünscht, Bildschirmausgaben erzeugt, die den Anwender aufklären, was da passiert und was die CPU leistet.
Und wenn Ihr mögt, könnt Ihr Euch die Version herunterladen und installieren. Das Programm heisst hrtfilecopy und das Beispielskript ulifileopt. Das Projekt gibt es hier. Nicht per git, ich habe davon nicht wirklich Ahnung. Aber es läuft genauso unter Linux, wie bufhrt. Das Makefile ist entsprechend angepasst.

Wer dann mal ins Programm reinschaut bzw. es ohne Parameter aufruft, findet dann noch einige zusätzliche neue Parameter. Was wir derzeit sicher wissen ist, dass das kopierte File bitidentisch ist. Was weiterhin berichtet wurde ist, dass es besser klingen soll. Was bisher keiner erklärt hat, warum. Laut Frank klingt es bei ihm besser, obwohl die Datei als flac noch entpackt, in der Abtastrate gewandelt und anschliessend noch gefiltert wird. Demzufolge scheint die Verbesserung recht robust zu sein. Wird die Datei aber mit einem standard-copy einfach auf ein anderes Laufwerk umkopiert, soll die Verbesserung ja futsch zu sein. Es gibt also noch logisch Unerforschtes. Mit den neuen Parametern kann der Anwender, so sie gesetzt sind, das memclean, das nanosleep, das memoryrefresh und das direkte Schreiben auf die Festplatte einzeln oder in Kombination abschalten und so herausfinden, was denn eigentlich von den Maßnahmen den wichtigen Anteil an Verbesserung bewirkt. Ich fände es spannend, wenn es da Ergebnisse gibt.

Und falls es Verbesserungsvorschläge gibt, natürlich immer her damit.

Einen guten Rutsch und alles Gute für ein gesundes, erfolgreiches und friedliches Neues Jahr 2024 !
Uli

PS: natürlich läuft es mit einem richtigen PC und mit SSD wesentlich effektiver als mit einem Raspberry Pi. Meine AMD-CPU erreicht dann ca. 700 loops bei 4096 Bytes chunksize. Bei 16384 Bytes wird es noch viel schneller. Bei Vorgabe einer buffersitz von 512 MByte passt eine übliche wav-Datei ganz in den Puffer, man könnte den dann theroetisch und auch praktisch in einem Rutsch rausschreiben = kürzeste Bearbeitungszeit. Allerdings braucht dann der Wecker nur einmal zu klingeln und ich weiss nicht ob das dann noch dem Gedanken des Nanosekunden-Timings einzelner Pakete entspricht.
Bild
Bernd Peter
Aktiver Hörer
Beiträge: 4007
Registriert: 04.05.2010, 19:37

Beitrag von Bernd Peter »

Hallo Uli,

kritische Stimmen sind einem Projekt grundsätzlich förderlich, wenn man das Optimum herausholen will.

Kenne ich nur zu gut aus der Arbeitswelt, wenn der Chef in der Diskussionsrunde den Advocatus Diaboli gibt.

Im vorliegenden Fall habe ich mit dem Thinkpad T61 (Core2Duo) bei 100 keine delays zu verzeichnen, hat aber unserer Erfahrung nach auch was mit den Datenträgern zu tun.

Mein Hörergebnis mit improvten Files ist übrigens weit entfernt von deinem, was mich doch etwas erstaunt und nachdenklich macht.

Es grüßt

Bernd Peter
Bild
uli.brueggemann
Aktiver Hersteller
Beiträge: 4663
Registriert: 23.03.2009, 15:58
Wohnort: 33649
Kontaktdaten:

Beitrag von uli.brueggemann »

Hallo Bernd-Peter,

wenn Du mal das hrtfilefopy antestest, dann wird Dir zumindest auch angezeigt was Dein Thinkpad T61 denn so erreichen kann. Es macht dabei Sinn das für eine chunksize von 4096 als auch 16384 anzuschauen.

Grüsse
Uli
Bild
Tinitus
Aktiver Hörer
Beiträge: 1323
Registriert: 10.11.2013, 21:48

Beitrag von Tinitus »

uli.brueggemann hat geschrieben: 31.12.2023, 13:48 Wer dann mal ins Programm reinschat bzw. es ohne Parameter aufruft, findet dann noch einige zusätzliche neue Parameter. Was wir derzeit sicher wissen ist, dass das kopierte Programm bitidentisch ist. Was weiterhin berichtet wurde ist, dass es besser klingen soll. Was bisher keiner erklärt hat, warum.
Hallo Uli,

da wo ich Programm fett gemacht habe, müsste Musikdatei stehen, oder? Ich weiß, ich bin manchmal Korinthenkacker aber das könnte zu Verwirrung führen.

Zur Diskussion kann ich nichts beitragen, außer, dass es hilfreich sein kann, sich in Erinnerung zu rufen, dass keiner von uns die "echte" Realität kennt, da wir diese alle nur durch unsere Sinne wahrnehmen und diese Sinne sind nicht bei jedem gleich ausgeprägt. Wenn jemand etwas in seinem setup ändert und das als so positiv bewertet, dass sich für ihn der Aufwand lohnt, wüsste ich nicht, warum er einen ABX Test machen sollte, um anderen das nachweisen zu können. Der ABX test sagt auch nur aus, dass man einen Unterschied hört, welche Variante dann besser gefällt mag schon individuell verschieden sein. Klar ist auch, wenn andere keinen Unterschied hören, müssen sie sich dafür weder entschuldigen, noch muss es an der Qualität ihrer Anlage liegen. Es gilt:

Jede Jeck is anders

PS: Sicherlich gibt es innerhalb der Spezies mensch keine so krassen Unterschiede aber hier ist beschrieben wie Menschen und Hunde farben wahrnehmen, die Realität ist aber für beide dieselbe:

https://kunighunde.de/sehen-hunde-alles ... warz-weiss
Bild
uli.brueggemann
Aktiver Hersteller
Beiträge: 4663
Registriert: 23.03.2009, 15:58
Wohnort: 33649
Kontaktdaten:

Beitrag von uli.brueggemann »

Danke für den Hinweis. Ja klar, die kopierte Musikdatei ist bitidentisch. Das Programm definitiv nicht.
Vielleicht kann die Moderation das korrigieren.

Oder? [Erbsenzählermodus on]
Das hrtfilecopy ist nicht bitidentisch zu bufhrt.
Wenn man aber das Programm hrtfilecopy oder auch bufhrt mit dem Programm hrtfilecopy/bufhrt kopiert (es kann jede beliebige Datei damit kopiert werden!), dann ist die Kopie bitidentisch und damit stimmt die Aussage doch. :mrgreen:
[Erbsenzählermodus off]

Grüsse
Uli

Ist oben korrigiert, Jürgen
Bild
Trinnov
Aktiver Hörer
Beiträge: 977
Registriert: 13.11.2009, 19:02

Beitrag von Trinnov »

Hallo,

ich will das oben geschriebene bewusst nicht kommentieren, weil es eigentlich nur ermüdet.
Es ist nur ein hin und her.

Jedenfalls habe ich natürlich auch Ulis Software und Script getestet. Auch die ist noch etwas gewachsen, bis sie dann hier verlinkt wurde.
Uli, herzlichen Dank dafür!
Einen herzlichen Dank auch nochmals an Frank für seine Software und Harald für sein sehr nützliches Script.
Ich rufe grundsätzlich die Script Varianten improvefile und ulifileopt mit Haralds Script auf, weil es dem Komfort sehr dient.

In Kürze gibt es einen Hörtermin mit erfahrenem Publikum. Da werde ich meinen bereits fertiggestellten Improve Beispiel-Stick mitbringen.
Dieser enthält insgesamt 9 !! verschiedene Improve Varianten mit jeweils 34 improvten Tracks. Zum Teil mit Franks Software, zum Teil mit Ulis Software.
Dann noch Varianten die sich im Script- bzw. Programm-Aufruf unterscheiden und dann auch noch jeweils 1-fach, 2-fach und 3-fach improve.
Die Varianten unterscheiden sich nicht bezüglich der ulifileopt bzw. improve Script Einstellungen. Darum geht es nicht.

Ich habe in Ulis Script eine chunk size gesetzt, die dem Improve Vorgang ungefähr die gleiche Zeit gibt für das Improven eines Tracks, wie Franks Software. Bei Franks Software ist es elementar "delayed blocks" zu vermeiden, also die Einstellungen im Improve Script entsprechend richtig zu setzen. Langsame Datenträger sollten mit weniger loops per second improvt werden. Dann treten auch keine delayed blocks auf. Die Ausgabe per verbose ist da sehr hilfreich.
Ulis Software hrtfilecopy macht einen Teil der Einstellungen automatisiert. Es wird also durch einen Testlauf der Datenträger "gemessen" und dann gewisse Parameter festgelegt.

Wir lassen uns überraschen, was die Hörer dazu sagen.
Aktuell kann ich selbst nicht "vergleichshören", aufgrund der Weihnachtsdekoration statt Lautsprecher.
Es gibt wohl eine Einschätzung von mir über meine Büro-PC Abhöre, aber das soll keine valide Wertung sein.
Sicher gehen kann ich nur, wenn ich mit der großen Anlage abhöre und das wird auch noch ein paar Tage dauern. Der andere Termin ist früher.


Viele Grüße
Horst
Bild
Nordlicht
Aktiver Hörer
Beiträge: 608
Registriert: 04.05.2015, 19:43
Wohnort: Schleswig-Holstein

Beitrag von Nordlicht »

Liebe Forumskollegen

Es ist beeindruckend mit welcher Kompetenz und welchem Ehrgeiz ihr euch diesem Thema angenommen habt.
Für mich als Laie sind diese hochtechnischen Details nicht abschätzbar. Es freut mich besonders dass ihr gemeinsam an dem Projekt arbeitet.
Es wäre schön, wenn man Ende eine Lösung steht die für Alle anwendbar ist.

Dieses hohe technische Niveau ist wohl nur in diesem Forum denkbar, ohne eigene Selbstdarstellung und Egoismus.

Macht bitte weiter so, ich freue mich auf das was noch kommt.

Viele Grüße
Jörg
Bild
Trinnov
Aktiver Hörer
Beiträge: 977
Registriert: 13.11.2009, 19:02

Beitrag von Trinnov »

Hallo Uli,

bei deiner am 31.12. hier geteilten hrtfilecopy Version klappt das Kompilieren nicht.
Bricht ab mit Fehler und kompiliert nicht ins bin Verzeichnis.
Irgendein Make ... Fehler zum Ende des kompilierens. Ich weiß es nicht mehr genau, weil ich schon wieder zurück bin auf die Vorversion. Das kompilierte File im bin Ordner lösche ich immer sicherheitshalber vorher. So sehe ich sowieso, ob er die im src Ordner befindliche hrtfilecopy neu kompiliert.
Die allerletzte der 29.12. Versionen geht noch einwandfrei.

Viele Grüße
Horst
Bild
uli.brueggemann
Aktiver Hersteller
Beiträge: 4663
Registriert: 23.03.2009, 15:58
Wohnort: 33649
Kontaktdaten:

Beitrag von uli.brueggemann »

Hallo Horst,

bitte nochmal herunterladen. Es sollte nun klappen.

Grüsse
Uli
Bild
Trinnov
Aktiver Hörer
Beiträge: 977
Registriert: 13.11.2009, 19:02

Beitrag von Trinnov »

Danke!
Jetzt funktioniert es fehlerfrei :D
Gibt sich als Version 0.2 aus

Viele Grüße
Horst
Bild
frankl
Aktiver Hörer
Beiträge: 489
Registriert: 20.01.2013, 01:43
Wohnort: Aachen

Beitrag von frankl »

uli.brueggemann hat geschrieben: 31.12.2023, 13:48 Ich habe mich die Tage mal ein bisschen intensiver mit dem improvefile beschäftigt. Dazu dann mal auf meinem Raspberry Pi4 das DietPi installiert und mit der letzten Version 0.9 gespielt. Nun habe ich am Pi4 keine SSD, also testweise einen USB-Stick verwendet. Was direkt dazu geführt hat, dass das improvefile-Skript, das ich als DAU noch mit verbose habe laufen lassen, nur noch lauter delay block Meldungen herausgeworfen hat. Nun gut, dann verringern wir also entsprechend Anweisung das loopspersec. Und das muss ich dann bis auf 1 !! reduzieren, damit es keine solche Meldung gibt.
Das ist also weit weg von den 100 loopspersec und noch viel weiter weg von den 2000 loopspersec in Version 0.8. Warum, weshalb, wieso?
Hallo Uli,

ja, sinnvolle Werte für '--loops-per-second' hängen sehr von der Hardware des Speichermediums ab (wenn zusammen mit '--dsync' benutzt, das verhindern soll, dass nur in einen Cache geschrieben wird). Gewisse USB-Sticks oder alte Card-Reader sind da wohl die Extrembeispiele.
uli.brueggemann hat geschrieben: 31.12.2023, 13:48 Also habe ich mal in das bufhrt reingeschaut und versucht zu verstehen was da nun genau passiert. Letztlich gibt der Anwender da ja die loopspersec und die bytespersec vor. Und nun bin ich überzeugt, dass das nicht der richtige Ansatz ist, zumindest dann, wenn der Rechner nicht passt und der Anwender keine Ahnung hat, was er tut sondern nur nachmacht.

[...]
Mein Fazit:
Das Pferd muss andersherum aufgezäumt werden.

Ich habe einen beliebigen Rechner mit irgendeiner Rechenleistung. Der soll effektiv Daten wegschreiben und das zeitlich im genauen Raster. Direkt und ohne Zwischenspeichern (Cache). Das geht am besten, wenn ich die Paketgröße verwende, die er naturgemäß selbst anwendet. Bei Datenträgern aller Art sind das heute 4096 Bytes, Wikipedia weiss dazu einiges. Es gibt eine Reihe von Linuxkommandos, die das anzeigen, z.B. stat /dev/sda etc. In Linux heisst das üblicherweise Block. Theoretisch ergibt bytespersec/loopspersec die Blockgröße, in der Version 0.8 waren das 614400/2000 = 3072 Bytes. Was nicht zur nativen Blockgröße passt.
Also definiere ich eine Chunksize, die sinnvollerweise ein geradzahliges Vielfaches der Blockgröße von 4096 sein sollte. Z.B. 4096, 8192, 16384, ...
Oder auch 5 * 4096 = 20480. Letzteres bewirkt also ein 5-maliges Schreiben eines Blocks, auf keinen Fall aber ein Zwischenpuffern, um aus 3072 Bytes brauchbare Blockgrößen zusammenzuflicken.
Damit wird also schon einmal effektiv gearbeitet.
Ja, die "Page"-Größe ist bei den meisten heutigen Dateisystemen 4096 Bytes (oder eine andere Potenz von 2) und vielleicht ist es vorteilhaft, das bei den gewählten Blockgrößen zu berücksichtigen (in meiner aktualisierten Version des 'improvefile' Skriptes habe ich ja auch 100*2^15 für den Parameter "--bytes-per-second" gewählt). Hörbare Unterschiede konnte ich dabei allerdings nicht beobachten.
uli.brueggemann hat geschrieben: 31.12.2023, 13:48 Um nun zu wissen, was der Rechner kann, gibt es eine einfache Lösung: der Rechner ermittelt das selbst, indem er misst. Mache ich 100 loops und messe die Zeit, ist die Zeit für einen loop das Ergebnis geteilt durch 100. Dann braucht der Anwender die Zeit dafür oder den Kehrwert = loopspersec nicht mehr vorzugeben.
Nun benutzen wir ja ein Multitasking-Betriebssystem und dieses funkt ja dazwischen wie die liebe Ehefrau. Also addiere ich auf die gemessene looptime noch eine sinnvollen sleeptime-Wert und schon habe ich die Vorgabe für die repetierende Weckzeit.

Und nun? Am Ende bin ich in die Linux-Welt eingetaucht und habe das bufhrt umgeschrieben. Alles rausgeworfen, was nicht gebraucht wird. Variablen so benamst, dass man verstehen kann, wofür sie geschaffen sind. Dazu, sofern gewünscht, Bildschirmausgaben erzeugt, die den Anwender aufklären, was da passiert und was die CPU leistet.
Und wenn Ihr mögt, könnt Ihr Euch die Version herunterladen und installieren. Das Programm heisst hrtfilecopy und das Beispielskript ulifileopt. Das Projekt gibt es hier. Nicht per git, ich habe davon nicht wirklich Ahnung. Aber es läuft genauso unter Linux, wie bufhrt. Das Makefile ist entsprechend angepasst.
Sehr gut! Das ist ja genau der Vorteil von Open Source Software, dass man sich den Code anschauen kann und diesen auch für den eigenen Bedarf ändern kann, wenn einem etwas nicht passt oder man denkt, dass man es besser machen kann.

Bei "Alles rausgeworfen, was nicht gebraucht wird " solltest Du aber ergänzen "für den Fall, dass das Programm eine Datei auf eine andere kopiert". Denn 'bufhrt' erlaubt ja noch zahlreiche andere Ein- und Ausgabemöglichkeiten, die für andere Anwendungen interessant sind. (Das sollte auch im Hilfetext entsprechend angepasst werden.)
uli.brueggemann hat geschrieben: 31.12.2023, 13:48 Wer dann mal ins Programm reinschaut bzw. es ohne Parameter aufruft, findet dann noch einige zusätzliche neue Parameter. Was wir derzeit sicher wissen ist, dass das kopierte File bitidentisch ist. Was weiterhin berichtet wurde ist, dass es besser klingen soll. Was bisher keiner erklärt hat, warum. Laut Frank klingt es bei ihm besser, obwohl die Datei als flac noch entpackt, in der Abtastrate gewandelt und anschliessend noch gefiltert wird. Demzufolge scheint die Verbesserung recht robust zu sein. Wird die Datei aber mit einem standard-copy einfach auf ein anderes Laufwerk umkopiert, soll die Verbesserung ja futsch zu sein.
Der letzte Satz entspricht nicht meinen Erfahrungen. Bei Kopieren geht sicher einiges an Qualität wieder verloren, aber nicht alles. Bei früheren Tests blieben Unterschiede auch nach dem Kopieren (mit 'cp' oder sogar 'scp' oder 'rsync' über das Netzwerk) noch erhalten, auch wenn sie weniger deutlich wurden.
uli.brueggemann hat geschrieben: 31.12.2023, 13:48 Es gibt also noch logisch Unerforschtes. Mit den neuen Parametern kann der Anwender, so sie gesetzt sind, das memclean, das nanosleep, das memoryrefresh und das direkte Schreiben auf die Festplatte einzeln oder in Kombination abschalten und so herausfinden, was denn eigentlich von den Maßnahmen den wichtigen Anteil an Verbesserung bewirkt. Ich fände es spannend, wenn es da Ergebnisse gibt.
Ja, es ist eine gute Idee, zum Erforschen die verschiedenen Mechanismen leicht an- und abschaltbar zu machen.

Wenn ich mir den Code anschaue, wundert es mich, dass Du die Überprüfung und die Meldungen zu "delayed blocks" auch rausgeschmissen hast. Dabei kommt es Dir doch gerade darauf an, hier automatisiert sinnvolle Parameter zu finden.

Und nach der Erfahrung mit diesen Meldungen in 'bufhrt' scheint mir Deine Strategie zur Automatisierung auch nicht sehr sinnvoll zu sein. (Diese Meldungen kommen nämlich nicht regelmäßig, sondern in gewissen Abständen gehäuft.)

Nachdem ich in dem von Dir heute morgen heruntergeladenen Programm die fehlende "}" Klammer eingefügt habe, damit es kompiliert, habe ich den Test zu "delayed blocks" dort wieder eingefügt, und am Ende zwei Zeilen in der Ausgabe hinzugefügt. Ich habe das dann nur auf meinem Notebook getestet und zumindest dort kann ich Deine Behauptung, dass das Programm die richtigen Parameter für gutes Timing findet, nicht nachvollziehen. Hier die gekürzte Ausgabe, die zeigt, dass bei 42% aller geschriebenen Blöcke das Timing nicht passt:

Code: Alles auswählen

--- hrtfilecopy --- uli's version 0.1 of frankl's bufhrt utility ---
--------------------------------------------------------------------
input file                   : data.flac
output file                  : guck
file size [bytes]            : 243324028
chunk size [bytes]           : 16384
chunk count                  : 14851
snippet size [bytes]         : 5244
buffer size [MByte]          : 47.7
chunks in buffer             : 3051
timing measurement           : active
memclean                     : active
nanosleep                    : active
memrefresh                   : active
direct write w/o caching     : active

--- timing test ---
measured loop time [ms]      : 1.628851
-> applied time/loop [ms]    : 2.200000
loops/s                      : 454.5
bytes/s                      : 7447272.7
estimated total loop time [s]: 32.7

--- processing ---
buffer loop                  : #1
file bytes in this loop      : 49987584
hrtfilecopy: delayed block 13

    [ein paar Tausend Zeilen weggelassen...]

hrtfilecopy: delayed block 14851

--- results ---
time/loop [ms]               : 2.200696
loops/s                      : 454.4
bytes/s                      : 7444575.8
total loop time [s]          : 32.7
number of written blocks     : 14852
number of delayed blocks     : 6269
--------------------------------------------------------------------
uli.brueggemann hat geschrieben: 31.12.2023, 13:48 Einen guten Rutsch und alles Gute für ein gesundes, erfolgreiches und friedliches Neues Jahr 2024 !
Danke, auch von mir die besten Wünsche für das neue Jahr an Dich und alle anderen Forenten!

Viele Grüße,
Frank

PS: Ich experimentiere auch noch mit einem weiteren Parameter für 'bufhrt', aber ich muss erstmal eine Weile selbst testen, wie sich das auswirkt.
Bild
Antworten