Experiment: Direkt in eine Partition schreiben
-
- Senior Member
- Beiträge: 255
- Registriert: Donnerstag 25. August 2005, 11:34
Experiment: Direkt in eine Partition schreiben
Moin!
Nachdem ich nun endlich dieses Wochenende doch was compiled (und gestartet...) bekommen habe:
Ein kleiner Vorschlag für einen Quick-Hack um was zu probieren, und zwar alles von Filesystemen zu umgehen:
In
apps/tuxbox/neutrino/src/driver/stream2file.cpp
habe ich kurzerhand mal die Routine
void * FileThread(void * v_arg)
geändert und direkt die Partition eingetragen...
...
if ((fd2 = open("/dev/discs/disc0/part2" /* filename*/, use_o_sync ? O_WRONLY | O_CREAT | O_SYNC | ...
[Edit: statt)
if ((fd2 = open( filename, ....
Böse, aber geht :-).
Besser wäre wohl ein Link oder sowas, das die gleiche Wirkung hat. Ideen/Vorschläge bitte Posten :-)
Auf jeden Fall wird so direkt in die Partition 2 der Platte geschrieben.
Vorsicht, natürlich wird dort auch das Filesystem überbügelt, also die sollte dann besser auch nicht gemountet sein und nichts "wichtiges" enthalten :-) Wenn es eine andere sein soll, sollte die Anpassung ja klar sein.
Und dann mal mit hohen Bitraten testen und vielleicht "top" dazu?!
Abspielen der Aufzeichnung hat bei mir funktioniert wenn ich den "Filter" im Movieplayer ausschalte und direkt die oben genannte Datei wähle.
Leider hatte ich nur ein paar Minuten zum Testen, aber vielleicht hat ja jemand mehr Zeit.
Ciao,
DboxBaer
Nachdem ich nun endlich dieses Wochenende doch was compiled (und gestartet...) bekommen habe:
Ein kleiner Vorschlag für einen Quick-Hack um was zu probieren, und zwar alles von Filesystemen zu umgehen:
In
apps/tuxbox/neutrino/src/driver/stream2file.cpp
habe ich kurzerhand mal die Routine
void * FileThread(void * v_arg)
geändert und direkt die Partition eingetragen...
...
if ((fd2 = open("/dev/discs/disc0/part2" /* filename*/, use_o_sync ? O_WRONLY | O_CREAT | O_SYNC | ...
[Edit: statt)
if ((fd2 = open( filename, ....
Böse, aber geht :-).
Besser wäre wohl ein Link oder sowas, das die gleiche Wirkung hat. Ideen/Vorschläge bitte Posten :-)
Auf jeden Fall wird so direkt in die Partition 2 der Platte geschrieben.
Vorsicht, natürlich wird dort auch das Filesystem überbügelt, also die sollte dann besser auch nicht gemountet sein und nichts "wichtiges" enthalten :-) Wenn es eine andere sein soll, sollte die Anpassung ja klar sein.
Und dann mal mit hohen Bitraten testen und vielleicht "top" dazu?!
Abspielen der Aufzeichnung hat bei mir funktioniert wenn ich den "Filter" im Movieplayer ausschalte und direkt die oben genannte Datei wähle.
Leider hatte ich nur ein paar Minuten zum Testen, aber vielleicht hat ja jemand mehr Zeit.
Ciao,
DboxBaer
Zuletzt geändert von DBoxBaer am Montag 15. Januar 2007, 14:23, insgesamt 1-mal geändert.
... und der Rest ist dann Software (TM)
-
- Einsteiger
- Beiträge: 144
- Registriert: Sonntag 6. August 2006, 11:16
-
- Senior Member
- Beiträge: 255
- Registriert: Donnerstag 25. August 2005, 11:34
Oh, ich glaube das ist ganz egal. Man muss dafür nur Neutrino selbst compilen :-)pOo hat geschrieben:welchen snap brauchen wir denn dafür
Real wurde das .xml File bei mir noch gespeichert wie bisher, also dafür sollte dann auch was da und konfiguriert sein, wo das geht :-)
War bei mir aber kein Problem, weil es eine YADD war und da durfte dieses XML File auch gerne auf dem Netzwerk abgelegt werden...
Einfacher wäre es natürlich für viele, wenn jemand einen reinen "TS Aufzeichnungs Code" schreibt, der Standalone läuft und daher keine Modifikation des normalen Neutrino erfordert...
Und ja, man könnte natürlich ein Image erstellen und das über eine Option einstellbar machen und pipapo...
Dann ist wieder die Frage wie die Platte partitioniert ist und sonstwas.
-> Es soll nur ein schneller Test sein, ob die Performance sich deutlich verbessert wenn man direkt in die Partition schreibt.
Konsequenzen wird das Ergebnis dieses Experiments sicher haben: Ich weiss nur noch nicht welche.
Ciao,
DboxBaer
PS:
Timeshift könnte man auch leicht nebenher mal testen: Aufzeichnen und dann in den Movieplayer und das (Device-)File dabei anschauen. Was passiert?!
... und der Rest ist dann Software (TM)
-
- Tuxboxer
- Beiträge: 5873
- Registriert: Samstag 23. Februar 2002, 22:46
-
- Einsteiger
- Beiträge: 123
- Registriert: Montag 28. November 2005, 11:31
Re: Experiment: Direkt in eine Partition schreiben
Interessant wäre es, dies zu vergleichen mit dem, was sich eventuell mit fadvise bzw. madvise erreichen liesse.DBoxBaer hat geschrieben:Ein kleiner Vorschlag für einen Quick-Hack um was zu probieren, und zwar alles von Filesystemen zu umgehen:
if ((fd2 = open("/dev/discs/disc0/part2" /* filename*/, use_o_sync ? O_WRONLY | O_CREAT | O_SYNC | ...
Mit:
/usr/include/bits/fcntl.h
und ggfs:
/usr/include/bits/mman.h
könnte man vielleicht den Kernel darauf hinweisen, welches Zugriffsschema er für einzelne Dateien annehmen sollte:
/* Advise to `posix_fadvise'. */
# define POSIX_FADV_SEQUENTIAL 2 /* Expect sequential page references. */
# define POSIX_FADV_DONTNEED 4 /* Don't need these pages. */
# define POSIX_FADV_NOREUSE 5 /* Data will be accessed once. */
Vielleicht mehr dazu und kontroverse Diskussion zu O_DIRECT unter: http://kerneltrap.org/node/7563
Leider ist POSIX_FADV_NOREUSE laut Linus höchstselbst ein no-op.
-
- Senior Member
- Beiträge: 255
- Registriert: Donnerstag 25. August 2005, 11:34
Über was grübelst Du?Gorcon hat geschrieben:-> Es soll nur ein schneller Test sein, ob die Performance sich deutlich verbessert wenn man direkt in die Partition schreibt.:gruebel:Man muss dafür nur Neutrino selbst compilen :-)
Gruß Gorcon
Ich hoffe doch das es noch ein paar Leute hier im Forum gibt, die dazu in der Lage sind...
Da man nur eine Zeile im Source anpassen muss, ist das ein schneller Test.
Oder meinst Du den Compile-Vorgang selbst? Der dauert ja auch nur ein paar Augenblicke: ist ja nur ein File geändert.
Und selbst ein kompletter Recompile von einem frischen CVS dauert ja nicht ewig.
Ciao,
DboxBaer
... und der Rest ist dann Software (TM)
-
- Tuxboxer
- Beiträge: 4332
- Registriert: Dienstag 7. Mai 2002, 17:04
ich kann (wenn es bis dahin noch keiner gemacht hat) heute abend mal ein entsprechendes image bereitstellen
---------------------------
Alle weiteren Infos findest Du im WIKI
Bitte vor dem posten Boardregeln lesen und verstehen!
Wie erstelle ich ein Bootlog? Wo finde ich die FAQ?
Alle weiteren Infos findest Du im WIKI
Bitte vor dem posten Boardregeln lesen und verstehen!
Wie erstelle ich ein Bootlog? Wo finde ich die FAQ?
-
- Tuxboxer
- Beiträge: 5873
- Registriert: Samstag 23. Februar 2002, 22:46
Ich habe noch nie ein Image Compiliert, ich wüsste erhlich gesagt garnicht wo ich anfangen sollte.DBoxBaer hat geschrieben:Über was grübelst Du?Gorcon hat geschrieben:-> Es soll nur ein schneller Test sein, ob die Performance sich deutlich verbessert wenn man direkt in die Partition schreibt.Man muss dafür nur Neutrino selbst compilen
Gruß Gorcon
Oder meinst Du den Compile-Vorgang selbst? Der dauert ja auch nur ein paar Augenblicke: ist ja nur ein File geändert.
Und selbst ein kompletter Recompile von einem frischen CVS dauert ja nicht ewig.
Ciao,
DboxBaer
Das würde mir schon sehr helfen.ich kann (wenn es bis dahin noch keiner gemacht hat) heute abend mal ein entsprechendes image bereitstellen
Gruß Gorcon
-
- Tuxboxer
- Beiträge: 4332
- Registriert: Dienstag 7. Mai 2002, 17:04
@Gorcon:
Du bist nun schon so lange dabei und mit yBuild und newmake kann das sogar meine Frau! Also: trau Dich! - oder guck zumindest mal unten mit in den CDK Threads vorbei.
Du bist nun schon so lange dabei und mit yBuild und newmake kann das sogar meine Frau! Also: trau Dich! - oder guck zumindest mal unten mit in den CDK Threads vorbei.
---------------------------
Alle weiteren Infos findest Du im WIKI
Bitte vor dem posten Boardregeln lesen und verstehen!
Wie erstelle ich ein Bootlog? Wo finde ich die FAQ?
Alle weiteren Infos findest Du im WIKI
Bitte vor dem posten Boardregeln lesen und verstehen!
Wie erstelle ich ein Bootlog? Wo finde ich die FAQ?
-
- Tuxboxer
- Beiträge: 5873
- Registriert: Samstag 23. Februar 2002, 22:46
-
- Tuxboxer
- Beiträge: 4332
- Registriert: Dienstag 7. Mai 2002, 17:04
nagut - Versuch wars wert Mit yBuild ist es aber wirklich wie ein Imagebaukasten. Das "Runterladen" passiert ganz von allein und der rest ist mittlerweile komplett menügesteuert und intuitiv.Gorcon hat geschrieben:Das Problem ist das ich kein Englisch kann und diese ganzen CDK Sachen nur in Englisch sind.
Ich wüsste garnicht was ich da runterladen sollte und mein Downloadbuget ist für diesen Monat eh schon erschöpft.
Gruß Gorcon
Die o.g. Änderung reduziert sich auf das <STRG><F> finden der Datei und der entsprechenden Passage und ersetzen derselben. Dann einfach neu bauen.
@Dboxbaer:
ein kompiliertes neutrino binary sollte doch sogar reichen, oder? stream2file.cpp ist IMHO Bestandteil von Neutrino?! Dann brauchs gar kein komplettimage sondern nur das binary auf der HD
---------------------------
Alle weiteren Infos findest Du im WIKI
Bitte vor dem posten Boardregeln lesen und verstehen!
Wie erstelle ich ein Bootlog? Wo finde ich die FAQ?
Alle weiteren Infos findest Du im WIKI
Bitte vor dem posten Boardregeln lesen und verstehen!
Wie erstelle ich ein Bootlog? Wo finde ich die FAQ?
-
- Contributor
- Beiträge: 1833
- Registriert: Mittwoch 10. April 2002, 15:39
-
- Senior Member
- Beiträge: 255
- Registriert: Donnerstag 25. August 2005, 11:34
Hach, wie bin ich froh das es doch noch Selbst-Compiler gibt...
@gorcon: so schlimm ist das wirklich nicht...
Muss aber vielleicht zum Image passen, von wegen Libs und so? Und auf der HD ist es vielleicht nicht so clever, wenn man die dann gleich übernagelt...
Ciao,
DboxBaer
@gorcon: so schlimm ist das wirklich nicht...
Ja, das reicht bestimmt, und ja das ist natürlich im Neutrino (wie der Pfad andeutet...)Tommy hat geschrieben: ein kompiliertes neutrino binary sollte doch sogar reichen, oder? stream2file.cpp ist IMHO Bestandteil von Neutrino?! Dann brauchs gar kein komplettimage sondern nur das binary auf der HD :wink:
Muss aber vielleicht zum Image passen, von wegen Libs und so? Und auf der HD ist es vielleicht nicht so clever, wenn man die dann gleich übernagelt...
Ciao,
DboxBaer
... und der Rest ist dann Software (TM)
-
- Tuxboxer
- Beiträge: 4332
- Registriert: Dienstag 7. Mai 2002, 17:04
So Butter bei die Fische:
kann nicht gehen da /* filename*/ ja anscheinend ein Kommentar ist
soll der eintrag so aussehen?
Sobald ichs genau weiß trag ichs ein und stelle eine neutrino auf meinen webspace.
Code: Alles auswählen
if ((fd2 = open("/dev/discs/disc0/part2" /* filename*/, use_o_sync ? O_WRONLY | O_CREAT | O_SYNC | ...
soll der eintrag so aussehen?
Code: Alles auswählen
if ((fd2 = open("/dev/discs/disc0/part2/testfile.ts", use_o_sync ? O_WRONLY | O_CREAT | O_SYNC | ...
-
- Einsteiger
- Beiträge: 207
- Registriert: Montag 9. Januar 2006, 13:54
-
- Tuxboxer
- Beiträge: 4332
- Registriert: Dienstag 7. Mai 2002, 17:04
jo - nur in den Hochsprachen die ich kenne geht es hinter einem Kommentar nicht mehr weiter. Kann natürlich in cpp anders seinT-Nec hat geschrieben:/* filename*/ sieht mir eher nach auskommentiert aus ... aber irgendwo MUSS ja der Filename her kommrn
---------------------------
Alle weiteren Infos findest Du im WIKI
Bitte vor dem posten Boardregeln lesen und verstehen!
Wie erstelle ich ein Bootlog? Wo finde ich die FAQ?
Alle weiteren Infos findest Du im WIKI
Bitte vor dem posten Boardregeln lesen und verstehen!
Wie erstelle ich ein Bootlog? Wo finde ich die FAQ?
-
- Einsteiger
- Beiträge: 144
- Registriert: Sonntag 6. August 2006, 11:16
-
- Tuxboxer
- Beiträge: 4332
- Registriert: Dienstag 7. Mai 2002, 17:04
Code: Alles auswählen
if ((fd2 = open("/dev/discs/disc0/part2/testfile.ts", use_o_sync ? O_WRONLY | O_CREAT | O_SYNC | O_TRUNC | O_LARGEFILE : O_WRONLY | O_CREAT | O_TRUNC | O_LARGEFILE, S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH)) < 0)
ungetestet und ohne Gewähr. Nur mit leerer Platte benutzen
Vorsicht, natürlich wird dort auch das Filesystem überbügelt, also die sollte dann besser auch nicht gemountet sein und nichts "wichtiges" enthalten Wenn es eine andere sein soll, sollte die Anpassung ja klar sein.
-
- Developer
- Beiträge: 2183
- Registriert: Mittwoch 10. Dezember 2003, 07:59
Code: Alles auswählen
if ((fd2 = open("/dev/discs/disc0/part2" /* filename*/, use_o_sync ? O_WRONLY | O_CREAT | O_SYNC | ...
-
- Tuxboxer
- Beiträge: 4332
- Registriert: Dienstag 7. Mai 2002, 17:04
OK habs korrigiert - liegt neu gebaut unter dem Link oben.Houdini hat geschrieben:Das sollte schon so bleiben, ihr wollt ja direct auf die partition schreiben, da gibts kein filesystem bzw. die partition ist selber das eine File was es gibt.Code: Alles auswählen
if ((fd2 = open("/dev/discs/disc0/part2" /* filename*/, use_o_sync ? O_WRONLY | O_CREAT | O_SYNC | ...
Nun liegts an Euch - ich kanns leider net testen - habe ca 100GB auf der Platte
---------------------------
Alle weiteren Infos findest Du im WIKI
Bitte vor dem posten Boardregeln lesen und verstehen!
Wie erstelle ich ein Bootlog? Wo finde ich die FAQ?
Alle weiteren Infos findest Du im WIKI
Bitte vor dem posten Boardregeln lesen und verstehen!
Wie erstelle ich ein Bootlog? Wo finde ich die FAQ?
-
- Developer
- Beiträge: 587
- Registriert: Freitag 9. September 2005, 21:48
Spannendes Thema , habe aber im Moment leider auch keine leere Platte wo ich das mal ausprobieren könnte ...
Zum Thema unnötiges hin und her kopieren habe ich mir mal Gedanken gemacht, bewege mich da aber noch auf recht dünnem Eis.
[Die Gedanken sind frei]
Wäre es nicht möglich, das die Applikation dem Treiber einen Pointer auf einen segmentieren FIFO mitgibt, in den dieser dann sofort reinschreibt? Das Head/Tail Handling könnte man bei einem segmentieren Buffer dann über einen mutex thread-safe machen.
Oder der FIFO ist im Treiber, und dieser gibt der Applikation nur einen Handle. Die Applikation reicht diesen dann nur weiter an den Filesystem Treiber (wahrscheinlich nicht so dolle, weil man dann denn FS-Treiber (und die posix-Befehle) ändern müßte (?)... Keine Ahnung ob der Aufwand lohnt).
Oder der avia-Treiber schreibt direkt auf die Festplatte, nur kann dieser ja nicht mehr die Linux API (open,close) benutzen (oder doch). Gibt es dazu Alternativen? Im I-net habe ich dazu auch nichts brauchbares finden können ...
[/Die Gedanken sind frei]
Zum Thema unnötiges hin und her kopieren habe ich mir mal Gedanken gemacht, bewege mich da aber noch auf recht dünnem Eis.
[Die Gedanken sind frei]
Wäre es nicht möglich, das die Applikation dem Treiber einen Pointer auf einen segmentieren FIFO mitgibt, in den dieser dann sofort reinschreibt? Das Head/Tail Handling könnte man bei einem segmentieren Buffer dann über einen mutex thread-safe machen.
Oder der FIFO ist im Treiber, und dieser gibt der Applikation nur einen Handle. Die Applikation reicht diesen dann nur weiter an den Filesystem Treiber (wahrscheinlich nicht so dolle, weil man dann denn FS-Treiber (und die posix-Befehle) ändern müßte (?)... Keine Ahnung ob der Aufwand lohnt).
Oder der avia-Treiber schreibt direkt auf die Festplatte, nur kann dieser ja nicht mehr die Linux API (open,close) benutzen (oder doch). Gibt es dazu Alternativen? Im I-net habe ich dazu auch nichts brauchbares finden können ...
[/Die Gedanken sind frei]
-
- Einsteiger
- Beiträge: 205
- Registriert: Montag 19. April 2004, 21:09
-
- Senior Member
- Beiträge: 255
- Registriert: Donnerstag 25. August 2005, 11:34
Danke schonmal fuer die Info.MOhlmann hat geschrieben:Hallo,
ich habe mal meine Festplatte leer gemacht und das Binary von Tommy probiert.
Mit dem neuen habe ich eine System last von ca 70%.
Mit dem alten habe ich ca 76%. Würde also so um die 5% einsparen.
Timeshift habe ich auch probiert, da ist die box ohne ein Meldung abgeschmiert.
Gruß Michael
5% sind 5%, aber das reist es jetzt auch nicht raus.
Hatte aber etwas mehr gehofft...
Wenn jemand zu deutlich anderen Ergebnissen kommt, waere das natuerlich auch interessant, besonders was dann der Unterschied war.
Zu dem /* Kommentar */ Ich habe den alten Parameter nur auskommentiert, weil ich ja vielleicht an dem File noch mehr probieren wollte und die Aenderung rausnehmen wollte.
Das kann man natuerlich auch weglassen: Wichtig war nur das der hart-codierte Name eine Partition ist.
Der naechste Schritt waere nun, ob man sowas aehnliches noch weiter vorne (wie schmutzig auch immer...) hinbekommt und dort dann dadurch was sparen kann.
Warum die Box bei Timeshift abstuerzt sollte man aber auch rausfinden koennen?! Vielleicht hier mal mit geringeren Bitraten probieren?
Ciao,
DboxBaer
... und der Rest ist dann Software (TM)
-
- Interessierter
- Beiträge: 66
- Registriert: Sonntag 20. März 2005, 20:16
-
- Einsteiger
- Beiträge: 144
- Registriert: Sonntag 6. August 2006, 11:16