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:
niedziela, 26 lutego 2012
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
czwartek, 9 grudnia 2010
Stos TCP/IP dla Arduino
Jakiś czas temu wpadłem na pomysł by dodać do Arduino możliwość komunikowania się poprzez Internet. Nie jest to nic odkrywczego, takich projektów było już dziesiątki. Wygodnie jest wejść przez przeglądarkę by zobaczyć jak sobie radzi nasz mały przyjaciel.
Implementacji stosu TCP/IP dla systemów osadzonych również jest kilka. Mają jednak one wspólną wadę: są mimo wszystko zbyt duże i potrzebują zbyt wiele zasobów jak dla Arduino z chipem Atmega168, posiadającym 16kB flash i 1kB ramu ;]
Poniższy projekt wykorzystuje chip enc28j60 oraz moją implementacje TCP/IP dzięki czemu po skompilowaniu potrzebuje poniżej 7kB flashu oraz 224 bajtów pamięci RAM do działania :)
Dla wszystkich zainteresowanych kod źródłowy na licencji GNU jest dostępny tutaj

Implementacji stosu TCP/IP dla systemów osadzonych również jest kilka. Mają jednak one wspólną wadę: są mimo wszystko zbyt duże i potrzebują zbyt wiele zasobów jak dla Arduino z chipem Atmega168, posiadającym 16kB flash i 1kB ramu ;]
Poniższy projekt wykorzystuje chip enc28j60 oraz moją implementacje TCP/IP dzięki czemu po skompilowaniu potrzebuje poniżej 7kB flashu oraz 224 bajtów pamięci RAM do działania :)
Dla wszystkich zainteresowanych kod źródłowy na licencji GNU jest dostępny 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...
-
Rok 2020, z pewnością zapisze się w historii. Już teraz można go podsumować nie tylko jako rok pandemii, ale przede wszystkim rok który najp...