Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Zasto glavi fwrite() pri 25 zapisa/fajlova u sekundi?

[es] :: C/C++ programiranje :: Zasto glavi fwrite() pri 25 zapisa/fajlova u sekundi?

Strane: 1 2 3

[ Pregleda: 3884 | Odgovora: 52 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

mikikg
System administrator
Srbija

Član broj: 3779
Poruke: 5059
*.dynamic.sbb.rs.

Sajt: yu3ma.net


+505 Profil

icon Zasto glavi fwrite() pri 25 zapisa/fajlova u sekundi?23.09.2020. u 13:45 - pre 43 meseci
Pozdrav,

imam neko parce code-a koji radi prostu stvar, hvata neke pakete podataka koju su veliki oko 5-6kB, ti paketi mi dolaze brzinom od 25 paketa u sekundi i program treba da hvata te podatke i snima u fajlove za neku dalju analizu.

Medjutim, to ne radi dobro, kako pustim to da radi program uhvati/snimi nekih 120-150 paketa/fajlova i nakon toga zaglavi??

Program treba da radi na RPi ali isti problem imam i kada to poteram na PC pod macOS, skoro se sve isto ponasa.
Na PC definitivno nemam problema sa I/O brzinom, to je i7 masina sa Aorus NVMe diskom, brze ot toga nemam ...

Probao sam da snimam i u RAMDISK (tmpfs) i isto se ponasa?

U cemu je ovde problem, ko/sta ovde pravi taj problem?

Code:


    ...
    char buf[128000];
    ...
    // U buf su popunjeni podaci ...
    // U len imam duzinu paketa, menja se izmedju 5 i 6 kB ...
    ...

    //----------------- save samples -------------
    if (samlpe_count < 1000 ) {
        char fname[80];
        sprintf(fname, "sample_%03d.dat", samlpe_count);
        printf("Writing %s ... \r\n", fname);

        FILE *my_write_fd = fopen(fname, "w+");
        fwrite(buf, len, 1, my_write_fd);
        fclose(my_write_fd);

        samlpe_count++;
    }



[Ovu poruku je menjao mikikg dana 23.09.2020. u 15:16 GMT+1]
Site about Software Defined Radio – SDR
http://yu3ma.net/
https://github.com/yu3ma
On-line LM317 kalkulator
 
Odgovor na temu

Branimir Maksimovic

Član broj: 64947
Poruke: 5534
82.117.201.26



+1064 Profil

icon Re: Zasto glavi fwrite() pri 25 zapisa/fajlova u sekundi?23.09.2020. u 15:29 - pre 43 meseci
Nisi pokazao kako inicijalizujes len, potom sample count. Ako je to dobro, onda problem moze da bude to sto flushujes svaki
taj write, pa tu moze malo da koci. Inace nw vidim neki problem.
 
Odgovor na temu

mikikg
System administrator
Srbija

Član broj: 3779
Poruke: 5059
*.dynamic.sbb.rs.

Sajt: yu3ma.net


+505 Profil

icon Re: Zasto glavi fwrite() pri 25 zapisa/fajlova u sekundi?23.09.2020. u 15:42 - pre 43 meseci
Duzina koja stoji u len je dobra, to je integer i koristi se posle prilikom dekodiranja paketa, to je OK.
U vezi sample_count, isto obican integer, pocetno inicijalizocan na 0, sa tim hvatam prvih X semplova, nista specialno po tom pitanju.

Ali ovo pisanje nesto nije dobro, ne znam sta tacno, mnogo sporo to tako radi.
Na primer kada pokrenem taj program, snimi 125 semplova i zaglavi, sledeci put 132, pa 140 i tako kako mu se cefne, nesto mu je debelo vremenski kriticno ali ne kontam sta i sto je najludje slicno se ponasa na RPi i i7 masini na razlicitim OS, to mi tek nije jasno ...

To parce coda se poziva na svakih 40ms (25fps), recimo da sam potrosio oko 15-ak milisekundi za neko tu potrebno procesiranje, ostalih 25ms bi valjda bilo dovoljno da snimi jedan fajl od 5KB, ako potrosi vise od 25ms e onda moze da bude frka jer ja moram da obradim paket u raspolozivom vremenskom intervalu.
Site about Software Defined Radio – SDR
http://yu3ma.net/
https://github.com/yu3ma
On-line LM317 kalkulator
 
Odgovor na temu

mikikg
System administrator
Srbija

Član broj: 3779
Poruke: 5059
*.dynamic.sbb.rs.

Sajt: yu3ma.net


+505 Profil

icon Re: Zasto glavi fwrite() pri 25 zapisa/fajlova u sekundi?23.09.2020. u 16:07 - pre 43 meseci
Mislim, mogu da trpam sve u RAM, nije to puno podataka za recimo 1000 semplova (1000 * 5kb = 5MB) i da odvojeno posle samo snimim to u fajlove van ove vremenski kriticne funkcije.

Ali mi nije jasno sto ovako ne radi, gde se potrosi to vreme za pisanje ...
Site about Software Defined Radio – SDR
http://yu3ma.net/
https://github.com/yu3ma
On-line LM317 kalkulator
 
Odgovor na temu

Branimir Maksimovic

Član broj: 64947
Poruke: 5534
82.117.201.26



+1064 Profil

icon Re: Zasto glavi fwrite() pri 25 zapisa/fajlova u sekundi?23.09.2020. u 16:43 - pre 43 meseci
Znas kako nemoj odmah fclose , odlozi fclose naknadno. To ne bi trebalo odmah da glavi nego tek na fclose.
 
Odgovor na temu

mikikg
System administrator
Srbija

Član broj: 3779
Poruke: 5059
*.dynamic.sbb.rs.

Sajt: yu3ma.net


+505 Profil

icon Re: Zasto glavi fwrite() pri 25 zapisa/fajlova u sekundi?23.09.2020. u 16:52 - pre 43 meseci
Probao sam bez fclose() (komentarisao celu tu liniju) i isto se ponasa ... :(
Site about Software Defined Radio – SDR
http://yu3ma.net/
https://github.com/yu3ma
On-line LM317 kalkulator
 
Odgovor na temu

Branimir Maksimovic

Član broj: 64947
Poruke: 5534
82.117.201.26



+1064 Profil

icon Re: Zasto glavi fwrite() pri 25 zapisa/fajlova u sekundi?23.09.2020. u 16:54 - pre 43 meseci
Proveri onda da li svaki fopen uvek uspeva, nisam siguran da li fwrite pukne ili nesto drugo kad mu se prosledi null.
 
Odgovor na temu

Doktor Hlad

Član broj: 337261
Poruke: 739



+192 Profil

icon Re: Zasto glavi fwrite() pri 25 zapisa/fajlova u sekundi?23.09.2020. u 17:50 - pre 43 meseci
Jel se ovaj deo koda poziva sekvencijalno ili je multi thread aplikacija?

I na kom delu tacno zaglavi?
 
Odgovor na temu

mikikg
System administrator
Srbija

Član broj: 3779
Poruke: 5059
*.dynamic.sbb.rs.

Sajt: yu3ma.net


+505 Profil

icon Re: Zasto glavi fwrite() pri 25 zapisa/fajlova u sekundi?23.09.2020. u 19:24 - pre 43 meseci
@Doktor Hlad

Ovo parce code se vrdi u main treadu, postoje jos neki treadovi ali oni nisu vezani za ovaj problem, totalno drugo nesto rade.

Probacu da napravim poseban fajl sa simulacijom ovog problema pa mogu da podelim celu skriptu i eventualno ako hoce neko da proba kod sebe ...
Site about Software Defined Radio – SDR
http://yu3ma.net/
https://github.com/yu3ma
On-line LM317 kalkulator
 
Odgovor na temu

mjanjic
Šikagou

Član broj: 187539
Poruke: 2700



+699 Profil

icon Re: Zasto glavi fwrite() pri 25 zapisa/fajlova u sekundi?23.09.2020. u 19:47 - pre 43 meseci
A je l' treba "samlpe_count" ili "sample_count"?
Blessed are those who can laugh at themselves, for they shall never cease to be amused.
 
Odgovor na temu

Branimir Maksimovic

Član broj: 64947
Poruke: 5534
p2-115.p59.bvcom.net.



+1064 Profil

icon Re: Zasto glavi fwrite() pri 25 zapisa/fajlova u sekundi?23.09.2020. u 20:20 - pre 43 meseci
Ja probao upise 1000 fajlova bez problema. Znaci da neki thread zeza...
 
Odgovor na temu

mikikg
System administrator
Srbija

Član broj: 3779
Poruke: 5059
*.dynamic.sbb.rs.

Sajt: yu3ma.net


+505 Profil

icon Re: Zasto glavi fwrite() pri 25 zapisa/fajlova u sekundi?23.09.2020. u 20:21 - pre 43 meseci
Citat:
mjanjic: A je l' treba "samlpe_count" ili "sample_count"?


U pravu si, slovna greska u nazivu ali nije to problem, to je to ime variable koje se samo tu koristi ...


Dobijem ja tacno

sample_001.dat
sample_002.dat
sample_003.dat
...

I unutra tacno sta treba zapisano i ispravne duzine fajlovi, ali tamo oko cirka 5. sekunde kada stigne do 125. sempla mu se "prispava", "ne moze da postingne", ne znam kako da objasnim :) i tu se zakoci, ne pukne samo se zakoci i onda se predje predvidjeno vreme za frejm pa mi stize drugi frejm a ja ovaj jos nisam zavrsio i tad zablesavi.

Kao da neki poseban servis na *nix koji se bavi otvaranjem nodova i fajl-pointera se aktivira pri nekom broju fajlova u sekundi (rate) i ulazi u neki drugi mod ili sta vec, uglavnom to pojede vreme i to me muci ...


Site about Software Defined Radio – SDR
http://yu3ma.net/
https://github.com/yu3ma
On-line LM317 kalkulator
 
Odgovor na temu

Branimir Maksimovic

Član broj: 64947
Poruke: 5534
p2-115.p59.bvcom.net.



+1064 Profil

icon Re: Zasto glavi fwrite() pri 25 zapisa/fajlova u sekundi?23.09.2020. u 20:26 - pre 43 meseci
A da se tebi ne zaglavi to citanje frejmova? Ovaj kod sto si poslao nema nikakvih problema ;)
 
