Portál AbcLinuxu, 1. května 2025 10:25
Jen bych měl dotaz ohledně Keria Connect, proč jej provozuješ na windows serveru?Protože požadavkem bylo, aby v KOFF fungovalo SSO a nemuselo se explicitně zadávat heslo. A to Kerio na Linuxu neumí - anebo alespoň ještě na podzim neumělo a v changelogu jsem si změny nevšiml.
Mno, jinak u mně by takové uptime neprošly :-/Já mám konkrétně tady (děláme víc firem) v noci naštěstí celkem klid, dělají jen přes den a pokud jim v jednu v noci otočím server, nevšimnou si toho ani notebookáři. V tomhle případě k tomu přispělo, že byl víkend, svátek a navíc téměř všichni jsou outlookáři a KOFF stahuje jen nové nebo změněné zprávy. A ty čitelné byly, deduplikace se aplikuje na soubory, na které pár dní nikdo nesáhl. O to problematičtější byla obnova z backupu, musel jsem promíchat soubory z toho dne s tím, co jsem vytáhl z databáze. Viditelně ten server nejel "jen" asi od pěti večer do dvou do rána. A jak jsem psal: víkend mezi svátky. Pár lidí si toho všimlo, ale nedělalo jim problém pochopit, že jsme měli havárii a že na tom pracujem. Je fakt, že ve všední den nebo když mají víkendovou zakázku, to by mě asi sežrali... Ostatní virtuály, které tam běží jsou duplikované (doménový řadič, DNS/DHCP...) nebo se využívají jen ve všední den.
co jsem vytáhl z databáze.... pardon, ze zálohy, samozřejmě.
lvcreate --type raid1
'. Při náhodném přístupu mi LVM dával asi tak poloviční IOPS, což mi oproti MD přijde docela bída. Možná jsem dělal něco špatně.
Jádro 3.17, 2x WDC WD40EFRX v RAID1.
Mimochodem, zkoušeli jste někdo RAID co je přímo v LVM?Nikdy jsem neměl tu potřebu. Pokud si pamatuju, tak podpora RAID v DM se dodělávala až v době, když MD už existovalo a běžně se používalo - když si můžu vybrat, preferuju kód, který používá víc lidí (protože je lépe otestovaný)
Jak se zdá, nejsem sám.No, tam zrovna u dm-cache ukazuje docela dobré výsledky... ale možná to trochu vysvětluje ty moje
Když na filesystemu vypnul discard, tak mu šel výkon rapidně dolůCož to jasně, když jsou ty přístupy náhodné, tak se nedá moc čekat, že kód dm-cache dobře odhadne, co si má nechat a co ne. Vypnutý discard způsobil jenom to, že ta cache musela pracovat s backing device a projevilo se to.
No dává, ale jen do zaplnění cache určené pro zápis dat.Zase, s náhodnými přístupy, což úplně neodpovídá reálnému provozu, kde se přece jenom k některým datům přistupuje více než k jiným.
Troufám si tvrdit, že v běžném provozu se data hned po zápisu na disk mazat nebudou, takže je důležité, aby se cache byla schopna ve writeback režimu nezapsaných dat zbavit dřív, než bude požadavek na další zapisování. Bcache má v tomhle směru docela hezkou samoregulaci rychlosti vyprazdňování; pokud je u dm-cache, tak jsem ji nenašel.No, tady bych řekl, že už výkon s tím discardem nesouvisí. Pokud dobře chápu, tak jediné, o co mu šlo s tím vypnutým/zapnutým discard, je jaktože mají náhodné zápisy tak dobrý výkon. A závěr - protože se při formátování udělal discard, takže není potřeba při zápisu číst z backing device. Což jinak potřeba je - když se zapíší data menší než je velikost bloku v cache, musí se z backing device vytáhnout zbývající data, aby se do cache zapsal celý blok. A tak to v tom jeho testu bylo, bs=4k, nejmenší možná velikost chunksize je 32k (AFAIK) Naopak když se data nesmažou, tak by výkon měl být jenom lepší - když se je něco pokusí číst, tak jsou k dispozici. Na co jsme možná oba narazili, je fakt, že dm-cache se nesnaží fungovat jako cache pro všechno - v tom blogu je to dobře vysvětlené, že má zrychlovat přístup k místům, se kterými se intenzivně pracuje. Proto taky jeden zápis na nějaké místo na backing device nevyvolá zápis do cache, data jdou přímo na backing device a teprve když se na jedno místo zapisuje víckrát, dm-cache se rozhodne daný blok cachovat. Plus sekvenční zápisy úplně ignoruje. Nějaká štelovátka tam jsou. Teď zkouším, jak se u toho sql benchmarku projeví menší bloky pro cache. Zatím to vypadá, že menší blok = (v tomhle případě) větší výkon. Doběhně to až zítra, tak můžu zkusit vynutit, aby přes dm-cache šly všechny zápisy, co to udělá. I když je samozřejmě otázka, jestli v reálném provozu je takové nastavení lepší - přece jenom to sice urychlí zápisy, ale taky to agresivněji vytěsňuje data, což zpomaluje čtení. I když... čtení zas není takový problém, od toho jsou diskové cache v RAM...
Na co jsme možná oba narazili, je fakt, že dm-cache se nesnaží fungovat jako cache pro všechno - v tom blogu je to dobře vysvětlené, že má zrychlovat přístup k místům, se kterými se intenzivně pracuje. Proto taky jeden zápis na nějaké místo na backing device nevyvolá zápis do cache, data jdou přímo na backing device a teprve když se na jedno místo zapisuje víckrát, dm-cache se rozhodne daný blok cachovat. Plus sekvenční zápisy úplně ignoruje.Tak tohle by mě zajímalo - v jaké situaci může nastat stav, kdy se opakovaně mnohokrát zapisuje na stejné místo? Disky hodně vytěžují třeba databáze, ale např. u multigeneračních systémů (jako třeba Postgres nebo Firebird) se i při přepisu zapisuje na nové místo a původní se jen označí jako uvolněné. Což koneckonců bude nejspíš i případ jakékoli činnosti na COW filesystemech. Co jinak? Podle mě se tímhle přístupem musí dost zužovat pole využití, ne?
Disky hodně vytěžují třeba databáze, ale např. u multigeneračních systémů (jako třeba Postgres nebo Firebird) se i při přepisu zapisuje na nové místo a původní se jen označí jako uvolněné.Možná to nové místo není (z pohledu polohy na disku) úplně nové? Co mi běží ten benchmark, tak zrovna dělá insert into do innodb tabulky a poměr bloků zapsaných do cache a na disk je cca 10:1 (s write_promote_adjustment 2, tj. - jestli dobře chápu - do cache se ukládají bloky, kam se zapisovalo 2 a víckrát)
se i při přepisu zapisuje na nové místo a původní se jen označí jako uvolněné
To není úplně celá pravda. PG může provést zápis na řádek, který byl uvolněn, aniž by mezitím musel provést vacuum. Takže v případě, že dělám update jednoho záznamu pořád dokola, tak ten update může přepisovat jen dva řádky v datovém souboru na disku a může se stát, že oba budu v jedné 8kiB stránce. Takže pro disk se budou měnit jen dva 4kiB sektory (+ samozřejmě transakční log).
Takže ssd cache to vůbec nemusí po každém zapisu commitovat až na hdd, ale jednou za čas tam stačí poslat ty dva 4kiB bloky (které se mezitím na tu cache poslaly nesčetně krát).
Což koneckonců bude nejspíš i případ jakékoli činnosti na COW filesystemech
Netudoval jsem nijak detailně vnitřnosti BTRFS, ale divil bych se, kdyby ten alokátor opravdu po každé změně na COW zvolil úplně jiný blok. Naopak bych čekal, že pokud může (pokud na ten starý blok nevede odkaz odjinud), tak bude stejně jako ta DB prohazovat nějaké dva.
Já si to předtím interpretoval tak, že blbne detekce sekvenčních zápisůTo mě napadlo taky, že se do toho motá - tak jsem zvedl sequential_threshold (počet spojitých I/O potřebných pro to, aby se přenos považoval za sekvenční) z původních 512 na 65536, což by se jen tak stát nemělo. Žádná změna.
Hlavně by mě zajímalo, jestli to je bug, nebo nějaká sofistikovaná vlastnost.Jo, to je nás víc, ale koho se zeptat... U device mapperu je to vždycky stejné - ať už se člověk pokusí využít cokoliv, začne si velice brzo připadat, že je to nějaká obskurní vlastnost, kterou na webu popisuje akorát Red Hat a jeden blogger s Ubuntu.
/sys/block/bcacheX/bcache/writeback_percent
.
Mám pocit, že u dm-cache taky nějaké takovéhle rozdělení fungovalo.
My jsme driv @vpsFree pouzivali Flashcache, ale oproti ZFS a jeho schopnostem pouzivat SSD (L2ARC, ZIL) to stejne moc k nicemu nebylo. On totiz nejvetsim zabijakem u nas byl random write, ktery Flashcache, bcache i dm-cache akorat odkladaji, tomu seekovani se stejne neda vyhnout. Oproti tomu se ZFS se na SSD odplivava jenom neco jako "zurnal" a vsechny ostatni write - diky CoW designu ZFS - jsou linearni asynchronni zapisy.
I kdyz pouziti Flashcache znatelne bylo, porad to nestacilo - obzvlast, kdyz nad tim jede nekolik (desitek) databazi, ktere syncuji jak o zivot.
Flashcache, bcache i dm-cache akorat odkladaji, tomu seekovani se stejne neda vyhnout.Tady by mě zajímalo, jak moc ty implementace cache umí sesbírat jednotlivé malé zápisy a dělat z nich větší. Tím by se seekování dost omezilo.
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.