working set estimation

10 отговора 431 прегледа
#1

working set estimation

Я оставете малко Апачето и мазетата в Надежда на мира и поразсъждавайте по следния въпрос:

Как може да се оцени т.нар. working set на даден софтуер? Софтуера си е наш, т.е. можем да му се бутаме по memory manager-a. Дефинираме working set като "обема памет, с който се работи активно", а "активно" не го дефинираме, а го оставяме на въображението на читателя..

Отговори включващи думичките "vtune" или "profiler" или "OS kernel" не се приемат по различни причини. Искам чисто "userland" решение, както казват ония от мазетата в Надежда.

Отговор
в отговор на Skotowydec #2

Re: working set estimation

a "с който се работи" kak go definirame?

Отговор
в отговор на mentor #3

Re: working set estimation

doh. примерно като "процесора я пипа редовно".

Отговор
в отговор на Skotowydec #4

Re: working set estimation

Елементарно, колега. Оставяш програмата да си бачка известно време. Логваш mem usage през определен интервал. Като свърши с логването, смяташ средна стойност. После минаваш лога и разкарваш всички пикове и падове в контекста на тая ср.ст. После пак пак смяташ ср. ст. и това трябва да е истината.

Отговор
в отговор на Resurrector #5

Re: working set estimation

Не става така.

Под working set обикновено се разбира паметта, с която се работи _активно_ - която, поне в моя случай, е много по-малко от паметта, която изобщо е заделена. Активно може да значи нещо като "пипа се десетки пъти в секунда" в нашия случай, може да значи нещо съвсем друго при други приложения. Това е паметта, която ако като обем не се събира във физическата памет, никаква виртуална памет не може да те спаси - докато много приложения могат да преживеят изхвърлянето към диска на рядко използваната памет.

Отговор
в отговор на Skotowydec #6

Re: working set estimation

ako accessvash pametta prez njakuv smart pointer moje da mu slojish v metodite za accessvane na raw pointera njakakva proverka dali e polzvan skoro toja pointer, ako e da si pravish pishesh njakakva statistika
za celta shte trjabva sigurno i da si overridenesh zadeljaneto na pamet, da ti slaga predi 'istinskata' pamet predi da ja vurne zadelenija razmer (podobno na raznite 0xDEADBEAF koito se slagat okolo vurnata pamet, siguren sum che se seshtash), za da ima otkude da go vzeme smart pointera

Отговор
в отговор на Skotowydec #7

Една идея...

Да уточним, че става въпрос за windos. (заради това OS kernel не е отговор).
Ето едно НЕРАБОТЕЩО решение:

VirtualProtectEx

Цялата памет, която се заделя през memory manager-a се маркира, така че когато се направи достъп до нея се генерира изключение, което се прихваща от програмата и се пише в статистиката.

Лошото е, че това ще е мнооооого бавно.

Когато имаш сорсовете обаче можеш да си ги поправиш, така че да получаваш хубави статистики - без загуба на допълнително време.

Отговор
в отговор на FP #8

Re: Една идея...

Хм, така като се поразчетох покрай тоя VirtualProtect, знаеш ли, може и да излезе нещо от тая работа.

Има някаква функционалност за т.нар. guard pages. Това са райони от паметта, които при първия опит за access хвърлят exception и престават да са guard pages.

Така че може би може да се направи така: на определен интервал от време правиш цялата памет, с която работиш, на guard pages с някаква стъпка, примерно 4 кб, изчистваш масив от флагове "тия 4 КБ ги пипнах", а в exception handlera вдигаш съответния бит от масива. Нагласяш стъпката на нарязване на паметта, докато престане да е много бавно.

Отговор
в отговор на Skotowydec #9

Re: working set estimation

a ne moje li prosto da namaliawash pametta dokato prilojenieto pochne
da polzwa twyrde aktiwno virtualnata pamet... towa e sywsem userski
podhod i ne iziskwa nikakwa namesa w sources :)

w boot.ini moje da se dawa kolko ram da polzwa indows s /MAXMEM :)

Отговор
в отговор на Skotowydec #10

Re: working set estimation

vidi mi se podoben problem imat igrite deto si loadvat nivata ot cd-to. ta trqbva ti statistika na niwo blok pamet ne dali a kolko pyti si go pipnal. ako rama ne stiga, broq na page faultovete shte e dobro priblijenie (pone shte se otkroqt naistina kririchnite pages)

Отговор
в отговор на expert #11

тъкмо се точех и аз да го предложа

обаче ти ме изпревари. според мене това е най-добрия подход.

Отговор