abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
    dnes 01:00 | Nová verze

    ESPHome, tj. open source systém umožňující nastavovat zařízení s čipy ESP (i dalšími) pomocí konfiguračních souborů a připojit je do domácí automatizace, například do Home Assistantu, byl vydán ve verzi 2024.4.0.

    Ladislav Hagara | Komentářů: 0
    včera 22:11 | IT novinky Ladislav Hagara | Komentářů: 0
    včera 20:55 | Nová verze

    Neziskové průmyslové konsorcium Khronos Group vydalo verzi 1.1 specifikace OpenXR (Wikipedie), tj. standardu specifikujícího přístup k platformám a zařízením pro XR, tj. platformám a zařízením pro AR (rozšířenou realitu) a VR (virtuální realitu). Do základu se z rozšíření dostalo XR_EXT_local_floor. Společnost Collabora implementuje novou verzi specifikace do platformy Monado, tj. open source implementace OpenXR.

    Ladislav Hagara | Komentářů: 2
    včera 17:22 | Nová verze

    Byla vydána nová verze 0.38.0 multimediálního přehrávače mpv (Wikipedie) vycházejícího z přehrávačů MPlayer a mplayer2. Přehled novinek, změn a oprav na GitHubu. Požadován je FFmpeg 4.4 nebo novější a také libplacebo 6.338.2 nebo novější.

    Ladislav Hagara | Komentářů: 1
    včera 17:11 | Nová verze

    ClamAV (Wikipedie), tj. multiplatformní antivirový engine s otevřeným zdrojovým kódem pro detekci trojských koní, virů, malwaru a dalších škodlivých hrozeb, byl vydán ve verzích 1.3.1, 1.2.3 a 1.0.6. Ve verzi 1.3.1 je mimo jiné řešena bezpečnostní chyba CVE-2024-20380.

    Ladislav Hagara | Komentářů: 1
    včera 12:11 | IT novinky

    Digitální a informační agentura (DIA) oznámila (PDF, X a Facebook), že mobilní aplikace Portál občana je ode dneška oficiálně venku.

    Ladislav Hagara | Komentářů: 7
    včera 05:11 | Komunita

    #HACKUJBRNO 2024, byly zveřejněny výsledky a výstupy hackathonu města Brna nad otevřenými městskými daty, který se konal 13. a 14. dubna 2024.

    Ladislav Hagara | Komentářů: 2
    17.4. 17:55 | IT novinky

    Společnost Volla Systeme stojící za telefony Volla spustila na Kickstarteru kampaň na podporu tabletu Volla Tablet s Volla OS nebo Ubuntu Touch.

    Ladislav Hagara | Komentářů: 3
    17.4. 17:44 | IT novinky

    Společnost Boston Dynamics oznámila, že humanoidní hydraulický robot HD Atlas šel do důchodu (YouTube). Nastupuje nová vylepšená elektrická varianta (YouTube).

    Ladislav Hagara | Komentářů: 1
    17.4. 15:11 | Nová verze

    Desktopové prostředí LXQt (Lightweight Qt Desktop Environment, Wikipedie) vzniklé sloučením projektů Razor-qt a LXDE bylo vydáno ve verzi 2.0.0. Přehled novinek v poznámkách k vydání.

    Ladislav Hagara | Komentářů: 5
    KDE Plasma 6
     (68%)
     (10%)
     (2%)
     (19%)
    Celkem 556 hlasů
     Komentářů: 4, poslední 6.4. 15:51
    Rozcestník

    Dotaz: C, multithread libcurl s openssl a paměťová náročnost

    6.4.2022 14:33 MilanC | skóre: 16
    C, multithread libcurl s openssl a paměťová náročnost
    Přečteno: 916×
    Ahoj,

    nějak si nevím rady. Píši komunikančí aplikaci, která má za cíl synchronizovat nastavení embedded zařízení.

    Má aplikace využívá sdílených knihoven:
    ./msdk-linux-objdump -x ../../../romfs/bin/sthelper | grep NEEDED
      NEEDED               libapmib.so
      NEEDED               libcurl.so.4
      NEEDED               libm.so.0
      NEEDED               libjson-c.so.5
      NEEDED               libpthread.so.0
      NEEDED               libcrypto.so.1.0.0
      NEEDED               libc.so.0
    
    Všechny tyto sdílené knihovny mají dohromady velikost asi 2,5 MB. V aplikaci využívám vlákna, některá jsou pevně daná, jiná se alokují dynamicky. Každé vlákno nějakým způsobem komunikuje po internetu, většinu času ale spí. Typicky je vláken třeba 6-10. V každém vlákně vytvářím vlastní CURL handle, je to dle příkladu: https://curl.se/libcurl/c/threaded-ssl.html. Používám také zámky pro openssl (crypto.h), které jsem tam popsány.

    Nikde příliš nemohu najít, jestli by se nedal CURL handle sdílet mezi vlákny, třeba s pomocí curl_easy_setopt(curl, CURLOPT_SHARE, ...). Většinou píšou, že můj postup je správný a každý thread si vytváří a spravuje vlastní CURL handle přes curl_easy_init/curl_easy_cleanup.

    Můj problém je v tom, že spuštěná aplikace třeba s 8 vlákny si vezme cca 20MB RAM.

    Pokusy jsem dospěl k poznání, že to je asi závislé jen na počtu otevřených CURL handlů. Je to Embedded zařízení a takové nároky jsou problém. Navíc počet vláken se může v čase zvyšovat (dle informací získaných přes API). Načež mi zbývají třeba 3MB free RAM. Dostat do toho embedded linuxu valgrind a memcheck se mi sice podařilo, ale použít mi nejde, kvůli nedostatku RAM. Následující výpisy možná napoví, pokud je tu někdo, kdo se v tom vyzná...
    / # cat /proc/4870/status
    Name:   sthelper
    State:  S (sleeping)
    Tgid:   4870
    Pid:    4870
    PPid:   1
    TracerPid:      0
    Uid:    0       0       0       0
    Gid:    0       0       0       0
    FDSize: 32
    Groups:
    VmPeak:    24848 kB
    VmSize:    20944 kB
    VmLck:         0 kB
    VmPin:         0 kB
    VmHWM:      5536 kB
    VmRSS:      5520 kB
    VmData:    17248 kB
    VmStk:       160 kB
    VmExe:        48 kB
    VmLib:      3040 kB
    VmPTE:        48 kB
    VmSwap:        0 kB
    Threads:        8
    SigQ:   0/160
    SigPnd: 00000000000000000000000000000000
    ShdPnd: 00000000000000000000000000000000
    SigBlk: 00000000000000000000000000000000
    SigIgn: 00000000000000000000000000001004
    SigCgt: 00000000000000000000000180000002
    CapInh: 0000000000000000
    CapPrm: 0000001fffffffff
    CapEff: 0000001fffffffff
    CapBnd: 0000001fffffffff
    Cpus_allowed:   1
    Cpus_allowed_list:      0
    voluntary_ctxt_switches:        1041
    nonvoluntary_ctxt_switches:     24
    
    Zde je vidět, že nejvíce zabírá VmData. (size of data, stack, and text segments) Tedy předpokládám, že jsou to proměnné, nejspíš ty mé CURL handles. Když nějaká vlákna vykomentuji, náročnost na paměť jde docela dost dolů (cca 3-4MB na vlákno).
    / # cat /proc/4870/maps
    00400000-0040c000 r-xp 00000000 1f:01 76         /bin/sthelper
    00418000-0041c000 rw-p 00008000 1f:01 76         /bin/sthelper
    0041c000-0066c000 rwxp 00000000 00:00 0          [heap]
    75fa0000-75fa4000 ---p 00000000 00:00 0
    75fa4000-761a0000 rw-p 00000000 00:00 0          [stack:4892]
    761a0000-761a4000 ---p 00000000 00:00 0
    761a4000-763a0000 rw-p 00000000 00:00 0          [stack:4891]
    763a0000-763a4000 ---p 00000000 00:00 0
    763a4000-765a0000 rw-p 00000000 00:00 0          [stack:4890]
    765a0000-765a4000 ---p 00000000 00:00 0
    765a4000-767a0000 rw-p 00000000 00:00 0          [stack:4889]
    767a0000-767a4000 ---p 00000000 00:00 0
    767a4000-769a0000 rw-p 00000000 00:00 0          [stack:4888]
    769a0000-769a4000 ---p 00000000 00:00 0
    769a4000-76ba0000 rw-p 00000000 00:00 0          [stack:4885]
    76ba0000-76ba4000 ---p 00000000 00:00 0
    76ba4000-76da0000 rw-p 00000000 00:00 0          [stack:4879]
    76da0000-76dac000 rw-s 00000000 00:04 98307      /SYSV3e0a0239 (deleted)
    76dac000-76db8000 rw-s 00000000 00:04 65538      /SYSV3d0a0239 (deleted)
    76db8000-76dbc000 r-xp 00000000 1f:01 344        /lib/libdl-0.9.33.so
    76dbc000-76dc8000 ---p 00000000 00:00 0
    76dc8000-76dcc000 rw-p 00000000 1f:01 344        /lib/libdl-0.9.33.so
    76dcc000-76e24000 r-xp 00000000 1f:01 375        /lib/libssl.so.1.0.0
    76e24000-76e30000 ---p 00000000 00:00 0
    76e30000-76e38000 rw-p 00054000 1f:01 375        /lib/libssl.so.1.0.0
    76e38000-76e88000 r-xp 00000000 1f:01 369        /lib/libuClibc-0.9.33.so
    76e88000-76e94000 ---p 00000000 00:00 0
    76e94000-76e98000 rw-p 0004c000 1f:01 369        /lib/libuClibc-0.9.33.so
    76e98000-76e9c000 rw-p 00000000 00:00 0
    76e9c000-77014000 r-xp 00000000 1f:01 358        /lib/libcrypto.so.1.0.0
    77014000-77020000 ---p 00000000 00:00 0
    77020000-77038000 rw-p 00174000 1f:01 358        /lib/libcrypto.so.1.0.0
    77038000-7703c000 rw-p 00000000 00:00 0
    7703c000-77050000 r-xp 00000000 1f:01 361        /lib/libpthread-0.9.33.so
    77050000-7705c000 ---p 00000000 00:00 0
    7705c000-77060000 rw-p 00010000 1f:01 361        /lib/libpthread-0.9.33.so
    77060000-77064000 rw-p 00000000 00:00 0
    77064000-77080000 r-xp 00000000 1f:01 347        /lib/libjson-c.so.5.1.0
    77080000-7708c000 ---p 00000000 00:00 0
    7708c000-77090000 rw-p 00018000 1f:01 347        /lib/libjson-c.so.5.1.0
    77090000-770a8000 r-xp 00000000 1f:01 368        /lib/libm-0.9.33.so
    770a8000-770b4000 ---p 00000000 00:00 0
    770b4000-770b8000 rw-p 00014000 1f:01 368        /lib/libm-0.9.33.so
    770b8000-77130000 r-xp 00000000 1f:01 355        /lib/libcurl.so.4.7.0
    77130000-77140000 ---p 00000000 00:00 0
    77140000-77144000 rw-p 00078000 1f:01 355        /lib/libcurl.so.4.7.0
    77144000-77150000 r-xp 00000000 1f:01 353        /lib/libapmib.so
    77150000-7715c000 ---p 00000000 00:00 0
    7715c000-7716c000 rw-p 00008000 1f:01 353        /lib/libapmib.so
    7716c000-77170000 rw-p 00000000 00:00 0
    77170000-77178000 r-xp 00000000 1f:01 348        /lib/ld-uClibc-0.9.33.so
    77178000-7717c000 rw-s 00000000 00:04 32769      /SYSV410a0239 (deleted)
    7717c000-77180000 rw-s 00000000 00:04 0          /SYSV3c0a0239 (deleted)
    77180000-77184000 rw-p 00000000 00:00 0
    77184000-77188000 rw-p 00004000 1f:01 348        /lib/ld-uClibc-0.9.33.so
    7ff40000-7ff64000 rwxp 00000000 00:00 0          [stack]
    7fff4000-7fff8000 r-xp 00000000 00:00 0          [vdso]
    
    / # cat /proc/4870/statm
    1309 345 172 3 0 1088 0
    
    / # cat /proc/4870/smaps
    00400000-0040c000 r-xp 00000000 1f:01 76         /bin/sthelper
    Size:                 48 kB
    Rss:                  48 kB
    Pss:                  48 kB
    Shared_Clean:          0 kB
    Shared_Dirty:          0 kB
    Private_Clean:        48 kB
    Private_Dirty:         0 kB
    Referenced:           48 kB
    Anonymous:             0 kB
    AnonHugePages:         0 kB
    Swap:                  0 kB
    KernelPageSize:       16 kB
    MMUPageSize:          16 kB
    Locked:                0 kB
    VmFlags: rd ex mr mw me dw
    00418000-0041c000 rw-p 00008000 1f:01 76         /bin/sthelper
    Size:                 16 kB
    Rss:                  16 kB
    Pss:                  16 kB
    Shared_Clean:          0 kB
    Shared_Dirty:          0 kB
    Private_Clean:         0 kB
    Private_Dirty:        16 kB
    Referenced:           16 kB
    Anonymous:            16 kB
    AnonHugePages:         0 kB
    Swap:                  0 kB
    KernelPageSize:       16 kB
    MMUPageSize:          16 kB
    Locked:                0 kB
    VmFlags: rd wr mr mw me dw ac
    0041c000-0066c000 rwxp 00000000 00:00 0          [heap]
    Size:               2368 kB
    Rss:                2272 kB
    Pss:                2272 kB
    Shared_Clean:          0 kB
    Shared_Dirty:          0 kB
    Private_Clean:         0 kB
    Private_Dirty:      2272 kB
    Referenced:         2272 kB
    Anonymous:          2272 kB
    AnonHugePages:         0 kB
    Swap:                  0 kB
    KernelPageSize:       16 kB
    MMUPageSize:          16 kB
    Locked:                0 kB
    VmFlags: rd wr ex mr mw me ac
    75fa0000-75fa4000 ---p 00000000 00:00 0
    Size:                 16 kB
    Rss:                   0 kB
    Pss:                   0 kB
    Shared_Clean:          0 kB
    Shared_Dirty:          0 kB
    Private_Clean:         0 kB
    Private_Dirty:         0 kB
    Referenced:            0 kB
    Anonymous:             0 kB
    AnonHugePages:         0 kB
    Swap:                  0 kB
    KernelPageSize:       16 kB
    MMUPageSize:          16 kB
    Locked:                0 kB
    VmFlags: mr mw me ac
    75fa4000-761a0000 rw-p 00000000 00:00 0          [stack:4892]
    Size:               2032 kB
    Rss:                  16 kB
    Pss:                  16 kB
    Shared_Clean:          0 kB
    Shared_Dirty:          0 kB
    Private_Clean:         0 kB
    Private_Dirty:        16 kB
    Referenced:           16 kB
    Anonymous:            16 kB
    AnonHugePages:         0 kB
    Swap:                  0 kB
    KernelPageSize:       16 kB
    MMUPageSize:          16 kB
    Locked:                0 kB
    VmFlags: rd wr mr mw me ac
    761a0000-761a4000 ---p 00000000 00:00 0
    Size:                 16 kB
    Rss:                   0 kB
    Pss:                   0 kB
    Shared_Clean:          0 kB
    Shared_Dirty:          0 kB
    Private_Clean:         0 kB
    Private_Dirty:         0 kB
    Referenced:            0 kB
    Anonymous:             0 kB
    AnonHugePages:         0 kB
    Swap:                  0 kB
    KernelPageSize:       16 kB
    MMUPageSize:          16 kB
    Locked:                0 kB
    VmFlags: mr mw me ac
    761a4000-763a0000 rw-p 00000000 00:00 0          [stack:4891]
    Size:               2032 kB
    Rss:                  16 kB
    Pss:                  16 kB
    Shared_Clean:          0 kB
    Shared_Dirty:          0 kB
    Private_Clean:         0 kB
    Private_Dirty:        16 kB
    Referenced:           16 kB
    Anonymous:            16 kB
    AnonHugePages:         0 kB
    Swap:                  0 kB
    KernelPageSize:       16 kB
    MMUPageSize:          16 kB
    Locked:                0 kB
    VmFlags: rd wr mr mw me ac
    763a0000-763a4000 ---p 00000000 00:00 0
    Size:                 16 kB
    Rss:                   0 kB
    Pss:                   0 kB
    Shared_Clean:          0 kB
    Shared_Dirty:          0 kB
    Private_Clean:         0 kB
    Private_Dirty:         0 kB
    Referenced:            0 kB
    Anonymous:             0 kB
    AnonHugePages:         0 kB
    Swap:                  0 kB
    KernelPageSize:       16 kB
    MMUPageSize:          16 kB
    Locked:                0 kB
    VmFlags: mr mw me ac
    763a4000-765a0000 rw-p 00000000 00:00 0          [stack:4890]
    Size:               2032 kB
    Rss:                  16 kB
    Pss:                  16 kB
    Shared_Clean:          0 kB
    Shared_Dirty:          0 kB
    Private_Clean:         0 kB
    Private_Dirty:        16 kB
    Referenced:           16 kB
    Anonymous:            16 kB
    AnonHugePages:         0 kB
    Swap:                  0 kB
    KernelPageSize:       16 kB
    MMUPageSize:          16 kB
    Locked:                0 kB
    VmFlags: rd wr mr mw me ac
    765a0000-765a4000 ---p 00000000 00:00 0
    Size:                 16 kB
    Rss:                   0 kB
    Pss:                   0 kB
    Shared_Clean:          0 kB
    Shared_Dirty:          0 kB
    Private_Clean:         0 kB
    Private_Dirty:         0 kB
    Referenced:            0 kB
    Anonymous:             0 kB
    AnonHugePages:         0 kB
    Swap:                  0 kB
    KernelPageSize:       16 kB
    MMUPageSize:          16 kB
    Locked:                0 kB
    VmFlags: mr mw me ac
    765a4000-767a0000 rw-p 00000000 00:00 0          [stack:4889]
    Size:               2032 kB
    Rss:                  16 kB
    Pss:                  16 kB
    Shared_Clean:          0 kB
    Shared_Dirty:          0 kB
    Private_Clean:         0 kB
    Private_Dirty:        16 kB
    Referenced:           16 kB
    Anonymous:            16 kB
    AnonHugePages:         0 kB
    Swap:                  0 kB
    KernelPageSize:       16 kB
    MMUPageSize:          16 kB
    Locked:                0 kB
    VmFlags: rd wr mr mw me ac
    767a0000-767a4000 ---p 00000000 00:00 0
    Size:                 16 kB
    Rss:                   0 kB
    Pss:                   0 kB
    Shared_Clean:          0 kB
    Shared_Dirty:          0 kB
    Private_Clean:         0 kB
    Private_Dirty:         0 kB
    Referenced:            0 kB
    Anonymous:             0 kB
    AnonHugePages:         0 kB
    Swap:                  0 kB
    KernelPageSize:       16 kB
    MMUPageSize:          16 kB
    Locked:                0 kB
    VmFlags: mr mw me ac
    767a4000-769a0000 rw-p 00000000 00:00 0          [stack:4888]
    Size:               2032 kB
    Rss:                  16 kB
    Pss:                  16 kB
    Shared_Clean:          0 kB
    Shared_Dirty:          0 kB
    Private_Clean:         0 kB
    Private_Dirty:        16 kB
    Referenced:           16 kB
    Anonymous:            16 kB
    AnonHugePages:         0 kB
    Swap:                  0 kB
    KernelPageSize:       16 kB
    MMUPageSize:          16 kB
    Locked:                0 kB
    VmFlags: rd wr mr mw me ac
    769a0000-769a4000 ---p 00000000 00:00 0
    Size:                 16 kB
    Rss:                   0 kB
    Pss:                   0 kB
    Shared_Clean:          0 kB
    Shared_Dirty:          0 kB
    Private_Clean:         0 kB
    Private_Dirty:         0 kB
    Referenced:            0 kB
    Anonymous:             0 kB
    AnonHugePages:         0 kB
    Swap:                  0 kB
    KernelPageSize:       16 kB
    MMUPageSize:          16 kB
    Locked:                0 kB
    VmFlags: mr mw me ac
    769a4000-76ba0000 rw-p 00000000 00:00 0          [stack:4885]
    Size:               2032 kB
    Rss:                  16 kB
    Pss:                  16 kB
    Shared_Clean:          0 kB
    Shared_Dirty:          0 kB
    Private_Clean:         0 kB
    Private_Dirty:        16 kB
    Referenced:           16 kB
    Anonymous:            16 kB
    AnonHugePages:         0 kB
    Swap:                  0 kB
    KernelPageSize:       16 kB
    MMUPageSize:          16 kB
    Locked:                0 kB
    VmFlags: rd wr mr mw me ac
    76ba0000-76ba4000 ---p 00000000 00:00 0
    Size:                 16 kB
    Rss:                   0 kB
    Pss:                   0 kB
    Shared_Clean:          0 kB
    Shared_Dirty:          0 kB
    Private_Clean:         0 kB
    Private_Dirty:         0 kB
    Referenced:            0 kB
    Anonymous:             0 kB
    AnonHugePages:         0 kB
    Swap:                  0 kB
    KernelPageSize:       16 kB
    MMUPageSize:          16 kB
    Locked:                0 kB
    VmFlags: mr mw me ac
    76ba4000-76da0000 rw-p 00000000 00:00 0          [stack:4879]
    Size:               2032 kB
    Rss:                  16 kB
    Pss:                  16 kB
    Shared_Clean:          0 kB
    Shared_Dirty:          0 kB
    Private_Clean:         0 kB
    Private_Dirty:        16 kB
    Referenced:           16 kB
    Anonymous:            16 kB
    AnonHugePages:         0 kB
    Swap:                  0 kB
    KernelPageSize:       16 kB
    MMUPageSize:          16 kB
    Locked:                0 kB
    VmFlags: rd wr mr mw me ac
    76da0000-76dac000 rw-s 00000000 00:04 98307      /SYSV3e0a0239 (deleted)
    Size:                 48 kB
    Rss:                  16 kB
    Pss:                   8 kB
    Shared_Clean:          0 kB
    Shared_Dirty:         16 kB
    Private_Clean:         0 kB
    Private_Dirty:         0 kB
    Referenced:           16 kB
    Anonymous:             0 kB
    AnonHugePages:         0 kB
    Swap:                  0 kB
    KernelPageSize:       16 kB
    MMUPageSize:          16 kB
    Locked:                0 kB
    VmFlags: rd wr sh mr mw me ms
    76dac000-76db8000 rw-s 00000000 00:04 65538      /SYSV3d0a0239 (deleted)
    Size:                 48 kB
    Rss:                   0 kB
    Pss:                   0 kB
    Shared_Clean:          0 kB
    Shared_Dirty:          0 kB
    Private_Clean:         0 kB
    Private_Dirty:         0 kB
    Referenced:            0 kB
    Anonymous:             0 kB
    AnonHugePages:         0 kB
    Swap:                  0 kB
    KernelPageSize:       16 kB
    MMUPageSize:          16 kB
    Locked:                0 kB
    VmFlags: rd wr sh mr mw me ms
    76db8000-76dbc000 r-xp 00000000 1f:01 344        /lib/libdl-0.9.33.so
    Size:                 16 kB
    Rss:                  16 kB
    Pss:                  16 kB
    Shared_Clean:          0 kB
    Shared_Dirty:          0 kB
    Private_Clean:        16 kB
    Private_Dirty:         0 kB
    Referenced:           16 kB
    Anonymous:             0 kB
    AnonHugePages:         0 kB
    Swap:                  0 kB
    KernelPageSize:       16 kB
    MMUPageSize:          16 kB
    Locked:                0 kB
    VmFlags: rd ex mr mw me
    76dbc000-76dc8000 ---p 00000000 00:00 0
    Size:                 48 kB
    Rss:                   0 kB
    Pss:                   0 kB
    Shared_Clean:          0 kB
    Shared_Dirty:          0 kB
    Private_Clean:         0 kB
    Private_Dirty:         0 kB
    Referenced:            0 kB
    Anonymous:             0 kB
    AnonHugePages:         0 kB
    Swap:                  0 kB
    KernelPageSize:       16 kB
    MMUPageSize:          16 kB
    Locked:                0 kB
    VmFlags: mr mw me
    76dc8000-76dcc000 rw-p 00000000 1f:01 344        /lib/libdl-0.9.33.so
    Size:                 16 kB
    Rss:                  16 kB
    Pss:                  16 kB
    Shared_Clean:          0 kB
    Shared_Dirty:          0 kB
    Private_Clean:         0 kB
    Private_Dirty:        16 kB
    Referenced:           16 kB
    Anonymous:            16 kB
    AnonHugePages:         0 kB
    Swap:                  0 kB
    KernelPageSize:       16 kB
    MMUPageSize:          16 kB
    Locked:                0 kB
    VmFlags: rd wr mr mw me ac
    76dcc000-76e24000 r-xp 00000000 1f:01 375        /lib/libssl.so.1.0.0
    Size:                352 kB
    Rss:                 304 kB
    Pss:                 304 kB
    Shared_Clean:          0 kB
    Shared_Dirty:          0 kB
    Private_Clean:       304 kB
    Private_Dirty:         0 kB
    Referenced:          304 kB
    Anonymous:             0 kB
    AnonHugePages:         0 kB
    Swap:                  0 kB
    KernelPageSize:       16 kB
    MMUPageSize:          16 kB
    Locked:                0 kB
    VmFlags: rd ex mr mw me
    76e24000-76e30000 ---p 00000000 00:00 0
    Size:                 48 kB
    Rss:                   0 kB
    Pss:                   0 kB
    Shared_Clean:          0 kB
    Shared_Dirty:          0 kB
    Private_Clean:         0 kB
    Private_Dirty:         0 kB
    Referenced:            0 kB
    Anonymous:             0 kB
    AnonHugePages:         0 kB
    Swap:                  0 kB
    KernelPageSize:       16 kB
    MMUPageSize:          16 kB
    Locked:                0 kB
    VmFlags: mr mw me
    76e30000-76e38000 rw-p 00054000 1f:01 375        /lib/libssl.so.1.0.0
    Size:                 32 kB
    Rss:                  32 kB
    Pss:                  32 kB
    Shared_Clean:          0 kB
    Shared_Dirty:          0 kB
    Private_Clean:         0 kB
    Private_Dirty:        32 kB
    Referenced:           32 kB
    Anonymous:            32 kB
    AnonHugePages:         0 kB
    Swap:                  0 kB
    KernelPageSize:       16 kB
    MMUPageSize:          16 kB
    Locked:                0 kB
    VmFlags: rd wr mr mw me ac
    76e38000-76e88000 r-xp 00000000 1f:01 369        /lib/libuClibc-0.9.33.so
    Size:                320 kB
    Rss:                 304 kB
    Pss:                  22 kB
    Shared_Clean:        304 kB
    Shared_Dirty:          0 kB
    Private_Clean:         0 kB
    Private_Dirty:         0 kB
    Referenced:          304 kB
    Anonymous:             0 kB
    AnonHugePages:         0 kB
    Swap:                  0 kB
    KernelPageSize:       16 kB
    MMUPageSize:          16 kB
    Locked:                0 kB
    VmFlags: rd ex mr mw me
    76e88000-76e94000 ---p 00000000 00:00 0
    Size:                 48 kB
    Rss:                   0 kB
    Pss:                   0 kB
    Shared_Clean:          0 kB
    Shared_Dirty:          0 kB
    Private_Clean:         0 kB
    Private_Dirty:         0 kB
    Referenced:            0 kB
    Anonymous:             0 kB
    AnonHugePages:         0 kB
    Swap:                  0 kB
    KernelPageSize:       16 kB
    MMUPageSize:          16 kB
    Locked:                0 kB
    VmFlags: mr mw me
    76e94000-76e98000 rw-p 0004c000 1f:01 369        /lib/libuClibc-0.9.33.so
    Size:                 16 kB
    Rss:                  16 kB
    Pss:                  16 kB
    Shared_Clean:          0 kB
    Shared_Dirty:          0 kB
    Private_Clean:         0 kB
    Private_Dirty:        16 kB
    Referenced:           16 kB
    Anonymous:            16 kB
    AnonHugePages:         0 kB
    Swap:                  0 kB
    KernelPageSize:       16 kB
    MMUPageSize:          16 kB
    Locked:                0 kB
    VmFlags: rd wr mr mw me ac
    76e98000-76e9c000 rw-p 00000000 00:00 0
    Size:                 16 kB
    Rss:                  16 kB
    Pss:                  16 kB
    Shared_Clean:          0 kB
    Shared_Dirty:          0 kB
    Private_Clean:         0 kB
    Private_Dirty:        16 kB
    Referenced:           16 kB
    Anonymous:            16 kB
    AnonHugePages:         0 kB
    Swap:                  0 kB
    KernelPageSize:       16 kB
    MMUPageSize:          16 kB
    Locked:                0 kB
    VmFlags: rd wr mr mw me ac
    76e9c000-77014000 r-xp 00000000 1f:01 358        /lib/libcrypto.so.1.0.0
    Size:               1504 kB
    Rss:                1280 kB
    Pss:                1280 kB
    Shared_Clean:          0 kB
    Shared_Dirty:          0 kB
    Private_Clean:      1280 kB
    Private_Dirty:         0 kB
    Referenced:         1280 kB
    Anonymous:             0 kB
    AnonHugePages:         0 kB
    Swap:                  0 kB
    KernelPageSize:       16 kB
    MMUPageSize:          16 kB
    Locked:                0 kB
    VmFlags: rd ex mr mw me
    77014000-77020000 ---p 00000000 00:00 0
    Size:                 48 kB
    Rss:                   0 kB
    Pss:                   0 kB
    Shared_Clean:          0 kB
    Shared_Dirty:          0 kB
    Private_Clean:         0 kB
    Private_Dirty:         0 kB
    Referenced:            0 kB
    Anonymous:             0 kB
    AnonHugePages:         0 kB
    Swap:                  0 kB
    KernelPageSize:       16 kB
    MMUPageSize:          16 kB
    Locked:                0 kB
    VmFlags: mr mw me
    77020000-77038000 rw-p 00174000 1f:01 358        /lib/libcrypto.so.1.0.0
    Size:                 96 kB
    Rss:                  96 kB
    Pss:                  96 kB
    Shared_Clean:          0 kB
    Shared_Dirty:          0 kB
    Private_Clean:         0 kB
    Private_Dirty:        96 kB
    Referenced:           96 kB
    Anonymous:            96 kB
    AnonHugePages:         0 kB
    Swap:                  0 kB
    KernelPageSize:       16 kB
    MMUPageSize:          16 kB
    Locked:                0 kB
    VmFlags: rd wr mr mw me ac
    77038000-7703c000 rw-p 00000000 00:00 0
    Size:                 16 kB
    Rss:                  16 kB
    Pss:                  16 kB
    Shared_Clean:          0 kB
    Shared_Dirty:          0 kB
    Private_Clean:         0 kB
    Private_Dirty:        16 kB
    Referenced:           16 kB
    Anonymous:            16 kB
    AnonHugePages:         0 kB
    Swap:                  0 kB
    KernelPageSize:       16 kB
    MMUPageSize:          16 kB
    Locked:                0 kB
    VmFlags: rd wr mr mw me ac
    7703c000-77050000 r-xp 00000000 1f:01 361        /lib/libpthread-0.9.33.so
    Size:                 80 kB
    Rss:                  80 kB
    Pss:                  80 kB
    Shared_Clean:          0 kB
    Shared_Dirty:          0 kB
    Private_Clean:        80 kB
    Private_Dirty:         0 kB
    Referenced:           80 kB
    Anonymous:             0 kB
    AnonHugePages:         0 kB
    Swap:                  0 kB
    KernelPageSize:       16 kB
    MMUPageSize:          16 kB
    Locked:                0 kB
    VmFlags: rd ex mr mw me
    77050000-7705c000 ---p 00000000 00:00 0
    Size:                 48 kB
    Rss:                   0 kB
    Pss:                   0 kB
    Shared_Clean:          0 kB
    Shared_Dirty:          0 kB
    Private_Clean:         0 kB
    Private_Dirty:         0 kB
    Referenced:            0 kB
    Anonymous:             0 kB
    AnonHugePages:         0 kB
    Swap:                  0 kB
    KernelPageSize:       16 kB
    MMUPageSize:          16 kB
    Locked:                0 kB
    VmFlags: mr mw me
    7705c000-77060000 rw-p 00010000 1f:01 361        /lib/libpthread-0.9.33.so
    Size:                 16 kB
    Rss:                  16 kB
    Pss:                  16 kB
    Shared_Clean:          0 kB
    Shared_Dirty:          0 kB
    Private_Clean:         0 kB
    Private_Dirty:        16 kB
    Referenced:           16 kB
    Anonymous:            16 kB
    AnonHugePages:         0 kB
    Swap:                  0 kB
    KernelPageSize:       16 kB
    MMUPageSize:          16 kB
    Locked:                0 kB
    VmFlags: rd wr mr mw me ac
    77060000-77064000 rw-p 00000000 00:00 0
    Size:                 16 kB
    Rss:                   0 kB
    Pss:                   0 kB
    Shared_Clean:          0 kB
    Shared_Dirty:          0 kB
    Private_Clean:         0 kB
    Private_Dirty:         0 kB
    Referenced:            0 kB
    Anonymous:             0 kB
    AnonHugePages:         0 kB
    Swap:                  0 kB
    KernelPageSize:       16 kB
    MMUPageSize:          16 kB
    Locked:                0 kB
    VmFlags: rd wr mr mw me ac
    77064000-77080000 r-xp 00000000 1f:01 347        /lib/libjson-c.so.5.1.0
    Size:                112 kB
    Rss:                 112 kB
    Pss:                 112 kB
    Shared_Clean:          0 kB
    Shared_Dirty:          0 kB
    Private_Clean:       112 kB
    Private_Dirty:         0 kB
    Referenced:          112 kB
    Anonymous:             0 kB
    AnonHugePages:         0 kB
    Swap:                  0 kB
    KernelPageSize:       16 kB
    MMUPageSize:          16 kB
    Locked:                0 kB
    VmFlags: rd ex mr mw me
    77080000-7708c000 ---p 00000000 00:00 0
    Size:                 48 kB
    Rss:                   0 kB
    Pss:                   0 kB
    Shared_Clean:          0 kB
    Shared_Dirty:          0 kB
    Private_Clean:         0 kB
    Private_Dirty:         0 kB
    Referenced:            0 kB
    Anonymous:             0 kB
    AnonHugePages:         0 kB
    Swap:                  0 kB
    KernelPageSize:       16 kB
    MMUPageSize:          16 kB
    Locked:                0 kB
    VmFlags: mr mw me
    7708c000-77090000 rw-p 00018000 1f:01 347        /lib/libjson-c.so.5.1.0
    Size:                 16 kB
    Rss:                  16 kB
    Pss:                  16 kB
    Shared_Clean:          0 kB
    Shared_Dirty:          0 kB
    Private_Clean:         0 kB
    Private_Dirty:        16 kB
    Referenced:           16 kB
    Anonymous:            16 kB
    AnonHugePages:         0 kB
    Swap:                  0 kB
    KernelPageSize:       16 kB
    MMUPageSize:          16 kB
    Locked:                0 kB
    VmFlags: rd wr mr mw me ac
    77090000-770a8000 r-xp 00000000 1f:01 368        /lib/libm-0.9.33.so
    Size:                 96 kB
    Rss:                  16 kB
    Pss:                   4 kB
    Shared_Clean:         16 kB
    Shared_Dirty:          0 kB
    Private_Clean:         0 kB
    Private_Dirty:         0 kB
    Referenced:           16 kB
    Anonymous:             0 kB
    AnonHugePages:         0 kB
    Swap:                  0 kB
    KernelPageSize:       16 kB
    MMUPageSize:          16 kB
    Locked:                0 kB
    VmFlags: rd ex mr mw me
    770a8000-770b4000 ---p 00000000 00:00 0
    Size:                 48 kB
    Rss:                   0 kB
    Pss:                   0 kB
    Shared_Clean:          0 kB
    Shared_Dirty:          0 kB
    Private_Clean:         0 kB
    Private_Dirty:         0 kB
    Referenced:            0 kB
    Anonymous:             0 kB
    AnonHugePages:         0 kB
    Swap:                  0 kB
    KernelPageSize:       16 kB
    MMUPageSize:          16 kB
    Locked:                0 kB
    VmFlags: mr mw me
    770b4000-770b8000 rw-p 00014000 1f:01 368        /lib/libm-0.9.33.so
    Size:                 16 kB
    Rss:                  16 kB
    Pss:                  16 kB
    Shared_Clean:          0 kB
    Shared_Dirty:          0 kB
    Private_Clean:         0 kB
    Private_Dirty:        16 kB
    Referenced:           16 kB
    Anonymous:            16 kB
    AnonHugePages:         0 kB
    Swap:                  0 kB
    KernelPageSize:       16 kB
    MMUPageSize:          16 kB
    Locked:                0 kB
    VmFlags: rd wr mr mw me ac
    770b8000-77130000 r-xp 00000000 1f:01 355        /lib/libcurl.so.4.7.0
    Size:                480 kB
    Rss:                 464 kB
    Pss:                 464 kB
    Shared_Clean:          0 kB
    Shared_Dirty:          0 kB
    Private_Clean:       464 kB
    Private_Dirty:         0 kB
    Referenced:          464 kB
    Anonymous:             0 kB
    AnonHugePages:         0 kB
    Swap:                  0 kB
    KernelPageSize:       16 kB
    MMUPageSize:          16 kB
    Locked:                0 kB
    VmFlags: rd ex mr mw me
    77130000-77140000 ---p 00000000 00:00 0
    Size:                 64 kB
    Rss:                   0 kB
    Pss:                   0 kB
    Shared_Clean:          0 kB
    Shared_Dirty:          0 kB
    Private_Clean:         0 kB
    Private_Dirty:         0 kB
    Referenced:            0 kB
    Anonymous:             0 kB
    AnonHugePages:         0 kB
    Swap:                  0 kB
    KernelPageSize:       16 kB
    MMUPageSize:          16 kB
    Locked:                0 kB
    VmFlags: mr mw me
    77140000-77144000 rw-p 00078000 1f:01 355        /lib/libcurl.so.4.7.0
    Size:                 16 kB
    Rss:                  16 kB
    Pss:                  16 kB
    Shared_Clean:          0 kB
    Shared_Dirty:          0 kB
    Private_Clean:         0 kB
    Private_Dirty:        16 kB
    Referenced:           16 kB
    Anonymous:            16 kB
    AnonHugePages:         0 kB
    Swap:                  0 kB
    KernelPageSize:       16 kB
    MMUPageSize:          16 kB
    Locked:                0 kB
    VmFlags: rd wr mr mw me ac
    77144000-77150000 r-xp 00000000 1f:01 353        /lib/libapmib.so
    Size:                 48 kB
    Rss:                  48 kB
    Pss:                  15 kB
    Shared_Clean:         48 kB
    Shared_Dirty:          0 kB
    Private_Clean:         0 kB
    Private_Dirty:         0 kB
    Referenced:           48 kB
    Anonymous:             0 kB
    AnonHugePages:         0 kB
    Swap:                  0 kB
    KernelPageSize:       16 kB
    MMUPageSize:          16 kB
    Locked:                0 kB
    VmFlags: rd ex mr mw me
    77150000-7715c000 ---p 00000000 00:00 0
    Size:                 48 kB
    Rss:                   0 kB
    Pss:                   0 kB
    Shared_Clean:          0 kB
    Shared_Dirty:          0 kB
    Private_Clean:         0 kB
    Private_Dirty:         0 kB
    Referenced:            0 kB
    Anonymous:             0 kB
    AnonHugePages:         0 kB
    Swap:                  0 kB
    KernelPageSize:       16 kB
    MMUPageSize:          16 kB
    Locked:                0 kB
    VmFlags: mr mw me
    7715c000-7716c000 rw-p 00008000 1f:01 353        /lib/libapmib.so
    Size:                 64 kB
    Rss:                  64 kB
    Pss:                  53 kB
    Shared_Clean:         16 kB
    Shared_Dirty:          0 kB
    Private_Clean:         0 kB
    Private_Dirty:        48 kB
    Referenced:           64 kB
    Anonymous:            48 kB
    AnonHugePages:         0 kB
    Swap:                  0 kB
    KernelPageSize:       16 kB
    MMUPageSize:          16 kB
    Locked:                0 kB
    VmFlags: rd wr mr mw me ac
    7716c000-77170000 rw-p 00000000 00:00 0
    Size:                 16 kB
    Rss:                  16 kB
    Pss:                  16 kB
    Shared_Clean:          0 kB
    Shared_Dirty:          0 kB
    Private_Clean:         0 kB
    Private_Dirty:        16 kB
    Referenced:           16 kB
    Anonymous:            16 kB
    AnonHugePages:         0 kB
    Swap:                  0 kB
    KernelPageSize:       16 kB
    MMUPageSize:          16 kB
    Locked:                0 kB
    VmFlags: rd wr mr mw me ac
    77170000-77178000 r-xp 00000000 1f:01 348        /lib/ld-uClibc-0.9.33.so
    Size:                 32 kB
    Rss:                  32 kB
    Pss:                   1 kB
    Shared_Clean:         32 kB
    Shared_Dirty:          0 kB
    Private_Clean:         0 kB
    Private_Dirty:         0 kB
    Referenced:           32 kB
    Anonymous:             0 kB
    AnonHugePages:         0 kB
    Swap:                  0 kB
    KernelPageSize:       16 kB
    MMUPageSize:          16 kB
    Locked:                0 kB
    VmFlags: rd ex mr mw me dw
    77178000-7717c000 rw-s 00000000 00:04 32769      /SYSV410a0239 (deleted)
    Size:                 16 kB
    Rss:                   0 kB
    Pss:                   0 kB
    Shared_Clean:          0 kB
    Shared_Dirty:          0 kB
    Private_Clean:         0 kB
    Private_Dirty:         0 kB
    Referenced:            0 kB
    Anonymous:             0 kB
    AnonHugePages:         0 kB
    Swap:                  0 kB
    KernelPageSize:       16 kB
    MMUPageSize:          16 kB
    Locked:                0 kB
    VmFlags: rd wr sh mr mw me ms
    7717c000-77180000 rw-s 00000000 00:04 0          /SYSV3c0a0239 (deleted)
    Size:                 16 kB
    Rss:                  16 kB
    Pss:                  16 kB
    Shared_Clean:          0 kB
    Shared_Dirty:          0 kB
    Private_Clean:         0 kB
    Private_Dirty:        16 kB
    Referenced:           16 kB
    Anonymous:             0 kB
    AnonHugePages:         0 kB
    Swap:                  0 kB
    KernelPageSize:       16 kB
    MMUPageSize:          16 kB
    Locked:                0 kB
    VmFlags: rd wr sh mr mw me ms
    77180000-77184000 rw-p 00000000 00:00 0
    Size:                 16 kB
    Rss:                  16 kB
    Pss:                  16 kB
    Shared_Clean:          0 kB
    Shared_Dirty:          0 kB
    Private_Clean:         0 kB
    Private_Dirty:        16 kB
    Referenced:           16 kB
    Anonymous:            16 kB
    AnonHugePages:         0 kB
    Swap:                  0 kB
    KernelPageSize:       16 kB
    MMUPageSize:          16 kB
    Locked:                0 kB
    VmFlags: rd wr mr mw me ac
    77184000-77188000 rw-p 00004000 1f:01 348        /lib/ld-uClibc-0.9.33.so
    Size:                 16 kB
    Rss:                  16 kB
    Pss:                  16 kB
    Shared_Clean:          0 kB
    Shared_Dirty:          0 kB
    Private_Clean:         0 kB
    Private_Dirty:        16 kB
    Referenced:           16 kB
    Anonymous:            16 kB
    AnonHugePages:         0 kB
    Swap:                  0 kB
    KernelPageSize:       16 kB
    MMUPageSize:          16 kB
    Locked:                0 kB
    VmFlags: rd wr mr mw me dw ac
    7ff40000-7ff64000 rwxp 00000000 00:00 0          [stack]
    Size:                160 kB
    Rss:                  16 kB
    Pss:                  16 kB
    Shared_Clean:          0 kB
    Shared_Dirty:          0 kB
    Private_Clean:         0 kB
    Private_Dirty:        16 kB
    Referenced:           16 kB
    Anonymous:            16 kB
    AnonHugePages:         0 kB
    Swap:                  0 kB
    KernelPageSize:       16 kB
    MMUPageSize:          16 kB
    Locked:                0 kB
    VmFlags: rd wr ex mr mw me gd ac
    7fff4000-7fff8000 r-xp 00000000 00:00 0          [vdso]
    Size:                 16 kB
    Rss:                   0 kB
    Pss:                   0 kB
    Shared_Clean:          0 kB
    Shared_Dirty:          0 kB
    Private_Clean:         0 kB
    Private_Dirty:         0 kB
    Referenced:            0 kB
    Anonymous:             0 kB
    AnonHugePages:         0 kB
    Swap:                  0 kB
    KernelPageSize:       16 kB
    MMUPageSize:          16 kB
    Locked:                0 kB
    VmFlags: rd ex mr mw me de
    
    Nemá někdo zkušenost s libcurl, jestli má můj problém nějaké řešení? Libcurl používám poslední verzi, openssl je 1.0.2d.

    V pár fórech jsem našel podobné problémy, kdy si lidi stěžovali, že se paměť po curl_easy_cleanup ve vlákně neuvolní. Prý to tak je, a uvolňuje se až po curl_global_cleanup, nicméně ten lze volat pouze 1x při ukončování aplikace.

    Také do dělám tak, že můj thread je vlastně nekonečná smyčka (reagující jen na ukončovací signál) se sleepem v řádu minut. Thread se vždy probudí, udělá akci přes curl a zase uspí. Vždy v této iteraci volám curl_easy_init a na konci curl_easy_cleanup. Není to tedy tak, že bych curl_easy_init volal jen 1x před smyčkou thredu a při ukončování vlákna pak curl_easy_cleanup. Tuto variantu jsem myslím zkoušel, ale nepřišlo mi, že by se paměťová náročnost lišila.

    Ještě podotknu, že thready se vykonávají třeba po minutě a paměťová náročnost aplikace je i po mnoha hodinách cca stejná, jako na začátku. Takže ta výsledná náročnost podle mého nesouvisí s memory leeks apod.

    Budu rád, pokud někoho něco napadne. Děkuji.

    Řešení dotazu:


    Odpovědi

    6.4.2022 20:46 X
    Rozbalit Rozbalit vše Re: C, multithread libcurl s openssl a paměťová náročnost
    Na "synchronizaci nastaveni" je rekl bych libcurl zbytecny overkill. Musi to byt nutne HTTPS? To nemuzes zabalit jen CRC data? Napis to nativne pres socket. Pokud hledas inspiraci doporucuji nejaky moderni botnet, ktery ma vyresenou rychlou a sifrovanou synchronizaci s C&C serverem.
    6.4.2022 21:36 MilanC | skóre: 16
    Rozbalit Rozbalit vše Re: C, multithread libcurl s openssl a paměťová náročnost
    Ano, HTTPS proti API informačního systému (se kterým se bavím) je dané, tedy zatím tomu tak je. :-)
    7.4.2022 16:56 j
    Rozbalit Rozbalit vše Re: C, multithread libcurl s openssl a paměťová náročnost
    To se dela tak, ze pred to das "proxy". Viz predrecnik, na tehle malejch vecech proste nemuzes pouzivat tyhle rozezrany knihovny, ktery umej miliardu veci ktery nanic nepotrebujes.

    Takze se s tim netrap, napis to tak minimalisticky jak je to akceptovatelny (vazne to potrebujes sifrovat?) a napis si k tomu "server", kterej to prelozi na to https a kterej pustis nekde, kde te mega sem nebo tam netrapi.

    Http je vsechno mozny jen ne protokol vhodnej na obecnou komunikaci. A presne proto to spousta appek pouziva ...

    BTW: Jakejpa myslis ze ma oficielni duvod to, ze ipsec uz neni povinou soucasti ipv6 ...

    ---

    Dete s tim guuglem dopice!
    7.4.2022 05:45 kvr
    Rozbalit Rozbalit vše Re: C, multithread libcurl s openssl a paměťová náročnost
    20 MB je docela dost, nejsou tam nějaké buffery, kde by se dala upravit velikost apod?

    Jinak si matně vzpomínám, že má i connection pool, aby se nemuselo navazovat pokaždé nové spojení. Tohle by šlo taky nastavit na jedinou connection.

    Ohledně předchozího komentáře - IMHO je https dobrá volba, aspoň nějaká bezpečnost, komunikace přímo přes socket je recept na man-in-the-middle a jiné. Autentikace by byla plus :-)
    7.4.2022 09:51 MilanC | skóre: 16
    Rozbalit Rozbalit vše Re: C, multithread libcurl s openssl a paměťová náročnost
    Přesně to hledám. Já nepotřebuji pro každý thread oddělenou curl inicializaci / handle, ale prostě nemohu najít řešení, jak ten curl handle z hlavního vlákna bezpečně sdílet do threadů. Tak, aby to fungovalo korektně, tedy včetně těch SSL zámků, které moc nechápu jak vlastně fungují (crypto.m), protože se přímo na můj kód nijak nevážou. Volám jen init a kill těch dvou převzatých funkcí z toho příkladu. :-)
    7.4.2022 10:05 X
    Rozbalit Rozbalit vše Re: C, multithread libcurl s openssl a paměťová náročnost
    Jen takova logicka poznamka. Kdyz na tom embedded zarizeni pustis v teminalu curl, nebo wget tak to prece nemuze vzit 0, 0 nic z RAM a za par vterin to mas stazene = neco delas blbe.
    7.4.2022 11:13 MilanC | skóre: 16
    Rozbalit Rozbalit vše Re: C, multithread libcurl s openssl a paměťová náročnost
    Když si stejnou url (https) zavolám přes binárku curlu, která má pochopitelně stejné závislosti - tedy libcurl.so a libssl.so a libcrypt.so, vezme si toto jedno vykonání 4.9MB paměti.
      PID  PPID USER     STAT   VSZ %MEM CPU %CPU COMMAND
     5020  4876 root     S     4912 11.8   0  0.0 curl https://...
    
    Tedy to koresponduje s mým poznatkem o paměťové náročnosti na 1 curl handle.

    Pokud by můj multithread kód šel přepsat na jediný sdílený curl handle, je to řešení.

    Další možnost, co mě napadá je libcurl kompilovat s nějakým jiným SSL balíkem, na výběr je toho dost (ssl,gnutls,nss,polarssl,mbedtls,cyassl,axtls,winssl,darwinssl) a jistě by třeba některý mohl být méně náročný.

    Tady je ale otázka, jestli je to rozežranost curlu jako takového nebo spíš té podpory SSL.

    Ještě jsem narazil na projekt https://curl.se/tiny/, asi vyzkouším, mohlo by to být také řešení.

    Zatím díky.
    7.4.2022 11:49 X
    Rozbalit Rozbalit vše Re: C, multithread libcurl s openssl a paměťová náročnost
    Asi to nechapu, ale to mas otevrenych 8 session naraz? Neni to chyba v navrhu reseni? Z male embedd desticky muzes vyzdimat jem omezenou funkcionalitu. Trapit se s 40MB v dobe, kdy kazde SBC zacina na 2GB nedava moc vyznam. Nic proti teto usporne challange..
    7.4.2022 11:58 MilanC | skóre: 16
    Rozbalit Rozbalit vše Re: C, multithread libcurl s openssl a paměťová náročnost
    Právě že nemám 8 session naráz, to je ten problém. Když to zjednoduším do pseudokódu, mám třeba 8 instancí téhož vlákna, které udělá...
    while(isRunning) {
      curl_easy_init
        //zpracuje a odešle výsledek
      curl_easy_cleanup  // zde se ale paměť neuvolní
      sleep(300)
    }
    
    S názorem na HW souhlasím, ale to šéfovi nevysvětlíš, že by za dalších 32 MB RAM musel připlatit $0,5/kusu.
    7.4.2022 12:07 X
    Rozbalit Rozbalit vše Re: C, multithread libcurl s openssl a paměťová náročnost
    No tak sem soupni ten zdrojak. Treba to bude jen nejaka mala bota.
    7.4.2022 13:32 MilanC | skóre: 16
    Rozbalit Rozbalit vše Re: C, multithread libcurl s openssl a paměťová náročnost
    No moc se mi nechtělo, předem se omlouvám, hlavně ten kód v main je zatím trochu prasárna... https://pastebin.com/FLnsZwRW

    Jinak 2 vlákna jsou fixní (inform_worker a config_worker) a pak je n-vláken task_worker. Díky
    7.4.2022 13:45 MilanC | skóre: 16
    Rozbalit Rozbalit vše Re: C, multithread libcurl s openssl a paměťová náročnost
    Jinak něco se mi podařilo optimalizovat na straně libcurl použitím množství --disable-* a --without-* při překladu libcurl knihovny. Ale je to spíše symbolické, třeba 100 KB / vlákno. :) Na druhou stranu zbytečné tam mít podporu věcí, které se nikdy nevyužijí.

    Jinak ještě ohledně libcurl, co zaznělo výše. Tuto knihovnu jsem do firmware nedodával já, už je součástí a je využívána i jinými částmi (já jí jen povýšil na aktuální a vše překopal na sdílenou .so ze statické). Takže by byl asi problém jí úplně vyhodit/nahradit, maximálně jen v tom mém projektu. Což by mi ale zase trochu zvedlo náročnost ve flash, pokud bych řešil nějakou alternativu.

    Prostě mám 8MB FLASH a to si člověk moc vyskakovat nemůže, už když jen linux kernel mu zabere půlku. :)

    Ten tinycurl jsem narychlo zkusil nahodit také, ale velikostně mi to přišlo úplně stejné. Ještě na to kouknu, možná se to překládá ještě nějak jinak.
    7.4.2022 22:02 X
    Rozbalit Rozbalit vše Re: C, multithread libcurl s openssl a paměťová náročnost
    Lehce se to rika, ale wolfSSL, MbedTLS jsou primo pro embedded zarizeni s pametovym omezenim. To by stalo za pokus.
    7.4.2022 14:37 z_sk | skóre: 34 | blog: analyzy
    Rozbalit Rozbalit vše Re: C, multithread libcurl s openssl a paměťová náročnost
    debian.plus@protonmail.com
    7.4.2022 15:09 z_sk | skóre: 34 | blog: analyzy
    Rozbalit Rozbalit vše Re: C, multithread libcurl s openssl a paměťová náročnost
    V aplikaci využívám vlákna, některá jsou pevně daná, jiná se alokují dynamicky. Každé vlákno nějakým způsobem komunikuje po internetu, většinu času ale spí. Typicky je vláken třeba 6-10. V každém vlákně vytvářím vlastní CURL handle, je to dle příkladu: https://curl.se/libcurl/c/threaded-ssl.html. Používám také zámky pro openssl (crypto.h), které jsem tam popsány.
    Čo chceš? Ak chceš mať jednu inštancia = jedno práve realizované sťahovanie. Ak chceš, môžeš to inštanciu použivať pre rôzne URL, ale podmienkou je, že iba jedna sa môže sťahovať v jednom okamihu. Ak nechceš aby príliš dlho trvala (trebars, nechceš aby blokovala frontu, ak nastane nejaká chyba), tak nastav timeout pre curl query (parameter pre curl).
    debian.plus@protonmail.com
    7.4.2022 16:50 kvr
    Rozbalit Rozbalit vše Re: C, multithread libcurl s openssl a paměťová náročnost
    Jestli to žere skutečně nějakou konstantu per thread a jestli máš krátké requesty, které se dají serializovat, tak nejjednodušší bude pouštět curl jenom z jednoho threadu - něco jako Java ExecutorService, akorát si ho v C asi budeš muset napsat sám:
    
             pthread_create(&executorFunction, null);
    
    void executorFunction(void *)
    {
            for (;;) {
                   pthread_mutex_lock(&queueLock);
                   while (queue.isEmpty())
                           pthread_cond_wait(&queueCond, &queueLock);
                  task_request *tr = queue.pop();
                  pthred_mutex_unlock(&queueLock);
                  (*tr->task)(tr->arg);
                  pthread_mutext_lock(&tr->lock);
                  pthread_cond_broadcast(&tr->cond);
                  pthread_mutext_unlock(&tr->lock);
            }
    }
    
    void execute(void (*task)(), void *arg)
    {
            pthread_mutex_lock(&queueLock);
            task_request = { function: task, arg: arg, lock: lock, cond: cond };
            pthread_mutext_lock(&tr->task->lock);
            queue.append(&task_request);
            pthread_cond_broadcast(&queueCond, &queueLock);
            pthread_cond_wait(&tr->cond, &tr->lock);
            pthread_mutext_unlock(&tr->lock);
            pthred_mutex_unlock(&queueLock);
    }
    
    void myLogicalThread()
    {
             ...
             for (;;) {
                    curl_result result;
                    execute(&requestCurl, { url: ..., result: &result });
                    ... do something
                    sleep...
             }
    }
    
    Jakože rámcově, šlo by to samozřejmě asi o dost chytřeji a celá ta logika by se mohla pouštět radši v jednom schedulovaném threadu (někdo tu řešil nedávno, jak pouštět něco pravidelně, aniž by musel vytvořit spoustu threadů).
    7.4.2022 21:30 .
    Rozbalit Rozbalit vše Re: C, multithread libcurl s openssl a paměťová náročnost
    Jeden handle můžeš používat z více vláken, jen ne současně. Takže bys tam teoreticky prostě přidal mutex. Ale v tom programu není nic, co by muselo běžet paralelně, takže ty vlákna vyjeb a dělej to v jednom.
    8.4.2022 11:21 luky
    Rozbalit Rozbalit vše Re: C, multithread libcurl s openssl a paměťová náročnost
    Nestacila by libfetch? Je mensi nez curl.
    Řešení 1× (MilanC (tazatel))
    8.4.2022 15:06 MM
    Rozbalit Rozbalit vše Re: C, multithread libcurl s openssl a paměťová náročnost
    Co píše 'ulimit'? Co zkusit 'ulimit -s' a zmenšit stack pro nové procesy/thready?
    Řešení 1× (MilanC (tazatel))
    8.4.2022 15:15 MM
    Rozbalit Rozbalit vše Re: C, multithread libcurl s openssl a paměťová náročnost
    Viz taky TOTO
    8.4.2022 16:34 MilanC | skóre: 16
    Rozbalit Rozbalit vše Re: C, multithread libcurl s openssl a paměťová náročnost
    Ahoj, toto vypadá na dobrý point.

    Defaultně mám max. velikost stacku 8MB (uname -s).

    Pokus: Když jsem změnil na 512 kB, tak paměťová náročnost aplikace je cca poloviční a v RAM zabírá kolem 10MB. Při 64k (ulimit -s 64) pak cca 6.2MB RAM.

    Otázka je, pokud budu zkoušet jít cestou pthread_attr_setstacksize, jak určit tu vhodnou velikost.

    Takto se to tváří, že aplikace funguje, nic neprotestuje ani nepadá.
    8.4.2022 17:18 X
    Rozbalit Rozbalit vše Re: C, multithread libcurl s openssl a paměťová náročnost
    Je to vychozi minimalni velikost alokace pro vlakno..
    9.4.2022 02:30 MilanC | skóre: 16
    Rozbalit Rozbalit vše Re: C, multithread libcurl s openssl a paměťová náročnost
    Děkuji. Díky Tvé radě a s využitím pthread_attr_getstacksize jsem se dostal na spotřebu cca 6MB RAM, což je super rozdíl. Stack nastavuji 64kB/thread, i 32kB mi ještě fungovalo, 16kB už ne. Tak jsem zatím volil s trochou rezervy.

    Založit nové vláknoNahoru

    Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

    ISSN 1214-1267   www.czech-server.cz
    © 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.