Przepraszam za krzykliwy angielski tytuł ale nie mogłem się powstrzymać :)
Wyobraźcie sobie taką scene:
Oto admin widzi że system spowalnia. Loguje się przez ssh i sprawdza kto jest zalogowany, jakie procesy konsumują czas procesora oraz I/O. Ma podejrzenie, że jest to użytkownik psuj. By sprawdzić co też nasz psuj psuje, mógłby wykonywać co chwile polecenie w oraz obserwować procesy poleceniem top. Chciałby jednak obserwować sesje użytkownika na żywo (on live).
Niestety psuj nie uruchomił programu script, a w systemie również nie mamy innych narzędzi monitorujących. Co powinien zrobić nasz sprytny admin i czy jest w ogóle możliwy taki podgląd? Systemy Unixowe mają ogromne możliwości i zaraz się o tym przekonacie na własne oczy :)
wtorek, 28 lutego 2012
niedziela, 26 lutego 2012
Łatwe prlimit bez prlimit
Ostatnio pisałem w jaki sposób poradzić sobie bez wywołania systemowego prlimit. Okazuje się, że poradzić sobie można nawet jeszcze łatwiej!
Wystarczy znaleźć adress funkcji setrlimit w pamięci naszego procesu
# cat /proc/7747/maps | grep libc
b767f000-b781b000 r-xp 00000000 08:03 64163 /lib/libc-2.15.so
b781b000-b781d000 r--p 0019c000 08:03 64163 /lib/libc-2.15.so
b781d000-b781e000 rw-p 0019e000 08:03 64163 /lib/libc-2.15.so
# printf "0x%x\n" $(( 0xb767f000 + 0x000e06d0 ))
0xb775f6d0
Pamiętajcie, że liczba 0x000e06d0 to oczywiście offset funkcji setrlimit w bibliotece dzielonej libc-2.15.so, który znaleźliśmy ostatnio ;] Teraz wystarczy już tylko:
Wystarczy znaleźć adress funkcji setrlimit w pamięci naszego procesu
# cat /proc/7747/maps | grep libc
b767f000-b781b000 r-xp 00000000 08:03 64163 /lib/libc-2.15.so
b781b000-b781d000 r--p 0019c000 08:03 64163 /lib/libc-2.15.so
b781d000-b781e000 rw-p 0019e000 08:03 64163 /lib/libc-2.15.so
# printf "0x%x\n" $(( 0xb767f000 + 0x000e06d0 ))
0xb775f6d0
Pamiętajcie, że liczba 0x000e06d0 to oczywiście offset funkcji setrlimit w bibliotece dzielonej libc-2.15.so, który znaleźliśmy ostatnio ;] Teraz wystarczy już tylko:
Prlimit bez prlimit!
Chwile czasu mnie nie było, więc teraz postaram się trochę nadrobić zaległości w blogowaniu :)
Kto słyszał już o nowej funkcji systemowej Linuksa, prlimit? Wywołanie to pozwala na zmianę nałożonych wcześniej limitów (np. ograniczenie czasu procesora, otwartych plików) dla już działającego procesu. Niby nic takiego ale jednak. Umożliwia to tuningowanie parametrów pracy serwera bez potrzeby restartu serwisów. Administrator systemu nie musi już ostrzegać o niedostępności usług, lub wysłuchiwać skarg użytkowników, gdy chce przydzielić np więcej czasu procesora dla serwera Apache.
Wszystko ładnie pięknie, ale jest to rozwiązanie które jeszcze nie weszło na dobre do systemu i nie wiadomo kiedy zacznie się pojawiać w stabilnych wersjach Linuksa. Czy do tej pory nie można było zmieniać limitów bez prlimit i restartu? Oczywiście że tak!
Kto słyszał już o nowej funkcji systemowej Linuksa, prlimit? Wywołanie to pozwala na zmianę nałożonych wcześniej limitów (np. ograniczenie czasu procesora, otwartych plików) dla już działającego procesu. Niby nic takiego ale jednak. Umożliwia to tuningowanie parametrów pracy serwera bez potrzeby restartu serwisów. Administrator systemu nie musi już ostrzegać o niedostępności usług, lub wysłuchiwać skarg użytkowników, gdy chce przydzielić np więcej czasu procesora dla serwera Apache.
Wszystko ładnie pięknie, ale jest to rozwiązanie które jeszcze nie weszło na dobre do systemu i nie wiadomo kiedy zacznie się pojawiać w stabilnych wersjach Linuksa. Czy do tej pory nie można było zmieniać limitów bez prlimit i restartu? Oczywiście że tak!
piątek, 17 grudnia 2010
Stos TCP/IP dla Arduino v1.1
Postanowiłem dodać jeszcze kilka nowych rzeczy do poprzedniego kodu. Miało to na celu poprawienie/przyśpieszenie komunikacji oraz uzyskanie interfejsu bardziej zbliżonego do tego co można znaleźć w Arduinowej bibliotece Ethernet dla chipu W5100.
Poniżej krótka lista zmian:
- Funkcja write może teraz składać duże pakiety kawałek po kawałku. Nie musimy więc wysyłać niepotrzebnie małych pakietów (np podczas generowania dynamicznej strony WWW złożonej głownie z danych zapisanych w pamięci flash). Przyśpiesza to znacząco komunikacje protokołu TCP.
- Utworzyłem bufor dla danych przenoszonych przez protokoły TCP/UDP bezpośrednio na enc28j60. Dane przenoszone są w odpowiednie miejsce na chipie poprzez kanał DMA i nie przerzucane poprzez interfejs SPI. Bufor może pomieścić dane z pakietu o maksymalnej długości. Dzięki takiemu buforowi nie musimy odczytywać wszystkich danych natychmiast po odebraniu, tylko możemy odczytać je później w dowolnych kawałkach. Ma to ogromne znaczenie dla mikro-kontrolerów z minimalną ilością pamięci RAM.
- Weryfikowana jest suma kontrolna dla przychodzących pakietów TCP i UDP. Obliczenia są wykonywane przez enc28j60 więc możemy zweryfikować nawet duże pakiety o maksymalnej długości.
Załączony przykład jest dużo bardziej rozbudowany i skomplikowany. Umożliwia on zmianę podstawowych parametrów sieciowych oraz hasła. Oczywiście edycja ustawień możliwa jest dopiero po poprawnym zalogowaniu ;)



