Автор Тема: Оптимизиране на използването на ram паметта  (Прочетена 1745 пъти)

Hedron

  • Напреднали
  • *****
  • Публикации: 44
  • Distribution: Kubuntu 12.10
  • Window Manager: KDE
    • Профил
    • WWW
Опитвам се да оптимизирам използването на RAM паметта при SuSE 10.1, но каквото и да направя, след известно време използване и стартиране на различни приложения, RAM паметта се задръства с програми и производителността на системата рязко спада. Странното е, че това не зависи от количеството памет. Ако в машината има 512 MB, заема ги всичките, ако е един гигабайт - същото. Междувременно swap дяла си стои празен.

Има ли начин да накарам системата да освобождава паметта, след прекратяване на работата на дадено приложение, защото дори и да спра всичко, паметта си остава заета и не се освобождава до рестарт. Спрял съм всички неща свързани с preload, но единственното което постигнах, беше забавяне на стартирането на приложенията и накъсване при работа с някои от тях.


Машината е с параметри 2 GHz Intel Pentium 4, 1GB RAM 60 GB HDD.
Активен

aaaaaa

  • Напреднали
  • *****
  • Публикации: 971
    • Профил
Сигурен ли си, че проблемът с производителността е свързан със заемането на паметта. Не съм много на вътре в нещата, но линукс ползва паметта по по - различен начин от windows и до колкото знам заема почти цялата памет, без значение колко имаш. Например на моя дебиан от 512 обикновено има 20-30 свободни мб.
Активен

...to boldly go where no one has gone before...

ilian_BIOS

  • Напреднали
  • *****
  • Публикации: 602
  • Distribution: opensuse
  • Window Manager: kde
    • Профил
идеята е точно таква да се използва цялата РАМ , за да се увеличи бързодействието и за да не суапва както уин , който винаги драска на диска  '<img'> , не се притеснявай и аз в началото си мислех що става така но после разбрах

Цитирам :
Не виждам проблем. Просто Линукс се старае да използува
 пълноценно свободната памет. За всяко приложение той заделя
 необходимото количество памет, което се адресира по
 специален начин и се използува само от даденото приложение.
 Това му е майката на многозадачната работа. Както виждаш,
 по-голямат част от паметта се използува за кеширане - пак
 част от магията на бързото обслужване на процесора. Важното
 е, че и в двата случая не използува диска за суапване, което
е основната причина за забавянето на системата.
Активен

gat3way

  • Напреднали
  • *****
  • Публикации: 6050
  • Relentless troll
    • Профил
    • WWW
Не е перфектен VM мениджмънта. дори при много нови ядра. Какво ще рече че се прецаква производителността, влизаш в swap-a ли? Имаш ли swap usage?

А иначе това дали в рам-та ще стоят VFS кешове или malloc-натите данни на твоите процеси до голяма степен може да се контролира.

Както вече казаха, ядрото има интерес повечето памет да се използва за полезни дейности...не винаги му е много ясно кое е полезно  за жалост '<img'>



Активен

"Knowledge is power" - France is Bacon

the_real_maniac

  • Напреднали
  • *****
  • Публикации: 1258
  • Kernel panic, me - no panic ;-) :-)
    • Профил
Цитат (Hedron @ Ноември 18 2006,21:42)
Опитвам се да оптимизирам използването на RAM паметта при SuSE 10.1, но каквото и да направя, след известно време използване и стартиране на различни приложения, RAM паметта се задръства с програми и производителността на системата рязко спада. Странното е, че това не зависи от количеството памет. Ако в машината има 512 MB, заема ги всичките, ако е един гигабайт - същото. Междувременно swap дяла си стои празен.

Има ли начин да накарам системата да освобождава паметта, след прекратяване на работата на дадено приложение, защото дори и да спра всичко, паметта си остава заета и не се освобождава до рестарт. Спрял съм всички неща свързани с preload, но единственното което постигнах, беше забавяне на стартирането на приложенията и накъсване при работа с някои от тях.


Машината е с параметри 2 GHz Intel Pentium 4, 1GB RAM 60 GB HDD.

Значи за неползване на търсачката 1 червена точка.

2-ра червена точка. Сам си забелязал , че си спрял preload И какво е станало  '<img'>
т.е проблема не е там , където го търсиш, а дори това , което си направил не те ли навежда на някаква ЛОГИЧНА мисъл ?

3-та жълта точка  ':p' Следващият път ползвай търсачката преди да питаш -> ама най-простичкият пример давам:

ram AND swap

и щеше да знаеш кое защо става.

пп: не ми е за заетите KB от тази тема ;-) Ама хич , друг е въпроса и е много по-важен ;-) :-)

