[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

pl.comp.programming

[Windows] Jak zmusic system, zeby przeniósl to co moze do swapa?

smbear

5/20/2007 10:27:00 AM

Witam,

mam taki problem: napisa3em niewielki programik, który w momencie startu
zajmuje niewiele pamieci. Jednak za chwile (polecenie z innego programu)
bedzie jej potrzebowa3 bardzo du?o, do pracy w czasie rzeczywistym niemal.

Pytanie jest takie: jak poinformowaa Windows, ?eby przeniós3 to co mo?e
do swapu ju? w momencie startu programu, a nie dopiero jak program
zaczyna alokowaa potrzebn? mu pamiea?

Bede bardzo wdzieczny za odpowied?.

Pozdrawiam,

Tomek Duda
11 Answers

Lopez

5/20/2007 1:24:00 PM

0

smbear napisa3(a):
> Witam,
>
> mam taki problem: napisa3em niewielki programik, który w momencie startu
> zajmuje niewiele pamieci. Jednak za chwile (polecenie z innego programu)
> bedzie jej potrzebowa3 bardzo du?o, do pracy w czasie rzeczywistym niemal.
>
> Pytanie jest takie: jak poinformowaa Windows, ?eby przeniós3 to co mo?e
> do swapu ju? w momencie startu programu, a nie dopiero jak program
> zaczyna alokowaa potrzebn? mu pamiea?

A nie mozesz zaalokowac odpowiednio duzo pamiemieci juz w momencie
uruchomienia?

--
Pozdrawiam
Lopez

Bronek Kozicki

5/20/2007 1:56:00 PM

0

Lopez <rtlopezREMOVE@gazeta.pl> wrote:

>> Pytanie jest takie: jak poinformowaa Windows, ?eby przeniós3 to co
>> mo?e do swapu ju? w momencie startu programu, a nie dopiero jak
>> program zaczyna alokowaa potrzebn? mu pamiea?
>
> A nie mozesz zaalokowac odpowiednio duzo pamiemieci juz w momencie
> uruchomienia?

to nie wystarczy; pamiea musi bya u?ywana ?eby rezydowaa w RAM (working
set). Powiedzmy ?e jaki? memory pool i do niego w?tek "ogrzewaj?cy" pamiea
chwilowo niewykorzystan?. Ale to obci??y reszte systemu i co gorsza
dodatkowo obci??y cache procesora.


B.


smbear

5/20/2007 2:14:00 PM

0

Bronek Kozicki pisze:
> Lopez <rtlopezREMOVE@gazeta.pl> wrote:
>>
>> A nie mozesz zaalokowac odpowiednio duzo pamiemieci juz w momencie
>> uruchomienia?

Nie moge - informacje ile bedzie potrzebne tej pamieci dostaje dopiero
po jakim? czasie.

> to nie wystarczy; pamiea musi bya u?ywana ?eby rezydowaa w RAM (working
> set). Powiedzmy ?e jaki? memory pool i do niego w?tek "ogrzewaj?cy"
> pamiea chwilowo niewykorzystan?. Ale to obci??y reszte systemu i co
> gorsza dodatkowo obci??y cache procesora.

W momencie startu programu mam troche czasu. Zastanawiam sie, czy
pomog3oby, gdybym na pocz?tku alokowa3 jaki? odpowiednio du?y blok
pamieci (powiedzmy, ?eby zaokr?glia ;) z 512 MB - mój program nie
powinien wiecej potrzebowaa, a ma dzia3aa na maszynach z co najmniej 1
GB RAMu), potem wpisywa3 tam jakie? warto?ci (?eby pamiea by3a u?ywana),
a potem to zwalnia3. Program przez ca3y czas dzia3ania jest widoczny -
tzn. nie jest minimalizowany, nie dzia3a w tle.

Czy system powiekszy3by mi working set? I jak d3ugo by3by on wiekszy?
Tzn. do jakiego zdarzenia? Podejrzewam, ?e do czasu, a? jaka? inna
aplikacja potrzebowa3aby pamieci fizycznej. Je?li tak - to dobrze (ujdzie).

Nie mam dzi? mo?liwo?ci sprawdzia mojej teorii w praktyce niestety. Mo?e
kto? jest w stanie stwierdzia, czy dobrze kombinuje.

Pozdrawiam,

Tomek Duda

Lopez

5/20/2007 2:46:00 PM

0

