Nie jesteś zalogowany.
Jeśli nie posiadasz konta, zarejestruj je już teraz! Pozwoli Ci ono w pełni korzystać z naszego serwisu. Spamerom dziękujemy!
Prosimy o pomoc dla małej Julki — przekaż 1% podatku na Fundacji Dzieciom zdazyć z Pomocą.
Więcej informacji na dug.net.pl/pomagamy/.
Zauważyłem ostatnio (głównie podczas mizernych prób kompilacji kernela), że przy maksymalnym zużyciu procesora w krótkim czasie zawiesza mi sie komp. Nie ma co szukać winy w Linuchu, procek jest jakiś lewy i poprostu staje w miejscu, dlatego chciałbym nałożyć na system ograniczenie by nie korzystał więcej niż z powiedzmy 60% mocy procesora, jak to zrobić ? :]
Offline
#<item> can be one of the following:
# - core - limits the core file size (KB)
# - data - max data size (KB)
# - fsize - maximum filesize (KB)
# - memlock - max locked-in-memory address space (KB)
# - nofile - max number of open files
# - rss - max resident set size (KB)
# - stack - max stack size (KB)
# - cpu - max CPU time (MIN)
# - nproc - max number of processes
# - as - address space limit
# - maxlogins - max number of logins for this user
# - priority - the priority to run user process with
# - locks - max number of file locks the user can hold
No tylko problem jest taki, że kompilacja to jeden proces choć uciażliwy i chyba nie kwalifikuje sie do żadnej z reguł.
Offline
#<item> can be one of the following:
# - core - limits the core file size (KB)
# - data - max data size (KB)
# - fsize - maximum filesize (KB)
# - memlock - max locked-in-memory address space (KB)
# - nofile - max number of open files
# - rss - max resident set size (KB)
# - stack - max stack size (KB)
# - cpu - max CPU time (MIN)
# - nproc - max number of processes
# - as - address space limit
# - maxlogins - max number of logins for this user
# - priority - the priority to run user process with
# - locks - max number of file locks the user can hold
No tylko problem jest taki, że kompilacja to jeden proces choć uciażliwy i chyba nie kwalifikuje sie do żadnej z reguł.
Plik przyznaje określony limit dla danego użytkownika, każdy proces ma właściciela, działa na prawach użytkownika, który go wywołał. Jesli utowrzysz użytkownika np. compiler i przyznasz mu np. 60 % czasu proca, a następnie będziesz kompilował z konta tego użytkownika, to porces gcc nie powinien dostać więcej jak 60% czasu proca. Tak to rozumiem na podstawie lektury w/w pliku.
Offline
Zauważyłem ostatnio (głównie podczas mizernych prób kompilacji kernela), że przy maksymalnym zużyciu procesora w krótkim czasie zawiesza mi sie komp.
mi się to kojaży z:
Processor type and features --> [*] Machine Check Exception
w każdym razie stary podkręcony celek się wywalał, jeśli się skompilowało jądro z tą opcją
Offline
Nie głupi temat. Standardowo lepiej sobie radzi z prockiem windows. Podczas nagrywania płyty zazwyczaj jest duże obcążenie komputera. W windowsie mogę bez problemu włączyć sobie przeglądarkę i przeglądać strony. W linuxie moga przeglądać ale jeśli była wcześniej właczona przeglądarka. Tak więc muszą być jakieś narzędzia które automatycznie będą dbały o komfort pracy bo ustawianie na sztywno dola kompilacji dla nagrywania troszkę męczące.
Offline
# - cpu - max CPU time (MIN)
# - nproc - max number of processesPlik przyznaje określony limit dla danego użytkownika, każdy proces ma właściciela, działa na prawach użytkownika, który go wywołał. Jesli utowrzysz użytkownika np. compiler i przyznasz mu np. 60 % czasu proca, a następnie będziesz kompilował z konta tego użytkownika, to porces gcc nie powinien dostać więcej jak 60% czasu proca. Tak to rozumiem na podstawie lektury w/w pliku.
No oki, to łapie, tylko jeszcze jednostka, (MIN) kojaży mi sie z minutami :D
w każdym razie stary podkręcony celek się wywalał, jeśli się skompilowało jądro z tą opcją
No wlaśnie mam starego podkręconego Cellka 666@800 :] Tylko, że na Fedorze mogłem spokojnie kompilować jajka i nie było zawiech :/
Offline
# - cpu - max CPU time (MIN)
# - nproc - max number of processesPlik przyznaje określony limit dla danego użytkownika, każdy proces ma właściciela, działa na prawach użytkownika, który go wywołał. Jesli utowrzysz użytkownika np. compiler i przyznasz mu np. 60 % czasu proca, a następnie będziesz kompilował z konta tego użytkownika, to porces gcc nie powinien dostać więcej jak 60% czasu proca. Tak to rozumiem na podstawie lektury w/w pliku.
No oki, to łapie, tylko jeszcze jednostka, (MIN) kojaży mi sie z minutami :D
Racja, to są minuty. Rozpędziłem sie. Znalazłem dokładniejszy opis, dotyczący nie tylko limits.conf. Jest tam co nieco informacji.
http://www.seifried.org/lasg/users/
i coś takiego:
http://setiathome.berkeley.edu/forum_thread.php?id=15977
Offline
Huh, troche to bylo toporne; Po primo /etc/security/limits.conf -> CPU max time ogranicza czas zycia procesu, co jedynie moze mi zabezpieczyc kompa przed ewentualna zawiecha, jednak zadania nie wykona.
Secundo, progs, udalo mi sie go skompilowac i zasadniczo spelnia swoje zadanie, chcialbym jednak, aby kazdy nowouruchamiany proces mial na siebie nalozony limit. Cos mi sie zdaje, ze tu trzeba by pogrzebac w konfigu shella, ale nie doszedlem jeszcze tak wysoko w drzewku umiejetnosci. Inna koncepcja bylo by wlepienie progsa do kernela, ale dla mnie to juz jest kompletny kosmos :D
Ponizej listing poprawionego kodu progsa do limitow :)
//cpulimit.c /** * Simple program to limit the cpu usage of a process * * Author: Angelo Marletta (marlonx80@hotmail.com) */ #include <stdio.h> #include <stdlib.h> #include <time.h> #include <sys/time.h> #include <unistd.h> #include <sys/types.h> #include <signal.h> #include <sys/resource.h> //pid of the controlled process int pid; //SIGINT signal handler void quit(int sig) { //let the process continue if it's stopped kill(pid,SIGCONT); exit(0); } int main(int argc, char **argv) { if (argc!=3) { fprintf(stderr,"Usage: %s {pid} {max cpu percentage}n",argv[0]); exit(1); } pid=atoi(argv[1]); int limit=atoi(argv[2]); if (limit>100) { fprintf(stderr,"limit must be in the range 0-100n"); exit(1); } //if possible renice this process, so it has more responsiveness if (setpriority(PRIO_PROCESS,getpid(),-20)!=0) { printf("Warning: cannot renice.nTo work better you should run this program as root.n"); } signal(SIGINT,quit); //time quantum in microseconds int period=100000; struct timespec twork,tsleep; //time to work, and time to sleep twork.tv_sec=0; twork.tv_nsec=period*limit*10; tsleep.tv_sec=0; tsleep.tv_nsec=period*(100-limit)*10; while(1) { if (kill(pid,SIGSTOP)!=0) break; nanosleep(&tsleep,NULL); if (kill(pid,SIGCONT)!=0) break; nanosleep(&twork,NULL); } perror("kill()"); exit(1); }
PS. sorka za brak polonek, ale spierniczyl mi sie uklad klawiatury w Debianie i jeszcze nie doszedlem do tego jak to naprawic :)
Offline
śmieszne takie kopanie z drugiej strony :)
artanis, po prostu przekompiluj sobie jądro. jak zapodasz make menuconfig, to w 'Processor type and features -->' odznacz 'Machine Check Exception'. ma być wyłączone! i teraz jazda z kompilacją
Standardowo lepiej sobie radzi z prockiem windows.
chyba jaja sobie robisz? wspaniały XP na starym celku 333@400 co chwila walił resetem, ni z tego ni z owego. a linuksik (oczywiście skompilowany z tą opcją wyżej) śmiga aż miło ^^
Offline
Odgrzeję stary temat. Na którejś stronie z których codziennie odwiedzam, umieszczono kilka porad odnośnie konsoli, a właściwie czyiś artykulik:
Efektywna praca z konsolą w Linuksie
Najbardziej interesujący do tego tematu jest ostatni punkt:
5. Cpulimit – uspokój swój procesor
Ostatnie miejsce – jednak nie mniej funkcjonalne niż poprzednie. Cpulimit pozwala nam na przyporządkowywanie danemu procesowi odpowiedniego, maksymalnego obciążenia procesora, które może ten proces wygenerować. Nad funkcjonalnością tego rozwiązania nie będę się rozwodził.
sudo apt-get install cpulimit
Tutaj już odsyłam do helpa samego programu.
Szkoda tylko że nie ma jakiegoś pliku w etc który na sztywno ustawiałby dany proces. W ten sposób na stałe przypożądkować by można dane procesy.
Strona projektu: http://cpulimit.sourceforge.net/
Offline