Kod źródłowy można pobrać tutaj
Poniżej krótka lista zmian:
- Funkcja write może teraz składać duże pakiety kawałek po kawałku. Nie musimy więc wysyłać niepotrzebnie małych pakietów (np podczas generowania dynamicznej strony WWW złożonej głownie z danych zapisanych w pamięci flash). Przyśpiesza to znacząco komunikacje protokołu TCP.
- Utworzyłem bufor dla danych przenoszonych przez protokoły TCP/UDP bezpośrednio na enc28j60. Dane przenoszone są w odpowiednie miejsce na chipie poprzez kanał DMA i nie przerzucane poprzez interfejs SPI. Bufor może pomieścić dane z pakietu o maksymalnej długości. Dzięki takiemu buforowi nie musimy odczytywać wszystkich danych natychmiast po odebraniu, tylko możemy odczytać je później w dowolnych kawałkach. Ma to ogromne znaczenie dla mikro-kontrolerów z minimalną ilością pamięci RAM.
- Weryfikowana jest suma kontrolna dla przychodzących pakietów TCP i UDP. Obliczenia są wykonywane przez enc28j60 więc możemy zweryfikować nawet duże pakiety o maksymalnej długości.
Załączony przykład jest dużo bardziej rozbudowany i skomplikowany. Umożliwia on zmianę podstawowych parametrów sieciowych oraz hasła. Oczywiście edycja ustawień możliwa jest dopiero po poprawnym zalogowaniu ;)
Kod źródłowy można pobrać tutaj
Subskrybuj:
Posty (Atom)
-
Poniżej kilka mniej lub bardziej przydatnych informacji odnośnie konfiguracji Armbian 22 (bullseye) na OrangePI Zero. Instalacja sama w...
-
Każdy administrator Linuxa, prędzej czy później zobaczy w logach błąd mówiący o tym, że system Linuks wyczerpał całą dostępną pamięć. Nie...
-
Kolejny wpis po dłuższej przerwie ;) Tym razem przyszła pora na odświeżenie mojego małego kontrolera dla drukarek 3d, na którym do tej p...