Autor Téma: Page faults - k cemu je to dobre?  (Přečteno 4399 krát)

Offline < z >

  • Administrátoři
  • Guru
  • *****
  • Příspěvků: 1209
  • Karma: 44
    • Verze Delphi: 7, 2010
Page faults - k cemu je to dobre?
« kdy: 07-02-2013, 21:47:04 »
objevil se mi zajimavy problem ...

Na jednom (nebo malem poctu) PC se rapidne zvysuje velikost programu v RAM pameti a
page faults neskutecne roste.

Jde o prosty testik ... (o leaknutym "m" to neni)
Kód: Delphi [Vybrat]
  1. var
  2.   m: TIdMultiPartFormDataStream;
  3.   s, s2: string;
  4. begin
  5.   m:=TIdMultiPartFormDataStream.Create;
  6.   if OpenDialog1.Execute then
  7.     s2:=OpenDialog1.FileName;
  8.   m.AddFile('Filedata', s2, 'application/octet-stream');
  9.   m.AddFormField('Filename',ExtractFileName(s2));
  10.   s:=IdHTTP1.Post('http:// ...', m);
  11.   ShowMessage(s);
  12. end;
Ve skratce, pomoci HTTP se nahrava soubor vetsi soubor.
Na "vadnem" PC se obsazeni RAM umerne zvysuje s poctem nahranych dat a tim
roste i page faults.

Nema nekdo predstavu, jak presne to page faults funguje?
Je to zavisle na hardwaru PC? Vypada to, ze toto programove neovlivnim,
ledaze je chyba v Indy :D
No je divne, ze na mem PC se tento problem neprojevil.

Dik za namet, jak toto resit.

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 3534
  • Karma: 139
    • Verze Delphi: D2007, XE3, DX10
Re:Page faults - k cemu je to dobre?
« Odpověď #1 kdy: 07-02-2013, 22:19:38 »
Ve skratce, pomoci HTTP se nahrava soubor vetsi soubor.
Na "vadnem" PC se obsazeni RAM umerne zvysuje s poctem nahranych dat a tim
roste i page faults.

Nema nekdo predstavu, jak presne to page faults funguje?
Je to zavisle na hardwaru PC? Vypada to, ze toto programove neovlivnim,
V kostce: page fault indikuje, kolikrat musel stroj resit situaci, ze proces sahnul do stranky pameti, ktera patri do virtualni pameti procesu, ale fyzicky neni
momentalne k dispozici, takze se musi postarat, aby byla. Lze vygooglit spoustu popisu.

Cili ano, je to zavisle a) na HW kolik je k dispozici fyzicke pameti b) na tom, co vsechno v tom pocitaci bezi.

Podivej se do Indy, jak tam sestavuji ten MIME format, jestli si nekde nejdrive nesestavi celou multipart zpravu v pameti a tu neodesilaji. To by leccos mohlo vysvetlovat, pokud ma ten pocitac min pameti ev. je zabordelen buhvi cim.






Offline < z >

  • Administrátoři
  • Guru
  • *****
  • Příspěvků: 1209
  • Karma: 44
    • Verze Delphi: 7, 2010
Re:Page faults - k cemu je to dobre?
« Odpověď #2 kdy: 08-02-2013, 07:51:40 »
TIdMultiPartFormDataStream mam docela dobre nastudovanej,
podle meho laickeho nazoru je to vyborna vec, protoze to do pameti netaha zbytecnosti
(jsou tam jen vlozene texty, co se odesilaji, soubory jsou vedeny v seznamu jako filestream)

