Hi,
Zum Reproduzieren: Ich lege auf ARD HD und ZDF HD Timer für die aktuelle und die nächsten Sendungen an.
Dann stoppe ich vdr, und starte vdr neu, und zwar ohne Patches und ohne Plugins. Im Syslog:
Oct 7 09:20:53 rpi4s vdr: [355007] video directory scanner thread ended (pid=355006, tid=355007)
Oct 7 09:20:55 rpi4s vdr: [355029] executing '/usr/lib/vdr/vdr-recordingaction started "/mnt/md0/vdr/videos/video/Die_beste_klasse_Deutschlands_-_Das_Superfinale/2023-10-07.08.00.1-0.rec"'
Oct 7 09:21:00 rpi4s vdr: [355047] recording thread started (pid=355006, tid=355047, prio=high)
Oct 7 09:21:00 rpi4s vdr: [355006] writing timer id '20@sp' to /mnt/md0/vdr/videos/video/Bibi_und_Tina/2023-10-07.09.05.2-0.rec/.timer
Oct 7 09:21:00 rpi4s vdr: [355048] device 2 receiver thread started (pid=355006, tid=355048, prio=high)
Oct 7 09:21:00 rpi4s vdr: [355049] device 2 TS buffer thread started (pid=355006, tid=355049, prio=high)
Oct 7 09:21:01 rpi4s recordingaction: executing /usr/share/vdr/recording-hooks/R50.tvscraper as shell script
Oct 7 09:21:01 rpi4s recordingaction: executing /usr/share/vdr/recording-hooks/R55_markad as shell script
Oct 7 09:21:01 rpi4s vdr: [355009] channel 1 (Das Erste HD) event Sa. 07.10.2023 08:00-09:30 (VPS: 07.10. 08:00) 'Die beste klasse Deutschlands - Das Superfinale' status 4
Oct 7 09:21:01 rpi4s recordingaction: executing /usr/share/vdr/recording-hooks/R60.updateClients as shell script
Oct 7 09:21:01 rpi4s vdr: [355030] i/o throttle activated, count = 1 (tid=355030)
Oct 7 09:21:01 rpi4s vdr: [355011] channel 2 (ZDF HD) event Sa. 07.10.2023 09:05-09:30 (VPS: 07.10. 09:05) 'Bibi und Tina' status 4
Oct 7 09:21:01 rpi4s vdr: [355047] H.264: 1280 x 720p 50,00 fps 8 Bit
Oct 7 09:21:01 rpi4s vdr[355060]: 220 rpi3 SVDRP VideoDiskRecorder 2.6.4; Sat Oct 7 09:21:01 2023; UTF-8
Oct 7 09:21:01 rpi4s vdr[355060]: 250 Re-read of recordings directory triggered
Oct 7 09:21:01 rpi4s vdr[355060]: 221 rpi3 closing connection
Oct 7 09:21:02 rpi4s vdr: [355047] executing '/usr/lib/vdr/vdr-recordingaction started "/mnt/md0/vdr/videos/video/Bibi_und_Tina/2023-10-07.09.05.2-0.rec"'
Oct 7 09:21:02 rpi4s vdr: [355030] i/o throttle released, count = 0 (tid=355030)
Oct 7 09:21:06 rpi4s vdr: [355048] i/o throttle activated, count = 1 (tid=355048)
Oct 7 09:21:07 rpi4s recordingaction: executing /usr/share/vdr/recording-hooks/R50.tvscraper as shell script
Oct 7 09:21:07 rpi4s recordingaction: executing /usr/share/vdr/recording-hooks/R55_markad as shell script
Oct 7 09:21:07 rpi4s recordingaction: executing /usr/share/vdr/recording-hooks/R60.updateClients as shell script
Oct 7 09:21:07 rpi4s vdr[355076]: 220 rpi3 SVDRP VideoDiskRecorder 2.6.4; Sat Oct 7 09:21:07 2023; UTF-8
Oct 7 09:21:07 rpi4s vdr[355076]: 250 Re-read of recordings directory triggered
Oct 7 09:21:07 rpi4s vdr[355076]: 221 rpi3 closing connection
Oct 7 09:21:07 rpi4s recordingaction: executing /usr/share/vdr/recording-hooks/R90.custom as shell script
Oct 7 09:21:08 rpi4s vdr: [355048] i/o throttle released, count = 0 (tid=355048)
Display More
09:20:55: executing '/usr/lib/vdr/vdr-recordingaction started
Und dann passiert erst mal 5 Skunden nichts. Die braucht vdr zum Schließen der Dateien in thread.c,
int MaxPossibleFileDescriptors = getdtablesize();
for (int i = STDERR_FILENO + 1; i < MaxPossibleFileDescriptors; i++)
close(i); //close all dup'ed filedescriptors
Also ich vermute, es sind die Dateien vom DVB Treiber, die so lange zum Schließen brauchen. Sundtek , könnt ihr Euch das bitte mal anschauen/prüfen?
Die Dateien mit den Aufzeichnungen sollten es nicht sein, bereits 2 Sekunden vorher (09:20:53) meldet vdr "video directory scanner thread ended".
5 Sekunden später (09:21:00, nach dem Schließen der Dateien) wird dann "recordingaction: executing /usr/share/vdr/recording-hooks/R50.tvscraper" von "/usr/lib/vdr/vdr-recordingaction" aufgerufen, das gar nichts macht.
Der thread wird so lange blockiert, was zu "i/o throttle activated, count = 1 (tid=355030)" führt. Es hat bei mir auch schon zum Pufferüberlauf / Datenverlust geführt. kls , kannst Du Dir das bitte mal anschauen? Eine Blockade des threads, der "recordingaction started" aufruft, sollte doch nicht zu einer Verzögerung beim Schreiben der Daten führen (?). Oder hat das eine andere Ursache, z.B. dass das System durch die Aufrufe von close() so blockiert wird, dass das System die Daten nicht mehr schreibt?
Um zu verifizieren, dass die Verzögerung tatsächlich durch close() verursacht werden, habe ich einen Patch geschrieben, der die 3 oben zitierten Zeilen in thread.c auskommentiert.
Ein Restart des vdr mit diesem Patch führt zu:
mit meinen patches
Oct 7 09:37:09 rpi4s vdr: [356812] video directory scanner thread ended (pid=356811, tid=356812)
Oct 7 09:37:11 rpi4s vdr: [356835] executing '/usr/lib/vdr/vdr-recordingaction started "/mnt/md0/vdr/videos/video/Till_Eulenspiegel/2023-10-07.09.30.1-0.rec"'
Oct 7 09:37:11 rpi4s recordingaction: executing /usr/share/vdr/recording-hooks/R50.tvscraper as shell script
Oct 7 09:37:11 rpi4s recordingaction: executing /usr/share/vdr/recording-hooks/R55_markad as shell script
Oct 7 09:37:11 rpi4s recordingaction: executing /usr/share/vdr/recording-hooks/R60.updateClients as shell script
Oct 7 09:37:11 rpi4s vdr: [356811] timer 19 (2 0930-0955 VPS 'Bibi und Tina') start
Oct 7 09:37:11 rpi4s vdr: [356811] Title: 'Bibi und Tina' Subtitle: 'Die Schmugglerpferde'
Oct 7 09:37:11 rpi4s vdr: [356811] record /mnt/md0/vdr/videos/video/Bibi_und_Tina/2023-10-07.09.30.2-0.rec
Oct 7 09:37:11 rpi4s vdr[356849]: 220 rpi3 SVDRP VideoDiskRecorder 2.6.4; Sat Oct 7 09:37:11 2023; UTF-8
Oct 7 09:37:11 rpi4s vdr[356849]: 250 Re-read of recordings directory triggered
Oct 7 09:37:11 rpi4s vdr[356849]: 221 rpi3 closing connection
Oct 7 09:37:12 rpi4s vdr: [356866] executing '/usr/lib/vdr/vdr-recordingaction started "/mnt/md0/vdr/videos/video/Bibi_und_Tina/2023-10-07.09.30.2-0.rec"'
Oct 7 09:37:12 rpi4s vdr: [356814] channel 1 (Das Erste HD) event Sa. 07.10.2023 09:30-11:25 (VPS: 07.10. 09:30) 'Till Eulenspiegel' status 4
Oct 7 09:37:12 rpi4s recordingaction: executing /usr/share/vdr/recording-hooks/R50.tvscraper as shell script
Oct 7 09:37:12 rpi4s recordingaction: executing /usr/share/vdr/recording-hooks/R55_markad as shell script
Oct 7 09:37:12 rpi4s recordingaction: executing /usr/share/vdr/recording-hooks/R60.updateClients as shell script
Oct 7 09:37:13 rpi4s vdr[356880]: 220 rpi3 SVDRP VideoDiskRecorder 2.6.4; Sat Oct 7 09:37:13 2023; UTF-8
Oct 7 09:37:13 rpi4s vdr[356880]: 250 Re-read of recordings directory triggered
Oct 7 09:37:13 rpi4s vdr[356880]: 221 rpi3 closing connection
Oct 7 09:37:13 rpi4s recordingaction: executing /usr/share/vdr/recording-hooks/R90.custom as shell script
Display More
Die Verzögerung ist weg, und auch "i/o throttle activated" taucht nicht mehr auf.
Trotzdem ist diese Lösung vermutlich nicht für alle geeignet, in https://stackoverflow.com/ques…-fork-and-prior-to-callin wird beschrieben, wozu das close() benötigt wird.
~Markus