Eksplore motè VoIP Mediastreamer2 la. Pati 12

Materyèl atik la pran nan men mwen zen channel.

Eksplore motè VoIP Mediastreamer2 la. Pati 12

Nan tan lontan an Atik, Mwen te pwomèt yo konsidere pwoblèm nan nan estimasyon chaj ticker ak fason yo fè fas ak twòp chay informatique nan streamer medya a. Men, mwen deside ke li ta pi lojik yo kouvri pwoblèm yo nan debogaj filtè navèt ki gen rapò ak mouvman done epi sèlman Lè sa a konsidere pwoblèm optimize pèfòmans.

Debogaj filtè atizanal

Apre nou te egzamine mekanis mouvman done nan yon streamer medya nan atik anvan an, li ta lojik pou pale sou danje ki kache ladan l. Youn nan karakteristik yo nan prensip la "kole done" se ke alokasyon an nan memwa nan pil wòch la rive nan filtè yo ki sitiye nan sous yo nan koule nan done, ak filtè yo ki sitiye nan fen chemen an koule deja deallocate memwa a ak retounen. nan pil la. Anplis de sa, kreyasyon an nan nouvo done ak destriksyon yo ka rive yon kote nan pwen yo entèmedyè. An jeneral, liberasyon memwa fèt pa yon filtè lòt pase sa ki te kreye blòk done a.

Soti nan pwen de vi siveyans transparan memwa, li ta rezonab pou filtè a, lè li resevwa yon blòk opinyon, imedyatman detwi li apre pwosesis, libere memwa, epi mete yon blòk ki fèk kreye ak done pwodiksyon sou pwodiksyon an. Nan ka sa a, koule memwa nan filtè a ta ka fasil trase - si analizè a detekte yon koule nan filtè a, Lè sa a, filtè a ki swiv li pa byen detwi blòk fèk ap rantre epi gen yon erè nan li. Men, nan pwen de vi nan kenbe pèfòmans segondè, apwòch sa a nan travay ak blòk done se pa pwodiktif - li mennen nan yon gwo kantite operasyon yo asiyen / memwa gratis pou blòk done san okenn echapman itil.

Pou rezon sa a, filtè medya streamer, yo nan lòd yo pa ralanti pwosesis done, sèvi ak fonksyon ki kreye kopi limyè lè kopye mesaj (nou te pale sou yo nan yon atik anvan). Fonksyon sa yo sèlman kreye yon nouvo kopi antèt mesaj la lè yo "tache" blòk done ki soti nan "ansyen" mesaj kopye sou li. Kòm yon rezilta, de tèt yo tache ak yon blòk done epi yo ogmante kontwa referans nan blòk done a. Men, li pral sanble ak de mesaj. Ka gen plis mesaj ak yon blòk done "piblik" konsa, pa egzanp, MS_TEE filtre génère dis kopi limyè konsa an konnye a, distribye yo nan mitan sorties li. Si tout filtè nan chèn lan travay kòrèkteman, nan fen tiyo a konte referans sa a ta dwe rive zewo epi yo pral rele fonksyon deallocation memwa a: ms_free(). Si apèl la pa rive, Lè sa a, moso memwa sa a p ap retounen nan pil la, sa vle di. li "fuit". Pri a nan sèvi ak kopi limyè se pèt nan kapasite nan detèmine fasil (tankou li ta nan ka a nan sèvi ak kopi regilye) nan ki filtre graf memwa a ap koule.

Depi responsablite pou jwenn fwit memwa nan filtè "natif natal" yo se ak devlopè yo nan streamer medya a, Lè sa a, gen plis chans ou pa pral gen debogaj yo. Men, ak filtè fabrike ou a, ou menm ou se krikèt pwòp kontantman ou, ak tan ou pase pou chèche fwit nan kòd ou a pral depann de presizyon ou. Pou diminye tan debogaj ou a, nou bezwen gade teknik lokalizasyon koule lè w ap desine filtè. Anplis de sa, li ka rive ke flit la pral manifeste tèt li sèlman lè w ap aplike filtè a nan yon sistèm reyèl, kote kantite "sispèk" ka gwo, ak tan an pou debogaj limite.