Odgovor na temu

mikikg
System administrator
Srbija

Član broj: 3779
Poruke: 5059
*.dynamic.sbb.rs.

Sajt: yu3ma.net


+505 Profil

icon Re: Zasto glavi fwrite() pri 25 zapisa/fajlova u sekundi?23.09.2020. u 20:39 - pre 43 meseci
Citat:
Branimir Maksimovic: A da se tebi ne zaglavi to citanje frejmova? Ovaj kod sto si poslao nema nikakvih problema ;)


Pa kad izbacim to parce coda za pisanje fajlova sve odlicno radi, veruj mi da sam testirao na 1 milion procesiranih frejmova na RPi i radilo je bez greske, kako sam ovo dodao tako je otislo sve u 3 lepe ...
Site about Software Defined Radio – SDR
http://yu3ma.net/
https://github.com/yu3ma
On-line LM317 kalkulator
 
Odgovor na temu

Branimir Maksimovic

Član broj: 64947
Poruke: 5534
p2-115.p59.bvcom.net.



+1064 Profil

icon Re: Zasto glavi fwrite() pri 25 zapisa/fajlova u sekundi?23.09.2020. u 20:41 - pre 43 meseci
Nije problem u pisanju fajlova sigurno nego u kombinaciji sa ostatkom koda. Mislim da ako taj kod ne radi, onda bi zaista bilo mnogo alarma po svetu :P
 