едит: аа и не гледай смайлитата, това си е предупреждение, следващият път, ако не търсиш преди да питаш ще има lock , поради простичката причина , че повтарянето води до затъпяване, това е и 1 от причините (ЕДНА САМО , казвам) да не ти отговоря. То омръзва.
2-рата е , че поне 20 пъти е обсъждано.
3-тата ... ит .н, и т.н.

едит2: и даже ГО гледам и му се чудя на gat3way  '<img'>  ':p'  'B)'



Активен

Powered by Debian GNU / LINUX /// Intel inside ...

„Насилието е последното убежище на некомпетентността“ - Айзък Азимов (1920 — 1992)

plamen_f

  • Напреднали
  • *****
  • Публикации: 1246
    • Профил
Подкрепям the_real_maniac,

Прочети малко по въпроса за иделогията на unix/linux управление на паметта. Още по-добре е да прочетеш малко и за алгоритмите за управление на памет въобще (ако си ИТ човек - а щом питаш такива неща поне искаш да станеш) прочети някоя и друга статия/лекция по ОС.

Казвам го съвсем добронамерено - определено ще разбереш защо 512М/1г или колкото слойисх ползва SUS (a и всички други UNUX like ОС).

Успех!
Активен

gat3way

  • Напреднали
  • *****
  • Публикации: 6050
  • Relentless troll
    • Профил
    • WWW
Не бива така да тормозите човека, верно че можеше да прочете, да прерови гугъл или търсачката, ама все пак...Аз съм много далеч от идеята за някакво там линукс братство дето трябвало да помага на начинаещите ама що да не споделя, хм. Темата е интересна и за съжаление прекалено сложна за да мога да твърдя че съм особено компетентен. Въпреки това някои неща са достатъчно прости и разбираеми '<img'>

Дискови операции се кешират. На теория максимално възможно памет трябва да е заета от кеша, без да се пречи на нуждите на процесите които вървят. Има няколко хмм "нива" на кеширане - кешират се изчетени последователни сектори от диска (readahead block device buffer). Кешират се buffer_head структурите, както и данните, към които съдържат указатели (т.е отделни изчетени сектори). Кешира се VFS информация - cat /proc/slabinfo |grep ext примерно - inodes, blabla. Кешират се dentries (хмм "листинг" на директории)

Когато записваш нещо върху диска също така никой не е казал че веднага отива там. Има I/O scheduling. Ако в момента се извършва операция четене и се очаква да се извършат още 10 такива, особено последователни като локация, е по-разумно операцията за писане да ги изчака да минат, след 10-те четения информацията от буфера се записва. Това е защото безцелното редуване на запис/четене върху диска е бавно - чака се пренастройване на главите и seek-ване на друго място където се записва информацията. В почти всички случаи предварително нещата за писане отиват по разни буфери в паметта с идеята когато е най-удобно за системата да се запишат на диска. Такива буфери от сорта на "всеки момент може да се запише" се наричат "dirty memory". В един определен момент тя се записва на диска (има /proc tunnables които контролират как и колко често става това). Апропо, винаги можеш да я запишеш насила - ползвай командата sync.

Всичко това не е безгрешно. Ако се загледаш в повечето време заетата ти рам е близка до 100%. Понеже не всеки елемент от рам-та и конкретно от кеша можеш го вкараш в суоп-а когато ти скимне (защо е така е много дълга тема - заради много причини) - ако една програма на теория изведнъж заяви много голям обем от памет, може да се окаже че кешираните VFS глупости, които в момента не се ползват особено, ще останат в паметта. А мегабахтите данни която е заявила твоята програма за да ги напълни с нещо отиватв суоп-а, оттам драскане по диска и производителността отива на майната си. И всичко това заради най-доброто желание да се подобри, а не да се влоши общата производителност '<img'>

Веднъж влезеш ли в суоп-а има различни стратегии за подобряване на производителността на машината - има параметър наречен swappiness, който определя тенденцията на ядрото да "изхвърля" в суопа памет, която не е достъпвана достатъчно скоро. При висока стойност от една страна се освобождава РАМ в случай че стартираш нова програма или пък че някое приложение прави сериозни игрички с паметта и не трябва да му се пречи със суопинг на неговите данни. От друга страна, това прави responsiveness-а на една десктоп система кошмарен - примерно превключвайки между браузъра и мп3 плеъра забелязваш как диска се изкъртва от четене и писане (това става защото данните на плеъйра вече са били "изхвърлени" в суоп-а и сега се връщат в рам-та, докато данните на браузъра поемат по обратният път - от рамта в суоп-а). Балансът, правилният оптимален баланс е доста...сложна задача '<img'> За линукс на лаптоп примерно swappiness-а е най-добре да стои равен на 0. За един сървър по-добри са по-високи стойности, въпреки че зависи какво върви на този сървър.

Хубавото е че memory management-a става все по-добър с времето. А този на 2.6 по принцип е много добър, въпреки че не е перфектен.
Активен

"Knowledge is power" - France is Bacon