Nowa wersja stabilizuje realizację magazynu”
Extstore pozwala na użycie dysków SSD/Flash w celu zwiększenia rozmiaru pamięci podręcznej. Podobnie jak w przypadku pamięci RAM, pamięć Flash nie jest trwała i jest resetowana po ponownym uruchomieniu. Celem nowego trybu jest zapewnienie wydajnego buforowania dużych ilości danych. Podczas korzystania z „extstore” klucze i metadane są, jak poprzednio, przechowywane tylko w pamięci RAM, ale duże dane związane z kluczami, których rozmiar przekracza ustawiony próg, są przechowywane w pamięci zewnętrznej, a jedynie wskaźnik pozostaje w pamięci RAM.
Jeśli klucz jest powiązany z małymi danymi, Memcached działa normalnie, przechowuje dane w pamięci i nie uzyskuje dostępu do pamięci zewnętrznej. Jeśli jest dużo wolnej pamięci, najbardziej potrzebne dane można dodatkowo całkowicie umieścić w pamięci podręcznej w pamięci RAM (na przykład możesz określić, że tylko obiekty większe niż 1024 bajty, do których nie uzyskano dostępu przez 3600 sekund, zostaną zresetowane do Flash ).
Implementacja jest zoptymalizowana w celu zapewnienia maksymalnej wydajności i minimalnego obciążenia procesora kosztem wydajności pamięci masowej (wysoki poziom fragmentacji). Aby przedłużyć żywotność dysków Flash, dane są buforowane i sekwencyjnie przesyłane do pamięci masowej. Aby zapisać stan pamięci podręcznej pomiędzy ponownymi uruchomieniami, możesz skorzystać z możliwości, która pojawiła się w wersji 1.5.18, aby zrzucić zrzut pamięci podręcznej do pliku. Przy następnym uruchomieniu możesz przywrócić pamięć podręczną z tego pliku, aby wyeliminować szczyty obciążenia procesorów treści spowodowane pustą pamięcią podręczną (pamięć podręczna natychmiast staje się „ciepła”).
Drugą ważną zmianą w Memcached 1.6 była przeróbka kodu komunikacji sieciowej, który jest przystosowany do automatycznego przetwarzania żądań wsadowych w ramach jednego wywołania systemowego. Poprzednio, podczas wysyłania wielu poleceń GET w jednym pakiecie TCP, memcached wysyłał wyniki w oddzielnych wywołaniach systemowych. W Memcached 1.6 odpowiedzi są agregowane i zwracane poprzez wysłanie pojedynczego wywołania systemowego. W rezultacie na wywołanie systemowe przypada obecnie średnio 1.5 klucza, co w testach wykazuje zmniejszenie obciążenia procesora nawet o 25% i zmniejszenie opóźnień o kilka procent.
Przeprojektowanie podsystemu sieci umożliwiło także przejście na dynamiczną alokację buforów w miarę potrzeb, zamiast statycznego przydzielania buforów. Optymalizacja ta zmniejszyła zużycie pamięci podczas oczekiwania na nowe polecenia poprzez połączenie nawiązane przez klienta z 4.5 KB do 400-500 bajtów, a także umożliwiła pozbycie się wielu wywołań malloc, realloc i free, które prowadzą do niepotrzebnej fragmentacji pamięci na systemy z dużą liczbą połączeń. Każdy wątek roboczy obsługuje teraz własną pulę buforów odczytu i zapisu dla aktywnych połączeń klientów. Aby dostosować rozmiar tych buforów
dostępne są opcje „-o resp_obj_mem_limit=N” i „-o read_buf_mem_limt=N”.
Oddział 1.6 ogłosił również wycofanie
Źródło: opennet.ru