Experiment: Direkt in eine Partition schreiben

to stream or not to stream
DBoxBaer
Senior Member
Beiträge: 255
Registriert: Donnerstag 25. August 2005, 11:34

Experiment: Direkt in eine Partition schreiben

Beitrag von DBoxBaer »

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
Zuletzt geändert von DBoxBaer am Montag 15. Januar 2007, 14:23, insgesamt 1-mal geändert.
... und der Rest ist dann Software (TM)
pOo
Einsteiger
Einsteiger
Beiträge: 144
Registriert: Sonntag 6. August 2006, 11:16

Beitrag von pOo »

welchen snap brauchen wir denn dafür
DBoxBaer
Senior Member
Beiträge: 255
Registriert: Donnerstag 25. August 2005, 11:34

Beitrag von DBoxBaer »

pOo hat geschrieben:welchen snap brauchen wir denn dafür
Oh, ich glaube das ist ganz egal. Man muss dafür nur Neutrino selbst compilen :-)

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)
Gorcon
Tuxboxer
Tuxboxer
Beiträge: 5873
Registriert: Samstag 23. Februar 2002, 22:46

Beitrag von Gorcon »

-> 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 :-)
:gruebel:

Gruß Gorcon
just_me
Einsteiger
Einsteiger
Beiträge: 123
Registriert: Montag 28. November 2005, 11:31

Re: Experiment: Direkt in eine Partition schreiben

Beitrag von just_me »

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 | ...
Interessant wäre es, dies zu vergleichen mit dem, was sich eventuell mit fadvise bzw. madvise erreichen liesse.

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.
DBoxBaer
Senior Member
Beiträge: 255
Registriert: Donnerstag 25. August 2005, 11:34

Beitrag von DBoxBaer »

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 :-)
:gruebel:

Gruß Gorcon
Über was grübelst Du?

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)
Tommy
Tuxboxer
Tuxboxer
Beiträge: 4332
Registriert: Dienstag 7. Mai 2002, 17:04

Beitrag von Tommy »

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?
Gorcon
Tuxboxer
Tuxboxer
Beiträge: 5873
Registriert: Samstag 23. Februar 2002, 22:46

Beitrag von Gorcon »

DBoxBaer hat geschrieben:
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 :-)
:gruebel:

Gruß Gorcon
Über was grübelst Du?

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
Ich habe noch nie ein Image Compiliert, ich wüsste erhlich gesagt garnicht wo ich anfangen sollte.
ich kann (wenn es bis dahin noch keiner gemacht hat) heute abend mal ein entsprechendes image bereitstellen
Das würde mir schon sehr helfen.

Gruß Gorcon
Tommy
Tuxboxer
Tuxboxer
Beiträge: 4332
Registriert: Dienstag 7. Mai 2002, 17:04

Beitrag von Tommy »

@Gorcon:
Du bist nun schon so lange dabei und mit yBuild und newmake kann das sogar meine Frau! Also: trau Dich! :wink: :lol: - 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?
Gorcon
Tuxboxer
Tuxboxer
Beiträge: 5873
Registriert: Samstag 23. Februar 2002, 22:46

Beitrag von Gorcon »

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
Tommy
Tuxboxer
Tuxboxer
Beiträge: 4332
Registriert: Dienstag 7. Mai 2002, 17:04

Beitrag von Tommy »

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
nagut - Versuch wars wert :wink: 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.

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 :wink:
---------------------------
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?
dietmarw
Contributor
Beiträge: 1833
Registriert: Mittwoch 10. April 2002, 15:39

Beitrag von dietmarw »

Tommy hat geschrieben:...und mit yBuild und newmake kann das sogar meine Frau!...
..auch so ne frau haben will.. 8)
DBoxBaer
Senior Member
Beiträge: 255
Registriert: Donnerstag 25. August 2005, 11:34

Beitrag von DBoxBaer »