Odgovor na temu

mikikg
System administrator
Srbija

Član broj: 3779
Poruke: 5059
*.dynamic.sbb.rs.

Sajt: yu3ma.net


+505 Profil

icon Re: Zasto glavi fwrite() pri 25 zapisa/fajlova u sekundi?23.09.2020. u 21:10 - pre 43 meseci
Citat:
Branimir Maksimovic:
Ja probao upise 1000 fajlova bez problema. Znaci da neki thread zeza...


Prevideh ovu poruku ...

Probaj molimte samo da to radis u tacnom ritmu od 40ms, dakle svakih 40ms nov fajl i ako mozes nekako da pratis vreme izvrsavanja tog pisanja, cela je poenta da se ne iskoci iz tog vremenskog okvira jer tada kada se iskoci nastaje problem ...
Site about Software Defined Radio – SDR
http://yu3ma.net/
https://github.com/yu3ma
On-line LM317 kalkulator
 
Odgovor na temu

Branimir Maksimovic

Član broj: 64947
Poruke: 5534
p2-115.p59.bvcom.net.



+1064 Profil

icon Re: Zasto glavi fwrite() pri 25 zapisa/fajlova u sekundi?23.09.2020. u 21:19 - pre 43 meseci
Cuj, kod mene upise 1000 fajlova za 38ms i to bez optimizacije. Totalno je nebitno dal ces da spavas ili ne izmedju pisanja. Tvoj deo za citanje frejmova najverovatnije zaglavi.
 