Ki jan yon fuit memwa manifeste tèt li?

Li lojik asime ke nan pwodiksyon an nan pwogram nan tèt pral montre yon ogmantasyon pousantaj nan memwa okipe pa aplikasyon w lan.

Manifestasyon an ekstèn pral konpoze de lefèt ke nan kèk pwen sistèm nan pral reyaji tou dousman nan mouvman an nan sourit la, tou dousman rdesine ekran an. Li posib tou ke boutèy la sistèm ap grandi, manje moute espas sou kondwi a difisil. Nan ka sa a, aplikasyon w lan pral kòmanse konpòte yon fason etranj, pa reponn a kòmandman, pa ka louvri dosye a, elatriye.

Pou idantifye reyalite a nan yon flit, nou pral sèvi ak yon analizeur memwa (apwe sa refere yo kòm analizeur a). Li ta ka valgrind (bon atik sou li) oswa bati nan du a gcc MemorySanitizer oswa yon lòt bagay. Si analizè a montre ke koule a rive nan youn nan filtè graf yo, Lè sa a, sa vle di ke li se tan pou aplike youn nan metòd ki dekri anba a.

Twa Pines Metòd

Kòm mansyone pi wo a, nan ka ta gen yon koule memwa, analizeur a pral lonje dwèt sou filtè a ki te mande alokasyon memwa nan pil la. Men, li pa pral lonje dwèt sou filtè a ki "bliye" retounen li, ki, an reyalite, se blame. Kidonk, analizè a ka sèlman konfime laperèz nou yo, men li pa lonje dwèt sou rasin yo.

Pou chèche konnen ki kote filtè "move" nan graf la, ou ka ale nan diminye graf la nan kantite minimòm nœuds kote analizè a toujou detekte yon flit epi lokalize filtè pwoblèm nan nan twa pen ki rete yo.

Men, li ka rive ke lè w diminye kantite filtè nan kolòn nan ou pral deranje kou nòmal entèraksyon ant filtè ak lòt eleman nan sistèm ou an epi koule a p ap parèt ankò. Nan ka sa a, ou pral oblije travay ak yon graf gwosè konplè epi sèvi ak apwòch ki dekri anba a.

Metòd izolan glisman

Pou senplisite nan prezantasyon, nou pral itilize yon graf ki gen ladann yon chèn sèl nan filtè. Li montre nan foto a.

Eksplore motè VoIP Mediastreamer2 la. Pati 12

Yon graf òdinè, kote, ansanm ak filtè streamer medya ki pare yo, yo itilize kat filtè atizanal F1…F4, kat diferan kalite ou te fè depi lontan epi yo pa gen okenn dout sou kòrèkteman yo. Sepandan, sipoze ke plizyè nan yo gen yon flit memwa. Lè w ap kouri pwogram sipèvizyon analizè nou an, nou aprann nan rapò li a ke yon sèten filtè te mande yon sèten kantite memwa epi li pa t retounen li nan pil N fwa. Li fasil pou devine ke pral gen yon referans a fonksyon filtre entèn nan kalite MS_VOID_SOURCE. Travay li se pran memwa nan pil la. Lòt filtè ta dwe retounen li la. Moun sa yo. nou pral jwenn koule a.

Yo nan lòd yo detèmine nan ki seksyon nan inaktivite nan tiyo ki te fèt ki te mennen nan yon flit memwa, li pwopoze prezante yon filtè adisyonèl ki tou senpleman chanjman mesaj soti nan opinyon an pwodiksyon an, men an menm tan an kreye yon ki pa limyè, nòmal. "lou" kopi D' mesaj la, lè sa a nèt efase mesaj ki te rive nan sortie. Nou pral rele tankou yon filtè yon izolan. Nou kwè ke depi filtè a se senp, flit nan li se eskli. Ak yon lòt pwopriyete pozitif - si nou ajoute li nan nenpòt kote nan graf nou an, Lè sa a, sa a pa pral afekte operasyon an nan kous la nan okenn fason. Nou pral dekri filtè izolasyon an kòm yon sèk ak yon kontou doub.

Pèmèt izolatè a imedyatman apre filtè voidsourse:
Eksplore motè VoIP Mediastreamer2 la. Pati 12

