working set estimation
10 отговора
431 прегледа
working set estimation
Я оставете малко Апачето и мазетата в Надежда на мира и поразсъждавайте по следния въпрос:
Как може да се оцени т.нар. working set на даден софтуер? Софтуера си е наш, т.е. можем да му се бутаме по memory manager-a. Дефинираме working set като "обема памет, с който се работи активно", а "активно" не го дефинираме, а го оставяме на въображението на читателя..
Отговори включващи думичките "vtune" или "profiler" или "OS kernel" не се приемат по различни причини. Искам чисто "userland" решение, както казват ония от мазетата в Надежда.
Как може да се оцени т.нар. working set на даден софтуер? Софтуера си е наш, т.е. можем да му се бутаме по memory manager-a. Дефинираме working set като "обема памет, с който се работи активно", а "активно" не го дефинираме, а го оставяме на въображението на читателя..
Отговори включващи думичките "vtune" или "profiler" или "OS kernel" не се приемат по различни причини. Искам чисто "userland" решение, както казват ония от мазетата в Надежда.
Re: working set estimation
Елементарно, колега. Оставяш програмата да си бачка известно време. Логваш mem usage през определен интервал. Като свърши с логването, смяташ средна стойност. После минаваш лога и разкарваш всички пикове и падове в контекста на тая ср.ст. После пак пак смяташ ср. ст. и това трябва да е истината.
Re: working set estimation
Не става така.
Под working set обикновено се разбира паметта, с която се работи _активно_ - която, поне в моя случай, е много по-малко от паметта, която изобщо е заделена. Активно може да значи нещо като "пипа се десетки пъти в секунда" в нашия случай, може да значи нещо съвсем друго при други приложения. Това е паметта, която ако като обем не се събира във физическата памет, никаква виртуална памет не може да те спаси - докато много приложения могат да преживеят изхвърлянето към диска на рядко използваната памет.
Под working set обикновено се разбира паметта, с която се работи _активно_ - която, поне в моя случай, е много по-малко от паметта, която изобщо е заделена. Активно може да значи нещо като "пипа се десетки пъти в секунда" в нашия случай, може да значи нещо съвсем друго при други приложения. Това е паметта, която ако като обем не се събира във физическата памет, никаква виртуална памет не може да те спаси - докато много приложения могат да преживеят изхвърлянето към диска на рядко използваната памет.
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
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
Една идея...
Да уточним, че става въпрос за windos. (заради това OS kernel не е отговор).
Ето едно НЕРАБОТЕЩО решение:
VirtualProtectEx
Цялата памет, която се заделя през memory manager-a се маркира, така че когато се направи достъп до нея се генерира изключение, което се прихваща от програмата и се пише в статистиката.
Лошото е, че това ще е мнооооого бавно.
Когато имаш сорсовете обаче можеш да си ги поправиш, така че да получаваш хубави статистики - без загуба на допълнително време.
Ето едно НЕРАБОТЕЩО решение:
VirtualProtectEx
Цялата памет, която се заделя през memory manager-a се маркира, така че когато се направи достъп до нея се генерира изключение, което се прихваща от програмата и се пише в статистиката.
Лошото е, че това ще е мнооооого бавно.
Когато имаш сорсовете обаче можеш да си ги поправиш, така че да получаваш хубави статистики - без загуба на допълнително време.
Re: Една идея...
Хм, така като се поразчетох покрай тоя VirtualProtect, знаеш ли, може и да излезе нещо от тая работа.
Има някаква функционалност за т.нар. guard pages. Това са райони от паметта, които при първия опит за access хвърлят exception и престават да са guard pages.
Така че може би може да се направи така: на определен интервал от време правиш цялата памет, с която работиш, на guard pages с някаква стъпка, примерно 4 кб, изчистваш масив от флагове "тия 4 КБ ги пипнах", а в exception handlera вдигаш съответния бит от масива. Нагласяш стъпката на нарязване на паметта, докато престане да е много бавно.
Има някаква функционалност за т.нар. guard pages. Това са райони от паметта, които при първия опит за access хвърлят exception и престават да са guard pages.
Така че може би може да се направи така: на определен интервал от време правиш цялата памет, с която работиш, на guard pages с някаква стъпка, примерно 4 кб, изчистваш масив от флагове "тия 4 КБ ги пипнах", а в exception handlera вдигаш съответния бит от масива. Нагласяш стъпката на нарязване на паметта, докато престане да е много бавно.
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 :)
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 :)
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)
тъкмо се точех и аз да го предложа
обаче ти ме изпревари. според мене това е най-добрия подход.