Den nye version stabiliserer implementeringen af lageret "
Extstore giver dig mulighed for at bruge SSD/Flash-drev til at udvide cachestørrelsen. Som med RAM er Flash-lageret ikke permanent og nulstilles ved genstart. Omfanget af den nye tilstand er at sikre effektiv caching af store data. Ved brug af "extstore" bliver nøgler og metadata som før kun gemt i RAM, men store data tilknyttet nøgler, hvis størrelse overstiger en fastsat tærskel, lagres i eksternt lager, og kun pointeren forbliver i RAM.
Hvis nøglen er forbundet med små data, så fungerer Memcached som normalt, opbevarer dataene i hukommelsen og får ikke adgang til eksternt lager. Hvis der er meget ledig hukommelse, kan de mest nødvendige data desuden være helt placeret i cachen i RAM (du kan f.eks. angive, at kun objekter større end 1024 bytes, som ikke er blevet tilgået i 3600 sekunder, nulstilles til Flash ).
Implementeringen er optimeret til at sikre maksimal ydeevne og minimal CPU-belastning på bekostning af lagereffektivitet (højt niveau af fragmentering). For at forlænge Flash-drevs levetid bufres data og skylles til lager sekventielt. For at gemme cachetilstanden mellem genstarter, kan du bruge den mulighed, der dukkede op i version 1.5.18 til at dumpe et cache-dump til en fil. Ved næste opstart kan du gendanne cachen fra denne fil for at eliminere peaks i belastningen på indholdsprocessorer på grund af, at cachen er tom (cachen bliver straks "varm").
Den anden vigtige ændring i Memcached 1.6 var omarbejdningen af netværkskommunikationskoden, som er tilpasset til automatisk at behandle batch-anmodninger inden for et enkelt systemopkald. Tidligere, når man sendte flere GET-kommandoer i en enkelt TCP-pakke, ville memcached sende resultaterne med separate systemkald. I Memcached 1.6 aggregeres svar og returneres ved at sende et enkelt systemkald. Som følge heraf er der nu i gennemsnit 1.5 nøgler pr. systemkald, hvilket i test demonstrerer en reduktion i CPU-belastning med op til 25 % og en reduktion i latens med flere procent.
Redesignet af netværksundersystemet gjorde det også muligt at gå over til dynamisk allokering af buffere efter behov, i stedet for statisk at tildele buffere. Denne optimering reducerede hukommelsesforbruget, mens man ventede på nye kommandoer gennem en klient-etableret forbindelse fra 4.5 KB til 400-500 bytes, og gjorde det også muligt at slippe af med mange opkald til malloc, realloc og free, som førte til unødvendig hukommelsesfragmentering på systemer med et stort antal forbindelser. Hver arbejdstråd håndterer nu sin egen pulje af læse- og skrivebuffere til aktive klientforbindelser. For at justere størrelsen af disse buffere
mulighederne "-o resp_obj_mem_limit=N" og "-o read_buf_mem_limt=N" er tilvejebragt.
Afdeling 1.6 meddelte også afskrivning af
Kilde: opennet.ru