smbear napisa3(a):
> Bronek Kozicki pisze:
>> Lopez <rtlopezREMOVE@gazeta.pl> wrote:
>>>
>>> A nie mozesz zaalokowac odpowiednio duzo pamiemieci juz w momencie
>>> uruchomienia?
>
> Nie moge - informacje ile bedzie potrzebne tej pamieci dostaje dopiero
> po jakim? czasie.

Ale zaalokowanie roznicy bedzie znacznie mniej kosztowne niz
alokowanie calosci.

>> to nie wystarczy; pamiea musi bya u?ywana ?eby rezydowaa w RAM
>> (working set). Powiedzmy ?e jaki? memory pool i do niego w?tek
>> "ogrzewaj?cy" pamiea chwilowo niewykorzystan?. Ale to obci??y reszte
>> systemu i co gorsza dodatkowo obci??y cache procesora.
>
> W momencie startu programu mam troche czasu. Zastanawiam sie, czy
> pomog3oby, gdybym na pocz?tku alokowa3 jaki? odpowiednio du?y blok
> pamieci (powiedzmy, ?eby zaokr?glia ;) z 512 MB - mój program nie
> powinien wiecej potrzebowaa, a ma dzia3aa na maszynach z co najmniej 1
> GB RAMu), potem wpisywa3 tam jakie? warto?ci (?eby pamiea by3a u?ywana),
> a potem to zwalnia3. Program przez ca3y czas dzia3ania jest widoczny -
> tzn. nie jest minimalizowany, nie dzia3a w tle.
>
> Czy system powiekszy3by mi working set? I jak d3ugo by3by on wiekszy?
> Tzn. do jakiego zdarzenia? Podejrzewam, ?e do czasu, a? jaka? inna
> aplikacja potrzebowa3aby pamieci fizycznej. Je?li tak - to dobrze (ujdzie).

Wrocmy moze do poczatku, co ta aplikacja takiego laduje do pamieci,
ze potrzebujesz optymalizowac proces alokacji. Moze waskie gardlo
masz zupelnie gdzie indziej, np podczas wczytywania pliku, lub
pobierania danych przez siec. Twoje zabiegi wowczas nic nie pomoga.


--
Pozdrawiam
Lopez

smbear

5/20/2007 2:58:00 PM

0

Lopez pisze:
> Wrocmy moze do poczatku, co ta aplikacja takiego laduje do pamieci,
> ze potrzebujesz optymalizowac proces alokacji. Moze waskie gardlo
> masz zupelnie gdzie indziej, np podczas wczytywania pliku, lub
> pobierania danych przez siec. Twoje zabiegi wowczas nic nie pomoga.

Pobieranie nie jest problemem, jak bufory s? ju? w pamieci fizycznej -
sprawdzone.

Aplikacja przygotowuje bufory, do których pobierane s? 16-sto bitowe
dane z kamery (o rozdzielczo?ciach rzedu 2048x700, do 200-stu ramek), a
nastepnie je przetwarza, ostatecznie zapisuje na dysk. Ramki musz? bya
obecne wszystkie w pamieci a? do przetworzenia.

Problem pojawia sie (na 1 GB RAMu) tylko przy maksymalnych liczbach
ramek, przy pierwszym takim alokowaniu - grzebanie OS po dysku w pliku
swap uniemo?liwia odpowiednio szybk? odpowied? do aplikacji nadrzednej.

Pozdrawiam,

Tomek Duda

Lopez

5/20/2007 3:22:00 PM

0

smbear napisa3(a):
> Lopez pisze:
>> Wrocmy moze do poczatku, co ta aplikacja takiego laduje do pamieci,
>> ze potrzebujesz optymalizowac proces alokacji. Moze waskie gardlo
>> masz zupelnie gdzie indziej, np podczas wczytywania pliku, lub
>> pobierania danych przez siec. Twoje zabiegi wowczas nic nie pomoga.
>
> Pobieranie nie jest problemem, jak bufory s? ju? w pamieci fizycznej -
> sprawdzone.
>
> Aplikacja przygotowuje bufory, do których pobierane s? 16-sto bitowe
> dane z kamery (o rozdzielczo?ciach rzedu 2048x700, do 200-stu ramek), a
> nastepnie je przetwarza, ostatecznie zapisuje na dysk. Ramki musz? bya
> obecne wszystkie w pamieci a? do przetworzenia.
>
> Problem pojawia sie (na 1 GB RAMu) tylko przy maksymalnych liczbach
> ramek, przy pierwszym takim alokowaniu - grzebanie OS po dysku w pliku
> swap uniemo?liwia odpowiednio szybk? odpowied? do aplikacji nadrzednej.