Odgovor na temu

mikikg
System administrator
Srbija

Član broj: 3779
Poruke: 5059
*.dynamic.sbb.rs.

Sajt: yu3ma.net


+505 Profil

icon Re: Zasto glavi fwrite() pri 25 zapisa/fajlova u sekundi?23.09.2020. u 23:21 - pre 43 meseci
Probao sam ponovo ali nemam taj tamo senzon koji pljuje pakete nego ono malo paketa sto je snimio sam iscitao i to vrtim u krug + snimam u nove fajlove semplove i to kao radi ... e to je situacija :) ... a senzor nemam ovde, on je na 150km drugoj lokaciji na masini niti imam duplikat senzora ... "Bolesni" je u pitanju ... :)

[Ovu poruku je menjao mikikg dana 24.09.2020. u 00:32 GMT+1]
Site about Software Defined Radio – SDR
http://yu3ma.net/
https://github.com/yu3ma
On-line LM317 kalkulator
 
Odgovor na temu

goran_68

Član broj: 89012
Poruke: 932
*.dynamic.isp.telekom.rs.



+81 Profil

icon Re: Zasto glavi fwrite() pri 25 zapisa/fajlova u sekundi?23.09.2020. u 23:39 - pre 43 meseci
Miki, možeš da simuliraš taj senzor nekim tvojim hadrverom. Kako se vezuje na RPi?
gorankg
 
Odgovor na temu

mikikg
System administrator
Srbija

Član broj: 3779
Poruke: 5059
*.dynamic.sbb.rs.

Sajt: yu3ma.net


+505 Profil

icon Re: Zasto glavi fwrite() pri 25 zapisa/fajlova u sekundi?24.09.2020. u 00:19 - pre 43 meseci
Senzor je povezan preko LAN sa TCP soketom, to radi sve lepo i sa tim nemam probleme.

Problem je nastao kada sam bas tamo gde procesiram TCP paket uzeo da petljam sa fajlovima, tu mi bilo zgodno da snimam i posle reprodukujem ponasanje i da mi ostane sve u programu manje vise na svom mestu.

Mozda bi pre zavrsio posao WireShark nego ja da petljam i snimam taj TCP saobracaj koji je uglavnom u jednom smeru i ne kriptovan? :)
Site about Software Defined Radio – SDR
http://yu3ma.net/
https://github.com/yu3ma
On-line LM317 kalkulator
 
Odgovor na temu

[es] :: C/C++ programiranje :: Zasto glavi fwrite() pri 25 zapisa/fajlova u sekundi?

Strane: 1 2 3

[ Pregleda: 3884 | Odgovora: 52 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.