Nou kouri pwogram nan ak analizeur a ankò, epi nou wè ke fwa sa a, analizè a pral mete blame a sou izolatè a. Apre yo tout, li se li ki kounye a kreye blòk nan done, ki fè yo Lè sa a, pèdi pa yon filtè neglijan enkoni (oswa filtè). Pwochen etap la se deplase izolan la sou chèn lan sou bò dwat la, pa yon sèl filtre, epi kòmanse analiz la ankò. Se konsa, etap pa etap, deplase izolatè a sou bò dwat la, nou jwenn yon sitiyasyon lè kantite blòk memwa "fuit" nan pwochen rapò analizè a diminye. Sa vle di ke nan etap sa a izolan la te fini nan chèn lan imedyatman apre filtè a pwoblèm. Si te gen yon sèl "move" filtre, Lè sa a, koule a pral disparèt nèt. Kidonk, nou lokalize filtè pwoblèm nan (oswa youn nan plizyè). Èske w gen "ranje" filtè a, nou ka kontinye deplase izolatè a sou bò dwat la sou chèn lan jiskaske fwit memwa yo konplètman elimine.

Aplike yon filtè izolatè

Aplikasyon izolatè a sanble jis tankou yon filtè nòmal. Dosye header:

/* Файл iso_filter.h  Описание изолирующего фильтра. */

#ifndef iso_filter_h
#define iso_filter_h

/* Задаем идентификатор фильтра. */
#include <mediastreamer2/msfilter.h>

#define MY_ISO_FILTER_ID 1024

extern MSFilterDesc iso_filter_desc;

#endif

Filtre nan tèt li:

/* Файл iso_filter.c  Описание изолирующего фильтра. */

#include "iso_filter.h"

    static void
iso_init (MSFilter * f)
{
}
    static void
iso_uninit (MSFilter * f)
{
}

    static void
iso_process (MSFilter * f)
{
    mblk_t *im;

    while ((im = ms_queue_get (f->inputs[0])) != NULL)
    {
        ms_queue_put (f->outputs[0], copymsg (im));
        freemsg (im);
    }
}

static MSFilterMethod iso_methods[] = {
    {0, NULL}
};

MSFilterDesc iso_filter_desc = {
    MY_ISO_FILTER_ID,
    "iso_filter",
    "A filter that reads from input and copy to its output.",
    MS_FILTER_OTHER,
    NULL,
    1,
    1,
    iso_init,
    NULL,
    iso_process,
    NULL,
    iso_uninit,
    iso_methods
};

MS_FILTER_DESC_EXPORT (iso_desc)

Metòd pou ranplase fonksyon jesyon memwa

Pou plis rechèch sibtil, streamer medya a bay kapasite pou ranplase fonksyon aksè memwa ak pwòp ou a, ki, anplis travay prensipal la, pral anrejistre "Ki moun, ki kote ak poukisa." Twa fonksyon yo ap ranplase. Sa a se fè nan fason sa a:

OrtpMemoryFunctions reserv;
OrtpMemoryFunctions my;

reserv.malloc_fun = ortp_malloc;
reserv.realloc_fun = ortp_realloc;
reserv.free_fun = ortp_free;

my.malloc_fun = &my_malloc;
my.realloc_fun = &my_realloc;
my.free_fun = &my_free;

ortp_set_memory_functions(&my);

Karakteristik sa a vini nan sekou a nan ka lè analizè a ralanti filtè yo tèlman bagay ke operasyon an nan sistèm nan ki sikwi nou an bati se deranje. Nan yon sitiyasyon konsa, ou dwe abandone analizeur a epi sèvi ak sibstitisyon fonksyon memwa.

Nou te konsidere yon algorithm nan aksyon pou yon graf senp ki pa gen branch. Men, apwòch sa a ka aplike nan lòt ka, nan kou ak konplikasyon, men lide a rete menm jan an.

Nan pwochen atik la, nou pral gade sou pwoblèm nan estimasyon chaj ticker ak ki jan fè fas ak twòp chaj enfòmatik nan streamer medya a.

Sous: www.habr.com

Add nouvo kòmantè