Portál AbcLinuxu, 7. května 2025 19:51
Aktuální verze jádra: 3.9-rc2. Citáty týdne: Ben Bell, Linus Torvalds a tým Pax. Overlayfs v 3.10. Volba SO_REUSEPORT u socketů.
Aktuální vývojová verze jádra je 3.9-rc2 vydaná 10. března. Mno, bylo to docela v poklidu. Jasně, Dave Jones si pohrával s Trinity a bylo kvůli tomu nějaké to vzrůšo, ale Al je zpátky a už se snad virtuálně řítí na bílém koni, aby nás zachránil. Ale jinak to na tuto fázi -rc bylo dobré.
Stabilní aktualizace: během uplynulého týdne žádné nevyšly. V době psaní tohoto textu se revidovaly verze 3.8.3, 3.4.36 a 3.0.69; jejich vydání lze očekávat po 14. březnu.
Ještě důležitější je to, jestli má archivní jádro lepší zvuk než nějaké čerstvé. Trochu jsem to testoval a výsledky jsou jednoznačné, i když by neměly překvapit kohokoliv, kdo se aspoň trochu vyzná v nahrávání:
-- Ben Bell
Ale tohle je určitě další ze situací typu "Jsme naprosto v koncích. Pomoz nám, Al-biwane Ke-Vire, jsi mou jedinou nadějí."
Ale? Prosím, nenuť mě nosit ty zlaté bikiny.
Každý linuxový vývojář se smysluplnými příspěvky v oblasti bezpečnosti Linuxu bude plně sponzorován týmem Pax. Tým LKSC zaměstnal strategicky rozmístěné vyhazovače s baseballkami, kteří budou zlepšovat budoucí debaty na LKML a bezpečnost linuxového jádra.
-- tým Pax
Systém souborů „overlayfs“ je jednou z implementací konceptu union filesystem, kde je dva nebo více systémů souborů kombinováno do jediného, virtuálního stromu. Na LWN se poprvé o overlayfs psalo v roce 2010; od té doby se těšilo pokračujícímu vývoji a dostalo se do jader od řady distribucí. Zatím se ale ještě nedostalo do hlavní řady.
Vývojář Miklos Szeredi nedávno požádal, jestli by připojený patch s implementací overlayfs nemohl být zařazen do vývojového cyklu verze 3.10. Už o to žádal dříve, ale tentokrát Linus odpověděl:
Ano, myslím si, že bychom do toho měli jít. Používá se to, je to docela malé a ostatní alternativy jsou horší. Pojďme naplánovat, jak to zapracujeme.
Na Linusovu žádost Al Viro souhlasil, že opět patche zreviduje, i když poznamenal, že s nimi dříve zrovna spokojený nebyl. Pokud se ale nevynoří něco závažného a neopravitelného, pak se overlayfs asi konečně dostane do jádra.
Jednou z funkcí začleněných do verze 3.9 byla podpora příznaku SO_REUSEPORT v TCP a UDP; tato podpora byla implementována sérií patchů od Toma Herberta. Tento nový příznak umožňuje, aby vícero soketů na stejném hostiteli naslouchalo na stejném portu; cílem je zlepšit výkon vícevláknových síťových aplikací na špičkových systémech s mnoha výpočetními jádry.
Základní koncept SO_REUSEPORT je jednoduchý. Vícero serverů (procesů nebo vláken) může použít bind na ten samý port, pokud každý z nich následujícím způsobem nastaví příznak:
int sfd = socket(domain, socktype, 0); int optval = 1; setsockopt(sfd, SOL_SOCKET, SO_REUSEPORT, &optval, sizeof(optval)); bind(sfd, (struct sockaddr *) &addr, addrlen);
Takže pokud první server tuto volbu nastaví před voláním bind, pak libovolný počet dalších serverů může použít ten samý port, pokud tuto volbu také nastaví. Důvodem pro požadavek na přítomnost příznaku u prvního serveru je to, aby nebylo možné krást porty – aby zlomyslná aplikace nemohla používat port pro odchycení (některých) příchozích spojení či datagramů. A aby nežádnoucí procesy nemohly udělat to samé v případě portů, kde první server SO_REUSEPORT použil, všechny následující servery musejí mít to samé efektivní UID jako první server.
SO_REUSEPORT se může používat u TCP i UDP socketů. U TCP socketů je možné, aby vícero naslouchacích socketů – obvykle v různých vláknech – poslouchalo na stejném portu. Každé vlákno pak může přijímat příchozí spojení pomocí volání accept(). Toto je alternativou ke tradičnímu přístupu, kde vícevlákenné servery přijímají příchozí spojení na jediném socketu.
Prvním z tradičních přístupů je mít jediné naslouchací vlákno, které přijímá všechna příchozí spojení a předává je ostatním vláknům pro zpracování. Problém je v tom, že ve extrémních případech může naslouchací vlákno představovat úzké hrdlo. V počátečních debatách o SO_REUSEPORT Tom uvedl, že pracuje s aplikacemi, které přijímají 40 000 spojení za sekundu. Vzhledem k tomuto číslu nepřekvapí, že pracuje pro Google.
Dalším z tradičních přístupů je to, že všechna vlákna (nebo procesy) používají volání accept() na jediném naslouchacím socketu v jednoduché smyčce:
while (1) { new_fd = accept(...); process_connection(new_fd); }
Problémem při použití této techniky, jak Tom upozornil, je to, že když se více vláken sejde při volání accept(), probuzení nejsou spravedlivá, takže při vysoké zátěži mohou být příchozí spojení distribuována mezi vlákny značně nevyváženě. V Google zaznamenali trojnásobný rozdíl mezi vlákny, která obdržela nejvíce spojení a nejméně spojení; takové nevyvážení může vést k nedostatečnému využití jader procesoru. SO_REUSEPORT se liší v tom, že rozdává připojení mezi vlákny (nebo procesy) volajícími accept() rovnoměrně.
Stejně jako v případě TCP SO_REUSEPORT umožňuje, aby více UDP socketů poslouchalo na stejném portu. Tato schopnost se může hodit například u DNS serveru, který pracuje přes UDP. Díky SO_REUSEPORT může každé vlákno volat recv() na svém vlastním socketu, aby přijímalo datagramy. Tradičním přístupem je, že všechna vlákna volají recv() na jediném sdíleném socketu. Stejně jako v případě TCP toto může vést k nevyváženosti vytížení různých vláken. SO_REUSEPORT se liší v tom, že datagramy distribuuje rovnoměrně.
Tom poznamenal, že SO_REUSEADDR již umožňuje, aby více UDP socketů naslouchalo a přijímalo na stejném UDP portu. Rozdíl je v tom, že SO_REUSEADDR nebrání krádežím portů a nerozdává datagramy rovnoměrně.
Na Tomových patchích se najdou další zajímavosti. První z nich je jedna zajímavá stránka této implementace. Příchozí spojení a datagramy jsou socketům dodávány pomocí hashe založeného na čtveřici identifikátorů – těmi jsou IP adresa a port druhé strany a místní IP adresa a port. To znamená, že když klient použije ten samý socket pro odeslání série datagramů na serverový port, pak tyto datagramy všechny skončí u stejného naslouchacího socketu (dokud bude existovat). Toto zjednodušuje implementaci stavové komunikace mezi klientem a serverem.
Další zajímavostí je to, že současná implementace SO_REUSEPORT je postižena jistým defektem. Pokud se změní počet socketů naslouchajících na portu kvůli spouštění nových nebo ukončení existujících, je tu riziko toho, že příchozí spojení budou při uskutečňování třícestného handshaku přerušena. Problém je v tom, že příchozí požadavky na spojení jsou při příjmu prvního paketu SYN spojeny s konkrétním socketem. Pokud se počet naslouchajících socketů změní, pak se může přihodit, že logika v SO_REUSEADDR nenasměruje poslední ACK při handshaku na správný socket. V takovém případě bude spojení resetováno a na serveru zůstane osiřelá struktura s požadavkem. Na řešení problému se stále pracuje; může si to vyžádat implementaci tabulky požadavků o připojení, která by byla sdílena mezi vícero naslouchacími porty.
Volba SO_REUSEPORT je nestandardní, ale vyskytuje se v podobné formě na řadě jiných UNIXových systémů (hlavně na BSD, odkud pochází). Vypadá to jako užitečná alternativa při snaze vymačkat maximum ze síťových aplikací na vícejádrových systémech, proto půjde o zajímavou novinku pro některé vývojáře aplikací.
He virtually admitted that ...Computer Science:
The company has a virtual monopoly on ...
... running Windows virtually on OS X ...Jde jen o kontext, necitim v tom jinak az tak rozdil ...
... virtual reality technology ...
... Al je zpátky a už se snad virtuálně řítí na bílém koni, aby nás zachránil.treba takto:
... Al je zpátky a doufejme že se už téměř řítí na bílém koni, aby nás zachránil.
... Al je zpátky a doufejme že už se obrazne řítí na bílém koni, aby nás zachránil.a to by mi vyznamove sedelo nejvice; pokud nechapete 'temer' metaforicky, muzete mit pocit, ze je to spatne, protoze "virtually" je v tomto vyznamu spise protejsek 'literally'. U vaseho puvodniho prekladu udelalo vice skody, ze jste vypustil "hopefully" a cokoliv z [temer | skoro | obrazne] by bylo lepsi nez "virtualne", nebot alespon mne to v tomto kontextu v cestine zni nejasne.
Místo hopefully tam je "snad"To "hopefully" je tam hodne silne a vlastne to bylo prvni co me trklo, "snad" mi v danem kontextu nestaci, ale tyhle veci jsou o pocitech.
když se bavíme o někom, kdo se přiřítí jedině po síti...To uz je hodne velke domysleni pribehu nad ramec toho co bylo receno. Co kdyz ma dotycny stado [bilych] koni?
There is virtually no air in the room.V jinem jazyku pak staci najit vyrazovy prostredek ci slovo, ktere vyjadri totez aniz byste se s primym prekladem slova "virtually" vubec trapil.
He was there, staying back and listening to the conversation, virtually invisible.
Snad (a nemyslim "doufejme"Hele, on tohle Lubos chape. Tyhle vety jsou dost jednoznacne, ale co takhle treba "virtually driving a car". Kdyz si to das do google, tak na tebe vypadnout vety jako "I don't see any point in arcade racers, what's the point of virtually driving a car around a track ...." Ale naprosto chapu, ze kdyz zijes v Anglii, tak ten vyznam, ktery by se dal do cestine prelozit jako "vlastne/temer", je pro tebe asi tak 100x silnejsi) to bude takto viditelne v nasledujicich vetach:
There is virtually no air in the room. He was there, staying back and listening to the conversation, virtually invisible.
Tyhle vety jsou dost jednoznacne,Ja jsem je umyslne tvoril tak aby byly a zaroven ilustrovaly co mam na mysli, nechtel jsem to zbytecne zamlzovat, coz by jiste slo.
ale co takhle treba "virtually driving a car".Zalezi na kontextu. Pokud se nebavime o nejakych simulacich - jako i v pripade zminenych arcade racers, bude tu "virtually" nejspis v mineni "practically", coz je ve vetsine pripadu synonymum a jen je tam slaby nadech smerem k "really"; u simulaci to bude spise zminene "in effect even if not in fact".
Ale naprosto chapu, ze kdyz zijes v Anglii, tak ten vyznam, ktery by se dal do cestine prelozit jako "vlastne/temer", je pro tebe asi tak 100x silnejsiClovek se casem v souvislosti mezi reci a konkretnim konanim nauci vice rozlisovat detaily a niance; vydeseny/zmateny/nejisty vyraz posluchace rekne vice nez slovnik..
PS: Lubose se tady zastavam i presto ze mu obcast napisu drsny komentar pod preklady XKCDPreklady ma dobre, i kdyz taky kolem toho "virtually" v prekladu zbytecne tancuje. Ja naopak normalne do takovych veci vlastne vubec nerypu, ale to zduvodneni nahore me postrcilo.
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.