ale nicim jinym to primo nemuze byt, takze Indy asi nema v lasce ten PC :(

asi bych musel prvne vedet, jak strankovani a virtualni pamet funguje :D
RAM pameti je dost ... zajimave, ze velikost programu v RAM roste prave podle toho,
kolik dat se uz odeslalo ... jako kdyby musel system ten filestream nacitat do pameti

no zkusim se poptat jeste autora Indy

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 3534
  • Karma: 139
    • Verze Delphi: D2007, XE3, DX10
Re:Page faults - k cemu je to dobre?
« Odpověď #3 kdy: 08-02-2013, 08:13:09 »
podle meho laickeho nazoru je to vyborna vec, protoze to do pameti netaha zbytecnosti
(jsou tam jen vlozene texty, co se odesilaji, soubory jsou vedeny v seznamu jako filestream)
No je prave otazka, jestli netaha - jestli se na to nedivas nejakym high-level pohledem...

Do dratu se vysila jediny stream, do ktereho jsou ty soubory zacleneny mezi hlavicky
casti zpravy, a je otazka, jak to Indy dela:
  • jestli si opravdu vytvori kostru zpravy,
    odvysila hlavicku casti, pak si otevre soubor, ktery tvori jeji telo a jeho postupnym
    ctenim do bufferu (a ev. kodovavanim) ho po castech odvysila a zase zavre
    a pokracuje vysilanim kostry MIME
  • nebo jestli si nekde sestavi celou MIME zpravu
    a tu pak postupne vysila a jeste ji ma sestavenou nekde v memory streamu.

Kdyby bylo dost fyzicke pameti RAM vzhledem k pozadovane velikosti working setu aplikace, tak by stroj nestrankoval...

Offline Mi.Chal.

  • Guru
  • *****
  • Příspěvků: 577
  • Karma: 25
Re:Page faults - k cemu je to dobre?
« Odpověď #4 kdy: 08-02-2013, 09:46:18 »
Kdyby bylo dost fyzicke pameti RAM vzhledem k pozadovane velikosti working setu aplikace, tak by stroj nestrankoval...

On to zřejmě nemusí být jenom nedostatek fyzické paměti, tahání stránky z disku je jenom jedna z příčin. Doma mám 16GB, vypnuto swapování, volných třeba 8GB a stejně mi to u některých procesů ukazuje page faulty...

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 3534
  • Karma: 139
    • Verze Delphi: D2007, XE3, DX10
Re:Page faults - k cemu je to dobre?
« Odpověď #5 kdy: 08-02-2013, 10:03:09 »
Kdyby bylo dost fyzicke pameti RAM vzhledem k pozadovane velikosti working setu aplikace, tak by stroj nestrankoval...
On to zřejmě nemusí být jenom nedostatek fyzické paměti, tahání stránky z disku je jenom jedna z příčin. Doma mám 16GB, vypnuto swapování, volných třeba 8GB a stejně mi to u některých procesů ukazuje page faulty...
Obecne mas pravdu, protoze existuji soft a hard (minor/major) faulty viz treba1,2 a ruzne softy delaji ruzne veci, ale IMHO to predevsim indikuje nedostatek fyzicke pameti resp. plytvani s pameti obecne. Jinak soucasti nejakeho resource kitu by mel byt pfmon.exe, ktery by mel poskytnout blizsi informace o page faults, ale zatim jsem nemel potrebu se tim zabyvat.

1 odpoved autora nejakyho starace v pocitaci http://stackoverflow.com/questions/5684365/what-causes-page-faults
2 obecne http://en.wikipedia.org/wiki/Page_fault

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 3534
  • Karma: 139
    • Verze Delphi: D2007, XE3, DX10
Re:Page faults - k cemu je to dobre?
« Odpověď #6 kdy: 08-02-2013, 10:20:54 »
On to zřejmě nemusí být jenom nedostatek fyzické paměti, tahání stránky z disku je jenom jedna z příčin.
Kdyby mu to jen hodne strankovalo a nerostla pamet, tak bych rek, ze muze jit soft faults, kdyz by v systemu byly nejake divoke aplikace, ktere expanduji a smrskavaji heap a tahaji se o stranky, ktere jsou neprirazene v pameti. Ale kdyz mu roste working set, to by melo znamenat, ze to chce novou a novou pamet.

Offline < z >

  • Administrátoři
  • Guru
  • *****
  • Příspěvků: 1209
  • Karma: 44
    • Verze Delphi: 7, 2010
Re:Page faults - k cemu je to dobre?
« Odpověď #7 kdy: 08-02-2013, 11:14:17 »
podle toho, co vim, tak TIdMultiPartFormDataStream cte jen to, co je potrebne - v bufferech

pfmon vyzkousim

wiki sem si cetl, ale nepochopil sem ani slovo, o cem to vlastne je :D

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 3534
  • Karma: 139
    • Verze Delphi: D2007, XE3, DX10
Re:Page faults - k cemu je to dobre?
« Odpověď #8 kdy: 08-02-2013, 11:42:58 »
podle toho, co vim, tak TIdMultiPartFormDataStream cte jen to, co je potrebne - v bufferech
Nevim. Indy se nehodlam zabyvat ;)

Citace
wiki sem si cetl, ale nepochopil sem ani slovo, o cem to vlastne je :D
No zkratka OS se spolupraci s CPU si rozdeli celou pamet na stranky, tusim ze u Windows jsou to 4 kB velke a procesu virtualizuje pamet. Kdyz ten proces vytvari, tak mu nejake stranky z fyzicke pameti prideli a spusti ho. A jak ten proces bezi, tak se odkazuje do pameti ve svem virtualnim prostoru tj. napr. vola subroutinu, ktera bud uz je nebo neni pritomna v pameti resp. virtualni stranka neni namapovana na fyzickou. Takze procesor vyvola HW interrupt (page fault) ze proces sahnul nekam, kde nic neni, no a operacni system zajisti, aby tam neco bylo. Coz udela treba v pripade toho callu pridelenim stranky a nactenim jejiho obsahu. Jakmile stranku nacte, tak nechaa proces dokoncit ten preruseny call. Kdyz mu dojde pamet a uz nema zadne volne stranky, tak musi nejdriv jinemu procesu nejakou sebrat, ulozit jeji obsah na disk, nacist obsah, ktery tam ted potrebuje a namapovat ji do virtualni pameti,. Pokud prideluje novou stranku pro heap, tak ji jenom vynuluje a zadny obsah do ni nenacita.