Hach, wie bin ich froh das es doch noch Selbst-Compiler gibt...
@gorcon: so schlimm ist das wirklich nicht...
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:
Ja, das reicht bestimmt, und ja das ist natürlich im Neutrino (wie der Pfad andeutet...)
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)
Tommy
Tuxboxer
Tuxboxer
Beiträge: 4332
Registriert: Dienstag 7. Mai 2002, 17:04

Beitrag von Tommy »

So Butter bei die Fische:

Code: Alles auswählen

if ((fd2 = open("/dev/discs/disc0/part2" /* filename*/, use_o_sync ? O_WRONLY | O_CREAT | O_SYNC | ... 
kann nicht gehen da /* filename*/ ja anscheinend ein Kommentar ist

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 | ... 
Sobald ichs genau weiß trag ichs ein und stelle eine neutrino auf meinen webspace.
T-Nec
Einsteiger
Einsteiger
Beiträge: 207
Registriert: Montag 9. Januar 2006, 13:54

Beitrag von T-Nec »

/* filename*/ sieht mir eher nach auskommentiert aus ... aber irgendwo MUSS ja der Filename her kommrn :)
Tommy
Tuxboxer
Tuxboxer
Beiträge: 4332
Registriert: Dienstag 7. Mai 2002, 17:04

Beitrag von Tommy »

T-Nec hat geschrieben:/* filename*/ sieht mir eher nach auskommentiert aus ... aber irgendwo MUSS ja der Filename her kommrn :)
jo - nur in den Hochsprachen die ich kenne geht es hinter einem Kommentar nicht mehr weiter. Kann natürlich in cpp anders sein :gruebel:
---------------------------
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?
pOo
Einsteiger
Einsteiger
Beiträge: 144
Registriert: Sonntag 6. August 2006, 11:16

Beitrag von pOo »

ist in cpp anders. // wuerde fehlerhaft sein, aber /* */ ist in sich abgeschlossen.
Tommy
Tuxboxer
Tuxboxer
Beiträge: 4332
Registriert: Dienstag 7. Mai 2002, 17:04

Beitrag von Tommy »

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)
in der Form habe ichs jetzt eingebaut. Das File liegt unter http://gpi.airlane.de/files/neutrino.neu <-umbenennen

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.
Houdini
Developer
Beiträge: 2183
Registriert: Mittwoch 10. Dezember 2003, 07:59

Beitrag von Houdini »

Code: Alles auswählen

if ((fd2 = open("/dev/discs/disc0/part2" /* filename*/, use_o_sync ? O_WRONLY | O_CREAT | O_SYNC | ...
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.
Tommy
Tuxboxer
Tuxboxer
Beiträge: 4332
Registriert: Dienstag 7. Mai 2002, 17:04

Beitrag von Tommy »

Houdini hat geschrieben:

Code: Alles auswählen

if ((fd2 = open("/dev/discs/disc0/part2" /* filename*/, use_o_sync ? O_WRONLY | O_CREAT | O_SYNC | ...
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.
OK habs korrigiert - liegt neu gebaut unter dem Link oben.

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?
Günther
Developer
Beiträge: 587
Registriert: Freitag 9. September 2005, 21:48

Beitrag von Günther »

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]
MOhlmann
Einsteiger
Einsteiger
Beiträge: 205
Registriert: Montag 19. April 2004, 21:09

Beitrag von MOhlmann »

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
DBoxBaer
Senior Member
Beiträge: 255
Registriert: Donnerstag 25. August 2005, 11:34

Beitrag von DBoxBaer »

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
Danke schonmal fuer die Info.
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)
WoRm
Interessierter
Interessierter
Beiträge: 66
Registriert: Sonntag 20. März 2005, 20:16

Beitrag von WoRm »

hi

also einfach das verlinkte image nehmen und installieren und nix weiter einstellen? und einfach dann ne aufnahme fahren?

kann das heute abend mal probieren, hab noch ne leere platte hier rumliegen

wie sieht man den proz. last?

gruss
pOo
Einsteiger
Einsteiger
Beiträge: 144
Registriert: Sonntag 6. August 2006, 11:16

Beitrag von pOo »

vcorsicht: du loescht auch deine einstellung etc. nur ne anmerkung!