Moim zdaniem to potrzebujesz raczej jakiegos systemu czasu
rzeczywistego, bo w obecnej sytuacji nie masz zadnej gwarancji,
ze w momencie przetwarzania nie pojawi sie jakies dodatkowe
dzialanie ze strony OS.
Poza wczesniejsza alokacja mozesz jeszcze sprawdzic jak sie
zachowa przy wylaczonym swapie.

--
Pozdrawiam
Lopez

Piotr Lipski

5/20/2007 3:40:00 PM

0

> Pytanie jest takie: jak poinformowaa Windows, ?eby przeniós3 to co mo?e do
> swapu ju? w momencie startu programu, a nie dopiero jak program

za MSDN:
SetProcessWorkingSetSize
....
If both dwMinimumWorkingSetSize and dwMaximumWorkingSetSize have the value
(SIZE_T)-1, the function temporarily trims the working set of the specified
process to zero. This essentially swaps the process out of physical RAM
memory.

PL

Piotr Lipski

5/20/2007 3:42:00 PM

0

>> A nie mozesz zaalokowac odpowiednio duzo pamiemieci juz w momencie
>> uruchomienia?
>
> to nie wystarczy; pamiea musi bya u?ywana ?eby rezydowaa w RAM (working
> set). Powiedzmy ?e jaki? memory pool i do niego w?tek "ogrzewaj?cy" pamiea
> chwilowo niewykorzystan?. Ale to obci??y reszte systemu i co gorsza
> dodatkowo obci??y cache procesora.

SetProcessWorkingSetSize i pó?niej VirtualLock, który to 'lock ranges of the
application's virtual address space in memory' chyba wystarczy?

PL

smbear

5/20/2007 4:09:00 PM

0

Lopez pisze:
> smbear napisa3(a):
>> Lopez pisze:
>>> Wrocmy moze do poczatku, co ta aplikacja takiego laduje do pamieci,
>>> ze potrzebujesz optymalizowac proces alokacji. Moze waskie gardlo
>>> masz zupelnie gdzie indziej, np podczas wczytywania pliku, lub
>>> pobierania danych przez siec. Twoje zabiegi wowczas nic nie pomoga.
>> Pobieranie nie jest problemem, jak bufory s? ju? w pamieci fizycznej -
>> sprawdzone.
>>
>> Aplikacja przygotowuje bufory, do których pobierane s? 16-sto bitowe
>> dane z kamery (o rozdzielczo?ciach rzedu 2048x700, do 200-stu ramek), a
>> nastepnie je przetwarza, ostatecznie zapisuje na dysk. Ramki musz? bya
>> obecne wszystkie w pamieci a? do przetworzenia.
>>
>> Problem pojawia sie (na 1 GB RAMu) tylko przy maksymalnych liczbach
>> ramek, przy pierwszym takim alokowaniu - grzebanie OS po dysku w pliku
>> swap uniemo?liwia odpowiednio szybk? odpowied? do aplikacji nadrzednej.
>
> Moim zdaniem to potrzebujesz raczej jakiegos systemu czasu
> rzeczywistego, bo w obecnej sytuacji nie masz zadnej gwarancji,
> ze w momencie przetwarzania nie pojawi sie jakies dodatkowe
> dzialanie ze strony OS.
Chcia3bym miea mo?liwo?a dzia3ania na takim systemie, ale realia s? inne.

> Poza wczesniejsza alokacja mozesz jeszcze sprawdzic jak sie
> zachowa przy wylaczonym swapie.
A to ciekawa sugestia.

Pozdrowienia,

Tomek Duda

smbear

5/20/2007 4:15:00 PM

0

Piotr Lipski pisze:
>> Pytanie jest takie: jak poinformowaa Windows, ?eby przeniós3 to co
>> mo?e do swapu ju? w momencie startu programu, a nie dopiero jak program
>
> za MSDN:
> SetProcessWorkingSetSize
> ...
> If both dwMinimumWorkingSetSize and dwMaximumWorkingSetSize have the
> value (SIZE_T)-1, the function temporarily trims the working set of the
> specified process to zero. This essentially swaps the process out of
> physical RAM memory.

To troche inna sytuacja - nie ma przenosia mojego programu do swapu,
tylko wszystkie inne :)

Btw. jest w Windows mo?liwo?a ustawiania prawa dostepu PROCESS_SET_QUOTA
procesowi wywo3uj?cemu? Wystarczy GetCurrentProcess() i potem
SetProcessWorkingSetSize()?

Pozdrawiam,

Tomek Duda