Organizace Free Software Foundation Europe u příležitosti včerejšího Dne Ady Lovelace vydala pod licencí CC BY-SA (Uveďte původ - Zachovejte licenci) půlhodinový animovaný film Ada & Zangemann - Příběh softwaru, skateboardů a malinové zmrzliny vycházející ze stejnojmenné knížky (online verze ve francouzštině).
Byla vydána nová verze 1.11.0 dynamického programovacího jazyka Julia (Wikipedie) určeného zejména pro vědecké výpočty. Přehled novinek v příspěvku na blogu a v poznámkách k vydání. Aktualizována byla také dokumentace. S vydáním verze 1.11 se předchozí verze 1.10 stala novou LTS verzí nahrazující verzi 1.6.
Byla vydána nová verze 6.8 živé linuxové distribuce Tails (The Amnesic Incognito Live System), jež klade důraz na ochranu soukromí uživatelů a anonymitu. Přehled změn v příslušném seznamu. Tor Browser byl povýšen na verzi 13.5.6.
Byla vydána nová stabilní verze 6.8 (YouTube) multiplatformního frameworku a GUI toolkitu Qt. Podrobný přehled novinek v poznámkách k vydání. Jedná se o LTS verzi. Pro komerční uživatele byla prodloužena podpora ze 3 na 5 let.
Desktopové prostředí KDE Plasma bylo vydáno ve verzi 6.2 (Mastodon, 𝕏). Přehled novinek i s videi a se snímky obrazovky v oficiálním oznámení. Podrobný přehled v seznamu změn.
Je druhé úterý v říjnu a tedy všem čtenářkám AbcLinuxu vše nejlepší k dnešnímu Dni Ady Lovelace (Ada Lovelace Day), tj. oslavy žen zabývajících se přírodními vědami, technologiemi, inženýrstvím a matematikou (STEM).
Byla vydána nová verze 2.47.0 distribuovaného systému správy verzí Git. Přispělo 83 vývojářů, z toho 28 nových. Přehled novinek v příspěvku na blogu GitHubu a v poznámkách k vydání.
Bylo vydáno OpenBSD 7.6. Opět bez písničky.
Programovací jazyk Python byl vydán v nové major verzi 3.13.0. Podrobný přehled novinek v changelogu.
Lze získat roota pouze se zapalovačem? Ano, lze.
#!/sbin/runscript extra_started_commands="disable_cache" TEMPFILE="$(mktemp)" trap "do_clean" EXIT depend() { use dmeventd before checkfs fsck after dmeventd modules device-mapper lvm localmount } do_clean() { [ -f "${TEMPFILE}" ] && rm -f "${TEMPFILE}" } get_uuid() { local dev="${1}" if [ ! -e "${dev}" ]; then eerror "Nebylo urceno platne blokove zarizeni." return 1 fi # Zjisteni UUID zarizeni /sbin/bcache-super-show "${dev}" | grep dev.uuid | awk '{print $2}' > "${TEMPFILE}" x="${?}" [ "${x}" != "0" ] && return "${x}" local uuid="$(cat ${TEMPFILE})" if [ -z "${uuid}" ]; then eerror "Nepodarilo se nacist ID zarizeni." return 1 fi # Zjisteni UUID bcache /sbin/bcache-super-show "${dev}" | grep cset.uuid | awk '{print $2}' > "${TEMPFILE}" x="${?}" [ "${x}" != "0" ] && return "${x}" local cset="$(cat ${TEMPFILE})" if [ -z "${cset}" ]; then eerror "Nepodarilo se nacist ID bcache." return 1 fi # Nacteni typu zarizeni (zalohovane nebo cache) /sbin/bcache-super-show "${dev}" | grep sb.version | awk '{print $2}' > "${TEMPFILE}" x="${?}" [ "${x}" != "0" ] && return "${x}" local sbver="$(cat ${TEMPFILE})" if [ -z "${sbver}" ]; then eerror "Nepodarilo se nacist typ zarizeni ${dev}." return 1 fi # Test, jestli nejde o detachovane zarizeni if [ "${sbver}" == "1" ]; then /sbin/bcache-super-show "${dev}" | grep dev.data.cache_state | awk '{print $2}' > "${TEMPFILE}" x="${?}" [ "${x}" != "0" ] && return "${x}" local state="$(cat ${TEMPFILE})" if [ -z "${state}" ]; then eerror "Nepodarilo se nacist status zalohovaneho zarizeni." return 1 fi fi UUID=${uuid} CSET=${cset} DETACHED=0 [ "${sbver}" == "1" ] && [ "${state}" == "0" ] && DETACHED=1 return 0 } get_dev() { local dev="${1}" lsblk -o NAME -i "${1}" -n -p -l | egrep '/dev/bcache[0-9]+' > "${TEMPFILE}" x="${?}" [ "${x}" != "0" ] && return "${x}" local devname="$(cat ${TEMPFILE})" [ -z "${devname}" ] && return 1 local devname="${devname##*/}" DEVNAME="${devname}" return 0 } do_start() { local dev="${1}" local cache_dev="${2}" local mode="${3}" get_dev "${dev}" x=${?} [ "${x}" != "0" ] && echo "${dev}" > /sys/fs/bcache/register get_uuid "${dev}" x="${?}"; [ "${x}" != "0" ] && return "${x}" local dev_uuid="${UUID}" local cset="${CSET}" local detached="${DETACHED}" get_dev "${dev}" "${cset}" x="${?}"; [ "${x}" != "0" ] && return "${x}" local devname="${DEVNAME}" if [ "${cache_dev}" != "none" ]; then get_uuid "${cache_dev}" [ ! -d "/sys/fs/bcache/${CSET}" ] && echo "${cache_dev}" > /sys/fs/bcache/register get_uuid "${cache_dev}" x="${?}"; [ "${x}" != "0" ] && return "${x}" local cache_uuid="${UUID}" if [ "${detached}" != "1" ] && [ "${cset}" != "00000000-0000-0000-0000-000000000000" ] ; then if [ "${cset}" != "${CSET}" ]; then eerror "Zarizeni nejsou sparovana:" eerror " ${dev}" eerror " ${cache_dev}" return 1 fi else echo ${CSET} > /sys/block/${DEVNAME}/bcache/attach fi fi # Zmena rezimu cachovani [ -n "${mode}" ] && echo "${mode}" > /sys/block/${devname}/bcache/cache_mode return 0 } do_stop() { local dev="${1}" local cache_dev="${2}" get_uuid "${dev}" x="${?}"; [ "${x}" != "0" ] && return "${x}" local cset="${CSET}" get_dev "${dev}" x="${?}"; [ "${x}" != "0" ] && return "${x}" local devname="${DEVNAME}" if [ -d /sys/block/${devname}/bcache/ ]; then echo 1 > /sys/block/${devname}/bcache/stop x="${?}"; [ "${x}" != "0" ] && return "${x}" fi return 0 } start() { ebegin "Nahazuji bcache:" DEVCNT=${#bkdev[@]} if [ "${DEVCNT}" != "${#cachedev[@]}" ]; then eerror "Chyba: nesouhlasi pocet zalohujicich a zalohovanych zarizeni" eend 1 return 1 fi local scs=1 for(( i=0; i<${DEVCNT}; i++ )); do local bd="${bkdev[$i]}" local cd="${cachedev[$i]}" local mode="${mode[$i]}" einfo "Nahazuji zalohovane rozhrani '${bd}'." do_start "${bd}" "${cd}" "${mode}" if [ "$?" != "0" ]; then ewarn "Pri nahazovani nekde nastala chyba." else local scs=0 fi done eend ${scs} } stop() { ebegin "Shazuji bcache:" local scs=1 DEVCNT=${#bkdev[@]} for(( i=0; i<${DEVCNT}; i++ )); do local bd="${bkdev[$i]}" local cd="${cachedev[$i]}" einfo "Shazuji zalohovane rozhrani '${bd}'." do_stop "${bd}" "${cd}" if [ "$?" != "0" ]; then ewarn "Pri shazovani nekde nastala chyba." else local scs=0 fi done eend ${scs} } disable_cache() { ebegin "Vypinam cachovani u bcache" local scs=0 DEVCNT=${#bkdev[@]} for(( i=0; i<${DEVCNT}; i++ )); do local bd="${bkdev[$i]}" einfo "Vypinam cachovani u '${bd}'." get_dev "${bd}" x="${?}"; [ "${x}" != "0" ] && ewarn "Pri zmene nastaveni nekde nastala chyba." local devname="${DEVNAME}" echo none > /sys/block/${devname}/bcache/cache_mode done eend ${scs} }Skript používá konfigurační soubor /etc/conf.d/bcache, v mém případě je jeho obsah následující:
bkdev=(/dev/vg/kvm.kerio-disk1) cachedev=(/dev/md10) mode=(writeback)Pokud máte více cachovaných disků, je možné do závorek zapsat více blokových zařízení (a módů) oddělených mezerou.
PRE_START_CSET
a PRE_START_UUID
vyčtete z výstupu 'bcache-super-show /dev/cachovane/zarizeni
', jedná se o řádky 'cset.uuid
' a 'dev.uuid
' v uvedeném pořadí. Zároveň mi skript i zmenšuje hodnotu hranice pro detekci sekvenčního zápisu v souboru '/sys/block/${devname}/bcache/sequential_cutoff
' na 64kB - sekvenční zápisy nad tuto velikost jsou potom zapisovány přímo na rotační disk, čímž se snižuje opotřebení SSD. 64kB pro potřeby Keria v mém nasazení v pohodě stačí, výchozí 4MB jsou v tomto případě zbytečné.
#!/bin/bash # Oprava chyby, pri ktere udev po ukonceni KVM (nebo proste jen po udevadm trigger) # smaze cely obsah /dev/bcache PRE_START_CSET=e2dc102d-9b5c-4e22-b2c4-b6576479f7c7 PRE_START_UUID=c64c2da1-5e83-43e0-b042-0a7f468396c4 PRE_START_TEMPFILE="$(mktemp)" PRE_START_TMPVAR="" pre_start_clear() { [ -f "${PRE_START_TEMPFILE}" ] && rm -f "${PRE_START_TEMPFILE}" } pre_start_check_dev() { local dev="${1}" [ ! -L "${dev}/dev" ] && return 1 while read pre_start_bc_slave_dev; do /usr/bin/readlink -f "${pre_start_bc_slave_dev}" > "${PRE_START_TEMPFILE}" local x="${?}" [ "${x}" != "0" ] && return "${x}" local devname="$(cat ${PRE_START_TEMPFILE})" local devname="${devname##*/}" [ -n "$(/sbin/bcache-super-show /dev/${devname} 2>&1 | grep -i ${PRE_START_UUID})" ] \ && return 0 done < <(find "${dev}/dev/slaves" -maxdepth 1 -type l ) return 1 } pre_start_update_bcache() { local bdev= for pre_start_x in /sys/fs/bcache/${PRE_START_CSET}/bdev*; do pre_start_check_dev "${pre_start_x}" if [ "$?" == "0" ]; then local bdev="${pre_start_x}" break fi done [ -z "${bdev}" ] && return 1 /usr/bin/readlink -f "${pre_start_x}/dev" > "${PRE_START_TEMPFILE}" local x="${?}" [ "${x}" != "0" ] && return "${x}" local devname="$(cat ${PRE_START_TEMPFILE})" local devname="${devname##*/}" echo 64k > /sys/block/${devname}/bcache/sequential_cutoff [ -d /dev/bcache/by-uuid ] && [ -e /dev/bcache/by-uuid/${PRE_START_UUID} ] && return 0 [ ! -d /dev/bcache ] && mkdir /dev/bcache [ ! -d /dev/bcache/by-uuid ] && mkdir /dev/bcache/by-uuid ln -s "../../${devname}" /dev/bcache/by-uuid/${PRE_START_UUID} } pre_start_update_bcache pre_start_clear
[ 2138.360002] INFO: rcu_sched self-detected stall on CPU { 0} (t=21000 jiffies g=23827 c=23826 q=2794) [ 2138.360002] Task dump for CPU 0: [ 2138.360002] bcache_gc R running task 0 3010 2 0x00080008 [ 2138.360002] 0000000000000001 ffffffff81877100 ffffffff81113abf 0000000000005d13 [ 2138.360002] ffff880272411d80 ffffffff81877100 ffffffff81877100 ffffffff818bbb08 [ 2138.360002] ffffffff81116c68 001dcd6500000000 ffff880272411140 0000000000000096 [ 2138.360002] Call Trace: [ 2138.360002] <IRQ> [<ffffffff81113abf>] ? rcu_dump_cpu_stacks+0x7f/0xc0 [ 2138.360002] [<ffffffff81116c68>] ? rcu_check_callbacks+0x368/0x5a0 [ 2138.360002] [<ffffffff81127050>] ? tick_sched_handle.isra.18+0x30/0x30 [ 2138.360002] [<ffffffff811190b1>] ? update_process_times+0x31/0x60 [ 2138.360002] [<ffffffff81127050>] ? tick_sched_handle.isra.18+0x30/0x30 [ 2138.360002] [<ffffffff81127083>] ? tick_sched_timer+0x33/0x60 [ 2138.360002] [<ffffffff81119695>] ? __run_hrtimer.isra.34+0x45/0xc0 [ 2138.360002] [<ffffffff81119c67>] ? hrtimer_interrupt+0xd7/0x230 [ 2138.360002] [<ffffffff8102e6f5>] ? smp_apic_timer_interrupt+0x35/0x50 [ 2138.360002] [<ffffffff816622bd>] ? apic_timer_interrupt+0x6d/0x80 [ 2138.360002] <EOI> [>ffffffff81523ea5>] ? bch_extent_bad+0xf5/0x1b0 [ 2138.360002] [<ffffffff81523ddc>] ? bch_extent_bad+0x2c/0x1b0 [ 2138.360002] [<ffffffff8151c2b0>] ? bch_ptr_invalid+0x10/0x10 [ 2138.360002] [<ffffffff8151c0d1>] ? bch_btree_iter_next_filter+0x21/0x50 [ 2138.360002] [<ffffffff8151ca10>] ? btree_gc_count_keys+0x40/0x50 [ 2138.360002] [<ffffffff815212cd>] ? btree_gc_recurse+0x18d/0x2f0 [ 2138.360002] [<ffffffff8151c0dd>] ? bch_btree_iter_next_filter+0x2d/0x50 [ 2138.360002] [<ffffffff8151d4b4>] ? btree_gc_mark_node+0x54/0x220 [ 2138.360002] [<ffffffff8151d4b4>] ? btree_gc_mark_node+0x54/0x220 [ 2138.360002] [<ffffffff815219aa>] ? bch_btree_gc+0x3ea/0x510 [ 2138.360002] [<ffffffff81105360>] ? wait_woken+0x80/0x80 [ 2138.360002] [<ffffffff81521b00>] ? bch_gc_thread+0x30/0x110 [ 2138.360002] [<ffffffff81521ad0>] ? bch_btree_gc+0x510/0x510 [ 2138.360002] [<ffffffff810ecedc>] ? kthread+0xbc/0xe0 [ 2138.360002] [<ffffffff810ece20>] ? kthread_create_on_node+0x170/0x170 [ 2138.360002] [<ffffffff8166137c>] ? ret_from_fork+0x7c/0xb0 [ 2138.360002] [<ffffffff810ece20>] ? kthread_create_on_node+0x170/0x170Odstřelil jsem tedy to co nešlo vypnout korektně, odmountoval to co se nechalo (ne že by toho bylo moc, i pitomý sync se kousal), restartoval server a pokorně se vrátil ke kernelu 3.12. Následující pátrání mě pak dovedlo ke zjištění, že problém se projevuje s jádrem 3.14 a vyšším (jak s 3.13 nevím, gentoo-sources v téhle verzi nebyly k dispozici) a jde vlastně o dva problémy. Jednak registrace jakéhokoli cachujícího zařízení (čili cache na SSDčku) zvýší load o 1, jednak minimálně ve writeback režimu dochází k výše uvedeným deadlockům. Ten zvýšený load se po odregistrování zařízení nesníží, naopak po opětovné registraci se zvýší znovu o jedničku. Google mi popis této chyby našel, řešilo se to jak přímo na mailing listu tvůrců bcache, tak např. na fóru Archu. Bohužel vždy to nějak vyšumělo do ztracena. Každopádně jsem dospěl k závěru, že se o tom ví a snad se to řeší a bugreport jsem nikam nezadával - už proto, že moje samo domo angličtina je spíše read-only, takže nerad kamkoli píšu. Když jsem ale tento víkend zjistil, že problém trvá i v jádře 3.19, došla mi trpělivost a oznámil jsem to v bugzille Gentoo Linuxu (netušil jsem, kam jinam to psát). Výsledkem byl odkaz na tento patch, který podle všeho řeší alespoň problém s vytuháváním zápisů (respektive přežilo to víc než den opakovaných benchmarků pomocí programu fio, zatímco neopatchované jádro se obvykle kouslo po několika desítkách minut). Problém s loadem ale stále trvá, což je pro mě známkou, že tam je nadále někde něco shnilého a tak raději stále zůstávám u bezproblémového kernelu 3.12.
Tiskni Sdílej:
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.