O loʻu faʻatinoina o se mama mama i NOR flash

prehistory

O lo'o i ai masini fa'atau oloa oa tatou lava mamanu. I totonu o le Raspberry Pi ma nisi uaea i luga o se isi laupapa. O se tagata e taliaina tupe, o se tagata e taliaina pili, o se faletupe e fesoʻotaʻi ... O mea uma e pulea e se polokalama tusitusia e le tagata lava ia. O le talafaasolopito atoa o galuega ua tusia i se ogalaau i luga o le flash drive (MicroSD), lea e tuʻuina atu e ala i le Initaneti (faʻaaogaina o se modem USB) i le 'auʻaunaga, lea e teuina i totonu o se faʻamaumauga. O faʻamatalaga faʻatau e utaina i le 1c, o loʻo i ai foi se upega tafaʻilagi faigofie mo le mataʻituina, ma isi.

O lona uiga, e taua tele le tusi talaaga - mo le faʻamatalaga (tupe maua, faʻatau, ma isi), mataʻituina (ituaiga faʻaletonu uma ma isi tulaga malosi); O lenei, atonu e fai mai se tasi, o faʻamatalaga uma ia matou te maua e uiga i lenei masini.

faafitauli

O ta'avale afi e fa'aalia i latou lava o ni masini e le fa'atuatuaina. Latou te toilalo i taimi masani mata'utia. Ole mea lea e o'o atu ai i le taimi ole masini ma (pe a iai se mafua'aga e le mafai ai ona fa'aliliuina le ogalaau i luga ole laiga) ile leiloa o fa'amaumauga.

E le o le mea muamua lea na tupu i le faʻaaogaina o masini uila, ae leʻi i ai se isi poloketi ma sili atu ma le selau masini, lea na teuina ai le mekasini i luga o USB flash drive, sa i ai foʻi faʻafitauli i le faʻamaoni, o nisi taimi o le numera o i latou na le manuia. e tasi le masina i le sefulu. Na matou faʻataʻitaʻiina taʻavale uila eseese, e aofia ai faʻailoga ma SLC manatua, ma o nisi faʻataʻitaʻiga e sili atu le faʻatuatuaina nai lo isi, ae o le suia o le uila e leʻi foia ai le faʻafitauli.

Faʻamolemole faʻamolemole! Faitau umi! Afai e te le fiafia i le "aisea", ae naʻo le "faʻafefea", e mafai ona e alu saʻo I le faaiuga tusiga.

faaiuga

O le mea muamua e oʻo mai i lou mafaufau o le: lafoai MicroSD, faʻapipiʻi, mo se faʻataʻitaʻiga, se SSD, ma taʻavale mai ai. E mafai, masalo, ae e taugata tele, ma e le faʻatuatuaina (faʻaopoopoina le USB-SATA adapter; faʻamaumauga faʻaletonu mo le paketi SSD e le faʻamalosia foi).

O le USB HDD e le foliga mai o se fofo sili ona manaia.

O le mea lea, na matou oʻo mai i lenei filifiliga: tuʻu le taʻavale mai le MicroSD, ae faʻaaoga i le faitau-naʻo le faʻaogaina, ma teu le faʻamaumauga o galuega (ma isi faʻamatalaga tulaga ese i se vaega faapitoa o meafaigaluega - numera serial, calibrations sensor, ma isi) i se isi mea. .

O le autu o le faitau-naʻo FS mo raspberries ua uma ona suʻesuʻeina i totonu ma fafo, o le a ou le nofo i faʻamatalaga faʻatinoga i lenei tusiga (ae afai e i ai se fiafia, atonu o le a ou tusia se tamai tusiga i luga o lenei autu). Pau lava le itu ou te fia matauina o le mai le poto masani a le tagata lava ia ma mai iloiloga a i latou ua uma ona faʻatinoina, o loʻo i ai se manuia i le faʻamaoni. Ioe, e le mafai ona faʻaumatia atoa le malepelepe, ae o le faʻaitiitia o le tele o taimi e mafai lava. Ma o kata ua amata ona tuʻufaʻatasia, lea e faʻafaigofie ai le sui mo tagata faigaluega.

Meafaigaluega

E leai se masalosalo faapitoa e uiga i le filifiliga o le ituaiga manatua - NOR Flash.
finauga:

  • fesoʻotaʻiga faigofie (e masani lava o le pasi SPI, lea ua uma ona e faʻaaogaina, o lea e leai se faʻafitauli faʻapitoa e vaʻaia);
  • tau faavalevalea;
  • faʻasologa faʻatautaia masani (o le faʻatinoga o loʻo i totonu o le Linux kernel, pe afai e te manaʻo ai, e mafai ona e ave se isi vaega lona tolu, o loʻo i ai foi, pe tusi foi oe lava, o le mea e lelei ai e faigofie mea uma);
  • faatuatuaina ma punaoa:
    mai se fa'amaumauga masani: fa'amaumauga o lo'o teuina mo le 20 tausaga, 100000 solo solo mo poloka ta'itasi;
    mai isi vaega fa'apogai: matua maualalo BER, postulates le mana'omia mo tulafono fa'asa'oga sese (o nisi galuega e mafaufau i le ECC mo NOR, ae masani lava o le uiga o le MLC NOR; e tupu foi lea).

Se'i o tatou fuatia mea e mana'omia mo le voluma ma punaoa.

Ou te manaʻo ia faʻamaonia faʻamaumauga e teu mo ni nai aso. E manaʻomia lenei mea ina ia i ai soʻo se faʻafitauli tau fesoʻotaʻiga, e le o leiloa le tala faʻasolopito. O le a tatou taulai atu i le 5 aso, i lenei vaitaimi (tusa lava ma le amanaia o faaiuga o vaiaso ma aso malolo) e mafai ona foia le faafitauli.

O loʻo matou aoina nei pe tusa ma le 100kb ogalaau i le aso (3-4 afe faʻamaumauga), ae faasolosolo malie le faʻatupulaia o lenei fuainumera - faʻateleina faʻamatalaga, faʻaopoopo mea fou. Ma le isi, o nisi taimi e paʻu (o nisi masini e amata spamming i mea sese, mo se faʻataʻitaʻiga). O le a matou fuafuaina mo le 10 afe faʻamaumauga 100 paita taʻitasi - megabytes i le aso.

I le aofaʻi, 5MB o faʻamaumauga mama (lelei faʻapipiʻi) e sau i fafo. E sili atu ia i latou (tau fa'atatau) 1MB o faʻamatalaga tautua.

O lona uiga, matou te manaʻomia se vaʻa 8MB pe a matou le faʻaogaina le faʻamalosi, poʻo le 4MB pe a matou faʻaaogaina. Ole numera moni mo lenei ituaiga o manatua.

Ae mo le punaoa: afai tatou te fuafua o le manatua atoa o le a toe tusia e le sili atu ma le tasi i le 5 aso, ona sili atu lea i le 10 tausaga o le tautua tatou te maua le itiiti ifo ma le afe o le toe tusia o taamilosaga.
Sei ou faamanatu atu ia te oe e folafola mai e le kamupani gaosi le selau afe.

O sina mea itiiti e uiga i NOR vs NAND

I aso nei, o le mea moni, o le NAND manatua e sili atu ona lauiloa, ae ou te le faʻaaogaina mo lenei poloketi: NAND, e le pei o NOR, e manaʻomia le faʻaogaina o tulafono faʻasaʻo sese, laulau o poloka leaga, ma isi, faʻapea foʻi vae o NAND chips e masani ona sili atu.

O faʻaletonu ole NOR e aofia ai:

  • laʻititi laʻititi (ma, e tusa ai, maualuga le tau ile megabyte);
  • maualalo le saoasaoa o fesoʻotaʻiga (tele ona o le mea moni o loʻo faʻaogaina se fesoʻotaʻiga faʻasologa, e masani lava SPI poʻo I2C);
  • tape lemu (fa'alagolago i le tele o poloka, e mana'omia mai se vaega o le sekone i ni nai sekone).

E foliga mai e leai se mea taua mo i matou, o lea matou te faaauau ai.

Afai e manaia faʻamatalaga, ua filifilia le microcircuit i25df321a (ae ui i lea, e le taua lenei mea, e tele analogues i luga o le maketi e fetaui lelei i le pinout ma le faʻatonuga; e tusa lava pe tatou te mananaʻo e faʻapipiʻi se microcircuit mai se isi mea gaosi oloa ma / poʻo se isi lapoʻa, o le a aoga mea uma e aunoa ma le suia o le code).

Ou te faʻaogaina le avetaʻavale na fausia i totonu o le fatu Linux; i luga o le Raspberry, faʻafetai i le masini faʻapipiʻi laʻau lagolago, e matua faigofie lava mea uma - e te manaʻomia le tuʻuina o le faʻapipiʻi faʻapipiʻi i /boot/overlays ma fai sina suiga /boot/config.txt.

Faataitaiga dts faila

Ina ia faʻamaoni, ou te le o mautinoa o loʻo tusia e aunoa ma ni mea sese, ae e aoga.

/*
 * Device tree overlay for at25 at spi0.1
 */

/dts-v1/;
/plugin/;

/ {
    compatible = "brcm,bcm2835", "brcm,bcm2836", "brcm,bcm2708", "brcm,bcm2709"; 

    /* disable spi-dev for spi0.1 */
    fragment@0 {
        target = <&spi0>;
        __overlay__ {
            status = "okay";
            spidev@1{
                status = "disabled";
            };
        };
    };

    /* the spi config of the at25 */
    fragment@1 {
        target = <&spi0>;
        __overlay__ {
            #address-cells = <1>;
            #size-cells = <0>;
            flash: m25p80@1 {
                    compatible = "atmel,at25df321a";
                    reg = <1>;
                    spi-max-frequency = <50000000>;

                    /* default to false:
                    m25p,fast-read ;
                    */
            };
        };
    };

    __overrides__ {
        spimaxfrequency = <&flash>,"spi-max-frequency:0";
        fastread = <&flash>,"m25p,fast-read?";
    };
};

Ma le isi laina i le config.txt

dtoverlay=at25:spimaxfrequency=50000000

O le a ou aveese le faʻamatalaga o le faʻafesoʻotaʻi o le pu i le Raspberry Pi. I le tasi itu, e le o aʻu o se tagata tomai faapitoa i mea tau eletise, i le isi itu, o mea uma iinei e faʻamaonia e oʻo lava ia te aʻu: o le microcircuit e na o le 8 vae, lea tatou te manaʻomia ai le eleele, malosi, SPI (CS, SI, SO, SCK). ); o laʻasaga e tutusa ma le Raspberry Pi, e leai se faʻaopoopoga faʻaopoopo e manaʻomia - naʻo le faʻafesoʻotaʻi o pine 6 ua faʻaalia.

Fausiaina o le faʻafitauli

E pei ona masani ai, o le faʻamatalaga faʻafitauli e alu i le tele o faʻamatalaga, ma e foliga mai ia te aʻu ua oʻo i le taimi mo le isi. O lea ia tatou taofi, tuʻu faʻatasi mea ua uma ona tusia, ma faʻamalamalama faʻamatalaga o loʻo tumau i le ata lafoia.

O lea la, ua matou filifili o le a teuina le ogalaau i le SPI NOR Flash.

O le a le NOR Flash mo i latou e le iloa?

Ole manatua ole mea lea e mafai ona e faia ai ni gaioiga se tolu:

  1. Faitauga:
    Le faitauga masani: matou te lafoina le tuatusi ma faitau le tele o paita matou te manaʻomia;
  2. Faamaumauga:
    O le tusitusi i le NOR flash e foliga mai o se mea masani, ae tasi lava lona uiga: e mafai ona e suia naʻo le 1 i le 0, ae le o le isi itu. Mo se faʻataʻitaʻiga, afai e i ai le 0x55 i totonu o se potu manatua, a uma ona tusia le 0x0f i ai, 0x05 ua uma ona teuina iina (silasila i le laulau i lalo);
  3. Tape:
    O le mea moni, e tatau ona mafai ona tatou faia le faʻafeagai o le gaioiga - suia le 0 i le 1, o le mea tonu lea e faʻaoga ai le tapeina. E le pei o le lua muamua, e le faʻaogaina i bytes, ae faʻatasi ai ma poloka (o le pito maualalo poloka poloka i le pu ua filifilia e 4kb). Tape e faʻaumatia le poloka atoa ma naʻo le pau lea o le auala e sui ai le 0 i le 1. O le mea lea, pe a galue i le flash memory, e masani ona e faʻaogaina faʻamaumauga faʻamaumauga i le tapeina poloka tuaoi.
    Pu'eina ile NOR Flash:

Fa'amatalaga fa'alua

Sa faapena
01010101

Faamauina
00001111

Ua avea
00000101

O le ogalaau lava ia o lo'o fa'atusalia ai se fa'asologa o fa'amaumauga e fesuisuia'i le umi. O le umi masani o se fa'amaumauga e tusa ma le 30 paita (e ui o fa'amaumauga e tele kilobytes le umi e tupu i nisi taimi). I lenei tulaga, matou te galulue faʻatasi ma i latou e pei o se seti o bytes, ae, afai e te fiafia i ai, CBOR faʻaaogaina i totonu o faʻamaumauga.

I le faaopoopo atu i le ogalaau, tatou te manaʻomia le teuina o faʻamatalaga "faʻatulagaina", faʻafouina uma ae le o: o se ID masini, faʻavasegaina o masini, o se fuʻa "faʻaletonu le tumau", ma isi.
O lenei faʻamatalaga o se seti o faʻamaumauga autu-taua, o loʻo teuina foi i le CBOR. E le tele a matou faʻamatalaga nei (o ni nai kilobytes le tele), ma e seasea faʻafouina.
I le mea o lo'o mulimuli mai o le a tatou ta'ua ai le context.

Afai tatou te manatua le mea na amata ai lenei tusiga, e taua tele le faʻamautinoaina o le teuina o faʻamaumauga faʻatuatuaina ma, pe a mafai, faʻaauau pea le faʻagaioiga e tusa lava pe faʻaletonu meafaigaluega / faʻamatalaga faʻaletonu.

O ā puna o faafitauli e mafai ona iloiloina?

  • Pepe le Malosi i le taimi o galuega tusi/ tape. E mai le vaega lea o le "e leai se togafiti e faasaga i crowbar."
    Faʻamatalaga mai talatalanoaga luga o le stackexchange: pe a tape le mana aʻo galue ma moli, tape uma (seti i le 1) ma tusi (seti i le 0) taʻitaʻia i amioga e le faʻamalamalamaina: faʻamaumauga e mafai ona tusia, tusia vaega (fai mai, matou fesiitai 10 bytes/80 bits , ae le na o le 45 bits e mafai ona tusia), e mafai foi ona i ai nisi o vaega o le a i ai i se tulaga "avatu" (faitau e mafai ona maua uma le 0 ma le 1);
  • O mea sese i le flash memory lava ia.
    BER, e ui ina maualalo tele, e le mafai ona tutusa ma le zero;
  • Fa'aletonu pasi
    O fa'amatalaga e tu'uina atu e ala i le SPI e le'o puipuia i so'o se auala, e mafai ona tupu fa'aletonu fa'atasi ma fa'atasi - leiloa po'o le fa'aofiina o fasi mea (lea e o'o atu ai i le tele o fa'amatalaga fa'asese);
  • Isi mea sese/faalavelave
    O mea sese i le code, Raspberry glitches, faʻalavelave mai fafo...

Ua ou faʻatulagaina manaʻoga, o le faʻataunuʻuina, i loʻu manatu, e manaʻomia e faʻamautinoa ai le faʻamaoni:

  • e tatau ona alu vave fa'amaumauga i le manatua vave, e le'o mafaufauina tusi tuai; - a tupu se mea sese, e tatau ona iloa ma fa'agasolo vave; - e tatau i le faiga, pe a mafai, toe fa'afo'i mai mea sese.
    (o se faʻataʻitaʻiga mai le olaga "faʻafefea ona le tatau", lea ou te manatu na feagai ma tagata uma: a maeʻa se faʻalavelave faʻafuaseʻi, o le faila faila e "gau" ma e le taʻavale le faiga faʻaoga)

Manatu, auala, manatunatuga

Ina ua amata ona ou mafaufau e uiga i lenei faafitauli, e tele manatu na oso mai i loʻu ulu, mo se faʻataʻitaʻiga:

  • fa'aoga fa'amauina fa'amaumauga;
  • faʻaoga faʻamatalaga faʻamatalaga atamai, mo se faʻataʻitaʻiga, teuina faʻamaumauga faʻamaufaʻailoga eseese mai faʻamaumauga lava ia, ina ia afai ei ai se mea sese i soʻo se faʻamaumauga, e mafai ona e faitau le isi vaega e aunoa ma ni faʻafitauli;
  • fa'aoga fasi fanua e pulea ai le mae'a o le pu'eina pe a tape le paoa;
  • teu tupe siaki mo mea uma;
  • fa'aaoga nisi ituaiga fa'ailoga e tete'e pisa.

O nisi o nei manatu na faʻaaogaina, ae o isi na filifili e lafoai. Tatou o i le faasologa.

Faʻamamaina faʻamaumauga

O mea na tutupu lava ia tatou te faamaumauina i totonu o le api talaaga e foliga tutusa ma toe fai ("totogiina se tupe siliva 5 ruble", "oomi le ki mo le tuuina atu o suiga", ...). O le mea lea, e tatau ona matua aoga le fa'amalosi.

O le faʻamalosi i luga o le ulu e le taua (o le matou gaioiga e matua malosi lava, e oʻo lava i le Pi muamua e tasi le autu ma le tele o le 700 MHz, o faʻataʻitaʻiga o loʻo i ai nei e tele cores ma le tele o le gigahertz), o le fesuiaiga o tupe ma le teuina e maualalo (tele. megabytes i le sekone), o le tele o faʻamaumauga e laʻititi. I se tulaga lautele, afai o le faʻamalosi e iai se aʻafiaga i le faʻatinoga, o le a naʻo le lelei. (matua le faitio, na o le taʻu atu). E le gata i lea, e leai se matou mea faʻapipiʻi moni, ae masani Linux - o le faʻatinoga e le manaʻomia ai le tele o taumafaiga (ua lava le naʻo le faʻafesoʻotaʻi o le faletusi ma faʻaoga le tele o galuega mai ai).

O se vaega o le ogalaau na ave mai se masini galue (1.7 MB, 70 afe faʻamaumauga) ma siaki muamua mo le faʻamalosi e faʻaaoga ai le gzip, lz4, lzop, bzip2, xz, zstd o loʻo maua i luga o le komepiuta.

  • gzip, xz, zstd na fa'aalia tali tutusa (40Kb).
    Na ou teʻi ona o le xz faʻalelei na faʻaalia iinei i le maualuga o le gzip poʻo le zstd;
  • lzip fa'atasi ai ma tulaga fa'aletonu na maua ai ni fa'ai'uga sili atu ona leaga;
  • lz4 ma lzop na faʻaalia le le lelei tele (150Kb);
  • bzip2 na fa'aalia ai se fa'ailoga lelei tele (18Kb).

O lea la, o faʻamaumauga e faʻapipiʻi lelei.
O lea (afai tatou te le maua ni faaletonu mataʻutia) o le ai ai le faʻamalosi! Ona o le tele o faʻamatalaga e mafai ona ofi i luga o le flash drive tutusa.

Seʻi o tatou mafaufau i mea lē lelei.

Fa'afitauli muamua: ua uma ona matou malilie e tatau ona alu vave fa'amaumauga uma e moli. E masani lava, e aoina e le archiver faʻamaumauga mai le faʻaogaina o le vaitafe seia oʻo ina filifili ua oʻo i le taimi e tusi ai i le faaiuga o le vaiaso. Matou te manaʻomia vave maua se poloka faʻapipiʻi o faʻamaumauga ma teu i totonu o mafaufauga e le faʻafefe.

E tolu auala ou te vaai ai:

  1. Fa'apipi'i fa'amaumauga ta'itasi e fa'aoga ai le fa'apipi'i lomifefiloi nai lo algorithms o lo'o talanoaina i luga.
    O se filifiliga galue atoatoa, ae ou te le fiafia i ai. Ina ia faʻamautinoa se tulaga sili atu pe itiiti ifo foi o le faʻamalosi, o le lomifefiloi e tatau ona "faʻatulagaina" i faʻamatalaga patino; soʻo se suiga o le a taʻitaʻia ai le maualuga o le faʻamalosi e pa'ū faʻafuaseʻi. Ioe, e mafai ona foia le faʻafitauli e ala i le fatuina o se lomiga fou o le lomifefiloi, ae o le tiga lea o le ulu - e manaʻomia ona matou teuina faʻamaumauga uma o le lomifefiloi; i fa'amatalaga ta'itasi e mana'omia ona ta'u mai po'o fea le fa'aliliuga o le lomifefiloi na fa'apipi'iina...
  2. Fa'apipi'i fa'amaumauga ta'itasi e fa'aaoga ai fa'asologa "malaga", ae tuto'atasi mai isi.
    O algorithms compression o loʻo iloiloina e le o fuafuaina e galulue faʻatasi ma faʻamaumauga o lenei lapopoa (sefulu o bytes), o le fua faʻatatau o le compression o le a manino lava e itiiti ifo i le 1 (o lona uiga, faʻateleina le tele o faʻamaumauga nai lo le faʻamalosi);
  3. Fai FLUSH pe a uma pu'e ta'itasi.
    Ole tele o faletusi fa'amalosi e iai le lagolago mo FLUSH. O se fa'atonuga lea (po'o se fa'amaufa'ailoga i le faiga fa'apipi'i), i le mauaina lea o le fa'amaumauga e fau ai se vaitafe compressed ina ia mafai ona fa'aoga e toe fa'afo'isia. uma fa'amaumauga e le'i fa'apipi'iina ua uma ona maua. O se mea faapena sync i faiga faila po o commit i sql.
    O le mea taua o le faʻaogaina o gaioiga faʻasolosolo mulimuli ane o le a mafai ona faʻaogaina le lomifefiloi faʻaputuina ma o le fua faʻatatau o le compression o le a le mafatia tele e pei o le lomiga muamua.

Ou te manatu e manino lava na ou filifilia le filifiliga lona tolu, seʻi o tatou vaʻai atili i ai.

Maua sili tusitusiga e uiga i FLUSH i le zlib.

Na ou faia se suʻega tulivae e faʻavae i luga o le tusiga, ave 70 afe faʻamaumauga ogalaau mai se masini moni, faʻatasi ai ma le lapopoa o le itulau 60Kb (O le a matou toe foʻi i le lapoʻa o itulau mulimuli ane) maua:

Fa'amatalaga muamua
Compression gzip -9 (leai FLUSH)
zlib ma le Z_PARTIAL_FLUSH
zlib ma Z_SYNC_FLUSH

Volume, KB
1692
40
352
604

I le tepa muamua, o le tau o loʻo tuʻuina mai e FLUSH e maualuga tele, ae o le mea moni e itiiti lava a tatou filifiliga - pe le faʻapipiʻi uma, pe faʻapipiʻi (ma matua lelei) ile FLUSH. E le tatau ona galo ia i tatou o loʻo i ai le 70 afe faʻamaumauga, o le redundancy na faʻalauiloaina e Z_PARTIAL_FLUSH e naʻo le 4-5 paita i le faʻamaumauga. Ma o le fua o le faʻamalosi na foliga mai e toetoe lava 5: 1, lea e sili atu nai lo se taunuuga lelei.

Atonu o se mea e ofo ai, ae o le Z_SYNC_FLUSH o se auala sili atu ona lelei e fai ai le FLUSH

A fa'aogaina le Z_SYNC_FLUSH, o le 4 paita mulimuli o fa'amatalaga ta'itasi o le a 0x00, 0x00, 0xff, 0xff. Ma afai tatou te iloa i latou, ona tatou le tau teuina lea, o lona uiga o le tele mulimuli e naʻo le 324Kb.

O le tusiga na ou faʻafesoʻotaʻi i ai o loʻo i ai se faʻamatalaga:

O lo'o fa'aopoopoina se poloka ituaiga 0 fou e iai mea gaogao.

O le ituaiga 0 poloka ma mea gaogao e aofia ai:

  • le ulutala poloka poloka tolu;
  • 0 i le 7 bits e tutusa ma le zero, e ausia ai le faʻaogaina o byte;
  • o le fa-paita fa'asologa 00 00 FF FF.

E pei ona faigofie ona e vaʻai, i le poloka mulimuli i luma o nei 4 bytes o loʻo i ai mai le 3 i le 10 zero bits. Ae ui i lea, o faʻataʻitaʻiga ua faʻaalia o loʻo i ai moni a itiiti ifo ma le 10 zero bits.

E foliga mai o ia poloka pupuu o faʻamatalaga e masani lava (i taimi uma?) Faʻailogaina e faʻaaoga ai se poloka o le ituaiga 1 (poloka tumau), lea e tatau ona faaiʻu i le 7 zero bits, e tuʻuina atu ai le aofaʻi o 10-17 faʻamaonia zero bits (ma o le a totoe. e leai se avanoa e tusa ma le 50%).

O lea la, i luga o faʻamatalaga suʻega, i le 100% o mataupu e tasi le zero byte i luma ole 0x00, 0x00, 0xff, 0xff, ma i le sili atu ma le tasi vaetolu o mataupu e lua zero bytes. (atonu o le mea moni o loʻo ou faʻaogaina le CBOR binary, ma pe a faʻaaogaina le JSON tusitusiga, o poloka o le ituaiga 2 - poloka malosi o le a sili atu ona taatele, i le faasologa, poloka e aunoa ma ni paisa faaopoopo i luma ole 0x00, 0x00, 0xff, 0xff o le a feagai).

I le aofaʻi, faʻaaogaina o faʻamatalaga suʻega avanoa, e mafai ona faʻaogaina i lalo ifo o le 250Kb o faʻamaumauga faʻapipiʻi.

E mafai ona e faʻasaoina sina mea itiiti e ala i le faia o le taupulepulega: aua o le taimi nei matou te le amanaiaina le i ai o ni nai paʻu i le pito o le poloka, o nai mea i le amataga o le poloka e le suia foi...
Ae na ou faia se faaiuga malosi e taofi, a le o lea i le tulaga lea e mafai ona ou iu ai i le atiaeina o laʻu lava faila.

I le aofaʻi, mai laʻu faʻamatalaga suʻega na ou mauaina 3-4 bytes i le tusitusi, o le fua faʻatatau na sili atu nai lo le 6: 1. Ou te faʻamaoni: Ou te leʻi faʻamoemoeina se iʻuga faapena; i loʻu manatu, soʻo se mea e sili atu nai lo le 2: 1 ua uma ona faʻamaonia le faʻaogaina o le faʻamalosi.

O loʻo lelei mea uma, ae o le zlib (deflate) o loʻo avea pea ma mea tuai, talafeagai ma laʻititi tuai-fashioned compression algorithm. O le mea moni lava o le 32Kb mulimuli o le faʻaogaina o faʻamaumauga o loʻo faʻaaogaina e pei o se lolomifefiloi e foliga ese i aso nei (o lona uiga, afai o nisi poloka faʻamaumauga e talitutusa lava ma le mea na i ai i totonu o le faʻaoga 40Kb talu ai, o le a amata ona toe teuina, ma o le a le faasino i se mea na tupu muamua). I fa'amaumauga fa'aonaponei fa'aonaponei, o le tele o lomifefiloi e masani ona fua i megabytes nai lo kilobytes.

O lea e fa'aauau ai la matou su'esu'ega laiti o fa'amaumauga.

Na sosoo ai ma le suʻeina o le bzip2 (manatua, e aunoa ma le FLUSH na faʻaalia ai se fua faʻatatau faʻamalosi e toetoe lava 100: 1). Ae paga lea, na matua le lelei le faatinoga i FLUSH; o le tele o faʻamaumauga faʻapipiʻi na foliga mai e sili atu nai lo faʻamaumauga e leʻi faʻapipiʻiina.

Oʻu manatu e uiga i mafuaʻaga o le toilalo

O le Libbz2 e ofoina atu na o le tasi le filifiliga faʻafefe, lea e foliga mai e faʻamama ai le lomifefiloi (e tutusa ma Z_FULL_FLUSH i le zlib); e leai se tautalaga o soʻo se faʻamalosi lelei pe a uma.

Ma o le mea mulimuli na tofotofoina o zstd. Faʻalagolago i faʻamaufaʻailoga, e faʻapipiʻi pe i le maualuga o le gzip, ae sili atu le vave, pe sili atu nai lo le gzip.

Talofa e, faʻatasi ai ma FLUSH e leʻi lelei tele: o le tele o faʻamaumauga faʻapipiʻi e tusa ma le 700Kb.

Я fai se fesili i luga o le itulau github a le poloketi, na ou mauaina se tali e tatau ona e faʻamoemoeina e oʻo atu i le 10 paita o faʻamaumauga o auaunaga mo poloka taʻitasi o faʻamaumauga faʻapipiʻi, lea e latalata i iʻuga na maua; e leai se auala e maua ai le faʻafefe.

Na ou filifili e taofi i le taimi lea i aʻu suʻesuʻega ma faʻamaumauga (seʻi ou faamanatu atu ia te oe o le xz, lzip, lzo, lz4 e leʻi faʻaalia i latou lava i le taimi o suʻega e aunoa ma le FLUSH, ma ou te leʻi mafaufauina e sili atu le faʻaogaina o algorithms).

Se'i tatou toe fo'i i fa'afitauli fa'amaumauga.

O le lona lua (e pei ona latou fai mai i le faasologa, ae le o le tau) faʻafitauli o le faʻapipiʻiina o faʻamaumauga o se vaitafe e tasi, lea e iai pea faʻamatalaga i vaega muamua. O le mea lea, afai e faʻaleagaina se vaega o faʻamaumauga faʻapipiʻi, matou te leiloa e le gata o poloka fesoʻotaʻi o faʻamaumauga e leʻi faʻapipiʻiina, ae faʻapea foʻi ma isi uma mulimuli ane.

E i ai se auala e foia ai lenei faafitauli:

  1. Taofi le faʻafitauli mai le tupu - faʻaopoopo le faʻaogaina i faʻamaumauga faʻapipiʻi, lea e mafai ai ona e iloa ma faʻasaʻo mea sese; o le a tatou talanoa e uiga i lenei mea mulimuli ane;
  2. Fa'aitiitia fa'afitauli pe a tupu se fa'afitauli
    Ua uma ona matou fai atu muamua e mafai ona e faʻapipiʻi taʻitasi poloka faʻamaumauga tutoʻatasi, ma o le faʻafitauli o le a mou atu na o ia (faʻaleagaina o faʻamaumauga o le tasi poloka o le a taʻitaʻia ai le leiloa o faʻamaumauga mo na o lenei poloka). Ae ui i lea, o se tulaga ogaoga lea e le aoga ai le faʻapipiʻiina o faʻamatalaga. O le fa'afeagai pito sili: fa'aaoga uma le 4MB o la tatou pu e fai ma fa'amaumauga e tasi, lea o le a tu'uina mai ai ia i tatou le fa'amalosi lelei, ae o fa'alavelave mata'utia i le tulaga o fa'amatalaga pi'opi'o.
    Ioe, e manaʻomia se fetuutuunaʻi i tulaga o le faʻamaoni. Ae e tatau ona tatou manatua o loʻo tatou atiaʻe se faʻamaumauga mo le teuina o faʻamaumauga mo mafaufauga e le faʻafefeteina ma le maualalo o le BER ma se taimi e teu ai faʻamaumauga o le 20 tausaga.

I le taimi o faʻataʻitaʻiga, na ou iloa ai e sili atu pe itiiti ifo le iloa o gau i le tulaga faʻamalosi e amata i luga o poloka o faʻamaumauga faʻapipiʻi e itiiti ifo i le 10 KB le tele.
Na taʻua muamua o le manatua o loʻo faʻaogaina itulau; Ou te le iloa se mafuaʻaga e le tatau ai ona faʻaogaina le "tasi itulau - tasi poloka o faʻamaumauga faʻapipiʻi" fetusiaiga.

O lona uiga, o le laititi laititi o le itulau talafeagai o le 16Kb (faʻatasi ma se faʻaagaga mo faʻamatalaga o auaunaga). Ae ui i lea, o se la'ititi la'ititi o itulau e fa'agata ai le tele o fa'amaumauga.

E ui lava ou te leʻi faʻamoemoeina faʻamaumauga e sili atu nai lo nai kilobytes i le faʻapipiʻiina, na ou filifili e faʻaaoga itulau 32Kb (mo le aofaʻi o 128 itulau i le pu).

Aotelega:

  • Matou te teuina faʻamaumauga faʻapipiʻiina e faʻaaoga ai le zlib (deflate);
  • Mo fa'amatalaga ta'itasi matou te setiina le Z_SYNC_FLUSH;
  • Mo fa'amaumauga fa'apipi'i ta'itasi, matou te 'otiina paita fa'asolosolo (faataitaiga 0x00, 0x00, 0xff, 0xff); i le ulutala matou te faʻaalia le tele o paita matou te tipi ese;
  • Matou te teuina faʻamatalaga i itulau 32Kb; o loʻo i ai se vaitafe e tasi o faʻamaumauga faʻapipiʻi i totonu o le itulau; I luga o itulau taʻitasi matou te toe amata faʻamalosi.

Ma, aʻo leʻi maeʻa i le faʻamalosi, ou te manaʻo e tosina atu lou mafaufau i le mea moni e naʻo ni nai paita o faʻamaumauga faʻapipiʻi i faʻamaumauga, o lea e matua taua ai le aua neʻi faʻateleina le faʻamatalaga o le tautua, o byte uma e taua iinei.

Teuina Fa'aulutala o Fa'amatalaga

Talu ai o lo'o i ai a matou fa'amaumauga o le umi fesuisuia'i, e mana'omia ona tatou fa'amautu le tu'uina/tuaoi o fa'amaumauga.

E tolu auala ou te iloa:

  1. O fa'amaumauga uma e teuina i totonu o se vaitafe fa'aauau, muamua o lo'o i ai se ulutala fa'amaumauga o lo'o i ai le umi, ona sosoo ai lea ma le fa'amaumauga lava ia.
    I lenei fa'atusa, o ulutala uma ma fa'amaumauga e mafai ona fesuia'i umi.
    O le mea moni, matou te maua se lisi fesoʻotaʻi taʻitasi e faʻaaogaina i taimi uma;
  2. O ulutala ma fa'amaumauga lava ia o lo'o teuina i ni vaitafe eseese.
    E ala i le fa'aogaina o ulutala o le umi faifaipea, matou te fa'amautinoa o le fa'aleagaina o le tasi ulutala e le afaina ai isi.
    O se faiga fa'apena e fa'aaogaina, mo se fa'ata'ita'iga, i le tele o faiga faila;
  3. O faʻamaumauga o loʻo teuina i totonu o se vaitafe faʻaauau, o le tuaoi faʻamaumauga e fuafuaina e se faʻailoga faapitoa (se uiga / faʻasologa o mataitusi e faʻasaina i totonu o poloka faʻamaumauga). Afai ei ai se faʻailoga i totonu o le faʻamaumauga, ona matou suia lea i se faʻasologa (sese mai).
    O loʻo faʻaaogaina se auala faʻapena, mo se faʻataʻitaʻiga, i le PPP protocol.

O le a ou faʻataʻitaʻiina.

Filifiliga 1:
O loʻu faʻatinoina o se mama mama i NOR flash
E matua faigofie lava mea uma iinei: iloa le umi o le faamaumauga, e mafai ona tatou fuafuaina le tuatusi o le isi ulutala. O lea matou te faʻagasolo ai ulutala seia matou feiloaʻi i se vaega e tumu i le 0xff (vaega saoloto) poʻo le pito o le itulau.

Filifiliga 2:
O loʻu faʻatinoina o se mama mama i NOR flash
Ona o le fesuisuiai o le umi o faamaumauga, e le mafai ona matou fai muamua pe fia faamaumauga (ma o lea la o ulutala) matou te manaʻomia i le itulau. E mafai ona e faʻasalalau ulutala ma faʻamatalaga i latou lava i itulau eseese, ae ou te manaʻo i se isi auala: matou te tuʻuina uma ulutala ma faʻamatalaga i luga o le itulau e tasi, ae o ulutala (o le tele faifaipea) e sau mai le amataga o le itulau, ma le fa'amatalaga (o le umi fesuisuia'i) e sau mai le pito. O le taimi lava latou te "feiloai" (e le lava le avanoa avanoa mo se ulufale fou), matou te manatu ua maeʻa lenei itulau.

Filifiliga 3:
O loʻu faʻatinoina o se mama mama i NOR flash
E le manaʻomia le teuina o le umi poʻo isi faʻamatalaga e uiga i le nofoaga o faʻamatalaga i le ulutala; faʻailoga e faʻaalia ai tuaoi o faʻamaumauga ua lava. Ae ui i lea, o faʻamaumauga e tatau ona faʻatautaia pe a tusitusi / faitau.
O le a ou faʻaogaina le 0xff e fai ma faʻailoga (lea e faʻatumu ai le itulau pe a uma ona tape), o le mea lea o le a le faʻaogaina le nofoaga saoloto e pei o faʻamaumauga.

Laupapa fa'atusatusa:

1 filifiliga
2 filifiliga
3 filifiliga

Fa'apalepale sese
-
+
+

Faʻamau
+
-
+

Lavelave o le faatinoga
*
**
**

O le filifiliga 1 e iai se fa'aletonu mata'utia: afai e iai se fa'aulutala ua fa'aleagaina, o le filifili atoa o lo'o mulimuli mai e fa'aumatia. O isi filifiliga e mafai ai ona e toe faʻaleleia nisi faʻamatalaga e tusa lava pe faʻaleagaina tele.
Ae o iinei e tatau ona manatua na matou filifili e teuina faʻamaumauga i se faʻapipiʻiina, ma o lea matou te leiloa uma faʻamatalaga i luga o le itulau pe a uma le "gau" faʻamaumauga, e ui lava o loʻo i ai se faʻaititia i le laulau, matou te le ia amanaia.

Fa'atasi:

  • i le filifiliga muamua, matou te manaʻomia le teuina naʻo le umi i le ulutala, afai matou te faʻaogaina numera fesuisuiai-umi, o le tele o tulaga e mafai ona matou maua i le tasi byte;
  • i le filifiliga lona lua e tatau ona tatou teuina le tuatusi amata ma le umi; o le talafaamaumau e tatau ona i ai se tele faifaipea, ou te fuaina 4 paita i faamaumauga (lua paita mo le offset, ma lua paita mo le umi);
  • o le filifiliga lona tolu e naʻo le tasi le tagata e faʻaalia ai le amataga o le pueina, faʻatasi ai ma le faʻamaumauga lava ia o le a faʻateleina e 1-2% ona o le talipupuni. I se tulaga lautele, e tusa ma le tutusa ma le filifiliga muamua.

I le taimi muamua, na ou mafaufau i le filifiliga lona lua o le mea autu (ma na tusia foi le faʻatinoga). Na ou lafoaia ina ua iu ina ou filifili e faaaoga le compression.

Masalo e i ai se aso o le a ou faaaogaina pea se filifiliga faapena. Mo se faʻataʻitaʻiga, afai e tatau ona ou feagai ma le teuina o faʻamaumauga mo se vaʻa o loʻo faimalaga i le va o le Lalolagi ma Mars, o le ai ai se tulaga eseʻese manaʻoga mo le faʻamaoni, faʻavevelaina o le lalolagi, ...

Ae mo le filifiliga lona tolu: Na ou tuʻuina atu i ai fetu e lua mo le faigata o le faʻatinoga ona o loʻu le fiafia e faʻafefe i le talipupuni, suia le umi i le faagasologa, ma isi. Ioe, masalo ou te faʻaituau, ae e tatau ona ou tusia le code - aisea e te faʻamalosia ai oe e fai se mea e te le fiafia i ai.

Aotelega: Matou te filifilia le filifiliga e teu ai i foliga o filifili "uluulu ma le umi - faʻamatalaga o le umi fesuisuiai" ona o le lelei ma le faigofie o le faʻatinoga.

Fa'aaogaina o Bit Fields e Mata'ituina le Manuia o Fa'agaioiga Tusi

Ou te le manatua nei le mea na ou maua ai le manatu, ae e foliga mai e pei o lenei:
Mo fa'amatalaga ta'itasi, matou te va'aia ni nai vaega e teu ai fu'a.
E pei ona matou fai atu muamua, pe a uma ona tape uma ua tumu i 1s, ma e mafai ona tatou suia le 1 i le 0, ae le o le isi itu. O lea la mo le "le fuʻa e leʻi setiina" matou te faʻaogaina le 1, mo le "faʻatulagaina le fuʻa" matou te faʻaogaina le 0.

O le mea lea e ono foliga i le tu'uina o se fa'amaumauga e fesuisuia'i umi i le moli:

  1. Seti le fuʻa "ua amata le puʻeina umi";
  2. Faamaumau le umi;
  3. Seti le fuʻa "ua amata le pueina o faʻamaumauga";
  4. Matou te faamaumauina faʻamaumauga;
  5. Seti le fu'a "fa'ai'u le pu'eina".

E le gata i lea, o le a tatou maua se fuʻa "mea sese", mo le aofaʻi o fuʻa 4 bit.

I lenei tulaga, e lua a matou setete mautu "1111" - e leʻi amataina le pueina ma le "1000" - na manuia le pueina; i le tulaga o se faʻalavelave faʻafuaseʻi o le faʻamaumauga o faʻamaumauga, o le a matou maua tulaga vavalalata, lea e mafai ona matou iloa ma faʻatautaia.

O le auala e manaia, ae naʻo le puipuia mai le faʻafuaseʻi o le paʻu o le eletise ma faʻalavelave tutusa, lea, ioe, e taua, ae e le o se mea e tasi (poʻo le autu foi) mafuaʻaga mo le toilalo.

Aotelega: Sei o tatou agai i luma i le sailiga o se fofo lelei.

Su'ega siaki

E mafai fo'i e su'esu'ega ona fa'amautinoa (fa'atasi ai ma se fa'amoemoega talafeagai) o lo'o tatou faitauina tonu le mea sa tatau ona tusia. Ma, e le pei o fasi fanua o loʻo talanoaina i luga, latou te galulue i taimi uma.

Afai tatou te mafaufau i le lisi o faʻafitauli faʻafitauli na tatou talanoaina i luga, ona mafai lea e le siaki siaki ona iloa se mea sese e tusa lava po o le a le amataga. (sei vagana ai, atonu, mo tagata ese leaga - e mafai foi ona latou faia le siaki tupe).

Afai la o la matou sini o le faʻamaonia o faʻamaumauga o loʻo atoatoa, siaki siaki o se manatu lelei.

Ole filifiliga ole algorithm mo le fuafuaina ole siaki tupe e le'i laga ai ni fesili - CRC. I le tasi itu, o mea tau matematika e mafai ai ona puʻeina nisi ituaiga o mea sese 100%; i le isi itu, i luga o faʻamatalaga faʻafuaseʻi o lenei algorithm e masani ona faʻaalia ai le avanoa o faʻalavelave e le sili atu nai lo le tapulaa faʻaupuga. O loʻu faʻatinoina o se mama mama i NOR flash. Atonu e le o le algorithm sili ona vave, e le o taimi uma foi e sili ona maualalo i tulaga o le numera o faʻalavelave, ae o loʻo i ai se uiga taua tele: i suʻega na ou feagai, e leai ni mamanu na manino ai le toilalo. O le mautu o le uiga autu lea i lenei tulaga.

Fa'ata'ita'iga o se su'esu'ega volumetric: vaega 1, vaega 2 (so'otaga ile narod.ru, faamalie atu).

Ae ui i lea, o le galuega o le filifilia o se siaki tupe e leʻi maeʻa; CRC o se aiga atoa o siaki tupe. E tatau ona e filifili i le umi, ona filifili lea o se polynomial.

Filifilia o le umi siaki e le faigofie o se fesili e pei ona foliga mai i le tepa muamua.

Se'i ou fa'ata'ita'i atu:
Ia tatou maua le avanoa o se mea sese i byte taitasi O loʻu faʻatinoina o se mama mama i NOR flash ma se su'ega lelei, se'i tatou fa'atatau le aofa'i o mea sese i le miliona fa'amaumauga:

Fa'amatalaga, byte
Su'ega, byte
Mea sese e le'i iloa
Su'esu'ega sese
Aofa'i fa'ailoga sese

1
0
1000
0
1000

1
1
4
999
1003

1
2
0
1997
1997

1
4
0
3990
3990

10
0
9955
0
9955

10
1
39
990
1029

10
2
0
1979
1979

10
4
0
3954
3954

1000
0
632305
0
632305

1000
1
2470
368
2838

1000
2
10
735
745

1000
4
0
1469
1469

E foliga mai e faigofie mea uma - faʻatatau i le umi o faʻamaumauga o loʻo puipuia, filifili le umi o le siaki faʻatasi ma se laʻititi o mea le lelei - ma o le togafiti o loʻo i totonu o le ato.

Ae ui i lea, o se faʻafitauli e tulaʻi mai i siaki puʻupuʻu: e ui lava e lelei i latou i le suʻeina o mea sese, e mafai ona latou talia faʻamatalaga faʻafuaseʻi e saʻo. Ua uma ona i ai se tusiga i luga o Habré faʻamatalaina faafitauli i le olaga moni.

O le mea lea, ina ia faia se siaki siaki e toetoe lava a le mafai, e tatau ona e faʻaogaina siaki e 32 bits pe umi le umi. (mo umi e sili atu i le 64 bits, e masani ona faʻaogaina galuega faʻapipiʻi cryptographic).

E ui lava i le mea moni na ou tusia muamua e tatau ona tatou faʻasaoina avanoa i auala uma, o le a tatou faʻaaogaina pea le 32-bit checksum (16 bits e le lava, o le avanoa o se faʻalavelave e sili atu nai lo le 0.01%; ma le 24 bits, e pei ona latou fai atu, e le o iinei po o iina) .

E ono tula'i mai se tete'e iinei: pe na matou fa'asaoina ea ta'i ta'itasi pe a filifilia le fa'amalosi ina ia mafai nei ona tu'uina atu le 4 paita i le taimi e tasi? E le sili ea le aua ne'i oomi pe fa'aopoopo se siaki tupe? Ioe e leai, leai se fa'amalosi e le o lona uiga, matou te le manaʻomia le siakiina o le amio saʻo.

A filifilia se polynomial, matou te le toe faʻafouina le uili, ae ave le CRC-32C lauiloa nei.
O lenei code e iloa ai le 6 bit mea sese i luga o pepa e oo atu i le 22 bytes (atonu o le mea sili ona taatele mo i tatou), 4 bit mea sese i luga o pepa e oo atu i le 655 bytes (o se tulaga masani foi mo i tatou), 2 poʻo soʻo se numera o mea sese i luga o paʻu. so'o se umi talafeagai.

Afai ei ai se tasi e fiafia i faʻamatalaga

Wikipedia tala e uiga i le CRC.

Fa'ailoga fa'ailoga crc-32c i 'upega tafaʻilagi a Koopman - masalo o le CRC faʻapitoa faʻapitoa i luga o le paneta.

В lana tusiga o se isi code manaia, lea e maua ai laʻititi laʻititi sili atu mo le umi o pusa e talafeagai ia i matou, ae ou te leʻi manatu i le eseesega taua, ma sa lava loʻu agavaa e filifili ai le tulafono masani nai lo le tulaga masani ma suʻesuʻeina lelei.

E le gata i lea, talu ai o loʻo faʻapipiʻiina a tatou faʻamatalaga, o le fesili e tulaʻi mai: e tatau ona tatou faʻatusatusa le siaki o faʻamaumauga faʻapipiʻi pe le faʻapipiʻiina?

Fa'asagaga e fa'atatau i le su'eina o fa'amaumauga e le'i fa'amauina:

  • Matou te manaʻomia mulimuli le siakiina o le saogalemu o le teuina o faʻamaumauga - o lea matou te siaki saʻo ai (i le taimi lava e tasi, o mea sese e mafai i le faʻatinoina o le faʻamalosi / faʻaleagaina, faʻaleagaina e mafua mai i le gau o le mafaufau, ma isi mea o le a siakiina);
  • O le deflate algorithm i le zlib o loʻo i ai se faʻatinoga matua ma e le tatau pa'ū faʻatasi ma faʻamatalaga faʻaoga "piʻopiʻo"; e le gata i lea, e masani ona mafai ona iloa tutoʻatasi mea sese i totonu o le vaitafe faʻapipiʻi, faʻaitiitia ai le avanoa lautele o le le iloa o se mea sese (faia se suʻega ma le fesuiaʻiina o se mea e tasi i se faʻamaumauga puupuu, zlib iloa se mea sese i le tusa ma le tasi vaetolu o mataupu).

Fa'asagaga e fa'asaga i le fa'atatauina o le su'ega o fa'amaumauga e le'i fa'amauina:

  • O le CRC e "faʻapipiʻiina" faʻapitoa mo nai mea sese o loʻo faʻaalia i le flash memory (o sina mea sese i totonu o se vaitafe faʻapipiʻi e mafai ona mafua ai se suiga tele i le tafega, lea, i le manatu mama, e mafai ona tatou "puʻeina" se faʻalavelave);
  • Ou te le fiafia tele i le manatu o le pasi atu o faʻamatalaga e ono malepe i le decompressor, O ai na te iloape faapefea ona ia tali atu.

I lenei poloketi, na ou filifili ai e alu ese mai le masani masani taliaina o le teuina o se siaki o faʻamaumauga e leʻi faʻapipiʻiina.

Aotelega: Matou te faʻaaogaina le CRC-32C, matou te faʻatatauina le siaki mai faʻamaumauga i le pepa o loʻo tusia ai e moli (pe a uma le faʻamalosi).

Fa'atosina

O le faʻaaogaina o le faʻaogaina o le faʻailoga e le mafai, ioe, faʻaumatia faʻamaumauga, peitaʻi, e mafai ona matua (masani i le tele o faʻatonuga o le tele) faʻaitiitia le ono mafai ona leiloa faʻamaumauga.

E mafai ona tatou faʻaogaina ituaiga eseese o le toe faʻaaogaina e faʻasaʻo ai mea sese.
E mafai e le Hamming codes ona fa'asa'o ni mea sese, Reed-Solomon character codes, tele kopi o fa'amaumauga tu'ufa'atasia ma siaki tupe, po'o fa'asologa e pei o le RAID-6 e mafai ona fesoasoani e toe fa'aleleia fa'amaumauga e tusa lava pe tupu tele le pi'opi'o.
I le taimi muamua, sa ou tuuto atu i le lautele o le faʻaogaina o le faʻaogaina o mea sese, ae na ou iloa muamua e tatau ona i ai se manatu i mea sese tatou te mananaʻo e puipuia i tatou mai, ona filifili lea o le coding.

Na matou fai atu muamua o mea sese e tatau ona vave maua. O a vaega e mafai ona tatou fetaiai ma mea sese?

  1. Le pu'eina e le'i mae'a (mo nisi mafuaaga i le taimi o le pueina na tape le paoa, le Raspberry ua malo, ...)
    Talofa e, pe a tupu se mea sese, pau lava le mea o loʻo totoe o le le amanaʻiaina o faʻamaumauga le aoga ma mafaufau i faʻamaumauga ua leiloloa;
  2. Tusi mea sese (mo nisi mafuaaga, o le mea na tusia i le flash memory e le o le mea na tusia)
    E mafai ona tatou iloa vave ia mea sese pe a tatou faia se suega faitau vave pe a uma ona pueina;
  3. Fa'aseseina o fa'amaumauga i le manatua a'o teuina;
  4. Faitau sese
    Ina ia faʻasaʻo, afai e le fetaui le siaki, ua lava le toe fai o le faitauga faʻatasi.

O lona uiga, naʻo mea sese o le ituaiga lona tolu (faʻaleagaina faʻafuaseʻi o faʻamaumauga i le taimi o le teuina) e le mafai ona faʻasaʻoina e aunoa ma se faʻailoga faʻamaonia. E foliga mai o na mea sese e matua faigata lava.

Aotelega: na filifili e lafoaʻi le faʻaogaina o le coding, ae afai o le gaioiga e faʻaalia ai le sese o lenei filifiliga, ona toe foʻi lea i le iloiloga o le mataupu (faʻatasi ai ma faʻamaumauga faʻaputu i luga o toilalo, lea e mafai ai ona filifilia le ituaiga sili ona lelei o le coding).

Прочее

Ioe, o le faatulagaga o le tusiga e le mafai ai ona tatou faʻamaonia mea uma i le faatulagaga (ma ua uma loʻu malosi), o lea o le a ou faapuupuu atu ai i nisi o manatu e lei talanoaina muamua.

  • Na tonu e fai itulau uma "tutusa"
    O lona uiga, o le a leai ni itulau faʻapitoa ma metadata, filo eseese, ma isi, ae nai lo le tasi filo e toe tusi uma itulau i le faasologa.
    E mautinoa lava e ofuina i luga o itulau, leai se mea e tasi o le toilalo, ma ou te fiafia i ai;
  • E taua tele le tu'uina atu o fa'aliliuga o le fa'atulagaga.
    O se fa'asologa e aunoa ma se numera fa'aliliu i le ulutala e leaga!
    Ua lava le faʻaopoopoina o se fanua ma se numera Magic Numera (saini) i le ulutala itulau, lea o le a faʻaalia ai le faʻasologa o le faʻaogaina (Ou te le manatu o le a oʻo i le faʻataʻitaʻiga e oʻo lava i le sefululua o latou);
  • Fa'aaogā se fa'aulutala e fesuisuia'i-umi mo fa'amaumauga (e tele naua), taumafai e fai le 1 byte le umi i le tele o tulaga;
  • Ina ia fa'ailoga le umi o le ulutala ma le umi o le vaega teuteu o le fa'amaumauga fa'apipi'i, fa'aoga tulafono laiti fa'aopoopo-umi.

Fesoasoani tele generator lugalaina Huffman codes. I ni nai minute na mafai ai ona matou filifilia le fa'ailoga umi e mana'omia.

Fa'amatalaga o fa'amaumauga e teu ai fa'amaumauga

Oka paita

O fanua e sili atu nai lo le tasi byte o loʻo teuina i le tele-endian format (network byte order), o lona uiga, 0x1234 ua tusia o le 0x12, 0x34.

Itulautusi

E vaevaeina uma manatuaga flash i itulau tutusa le lapopoa.

Ole tele ole itulau ole lapo'a ole 32Kb, ae le sili atu ile 1/4 ole aofa'i ole lapo'a manatua (mo le 4MB pu, 128 itulau e maua).

O itulau ta'itasi e teuina fa'amaumauga tuto'atasi mai isi (o lona uiga, fa'amaumauga i luga o le tasi itulau e le fa'asinoina fa'amatalaga i luga o le isi itulau).

O itulau uma e faanumeraina i le fa'asologa masani (i le fa'asologa alu a'e o tuatusi), e amata i le numera 0 (itulau zero e amata ile tuatusi 0, o le itulau muamua e amata ile 32Kb, o le itulau lona lua e amata ile 64Kb, ma isi)

O le pusi manatua e faʻaaogaina e avea o se faʻataʻamilomilo (buffer ring), o lona uiga, o le tusitusiga muamua e alu i le itulau numera 0, sosoo ai ma le numera 1, ..., pe a tatou faʻatumu le itulau mulimuli, e amata se taamilosaga fou ma faʻaauau le pueina mai le itulau zero. .

I totonu o le itulau

O loʻu faʻatinoina o se mama mama i NOR flash
I le amataga o le itulau, o loʻo teuina se ulutala itulau 4-byte, ona faʻapipiʻi lea o se siaki ulutala (CRC-32C), ona teuina lea o faʻamaumauga i le "header, data, checksum" format.

O le ulutala itulau (meamata palapala i le ata) e aofia ai:

  • lua-byte Magic Numera fanua (faʻailoga foi o le faʻasologa o faʻasologa)
    mo le lomiga o loʻo i ai nei o le faʻatulagaga o loʻo fuafua e pei o 0xed00 ⊕ номер страницы;
  • lua-paita fata “Itulau itulau” (manatua toe tusi le taamilosaga numera).

O faʻamaumauga i luga o le itulau o loʻo teuina i le faʻapipiʻiina (o loʻo faʻaogaina le deflate algorithm). O fa'amaumauga uma i luga o le itulau e tasi o lo'o fa'apipi'iina i le filo e tasi (o lo'o fa'aogaina se lomifefiloi masani), ma i luga o itulau fou ta'itasi e amata fou ai le fa'amalosi. O lona uiga, ina ia faʻamalo soʻo se faʻamaumauga, o faʻamaumauga uma muamua mai lenei itulau (ma naʻo le tasi) e manaʻomia.

O fa'amaumauga ta'itasi o le a fa'apipi'iina i le fu'a Z_SYNC_FLUSH, ma i le fa'ai'uga o le vaitafe fa'apipi'i o le ai ai le 4 bytes 0x00, 0x00, 0xff, 0xff, atonu e muamua atu i le tasi pe lua isi zero bytes.
Matou te lafoa'ia lenei fa'asologa (4, 5 po'o le 6 paita le umi) pe a tusi i le flash memory.

O le ulutala fa'amaumauga e 1, 2 po'o le 3 paita e teuina:

  • tasi bit (T) faʻaalia le ituaiga o faʻamaumauga: 0 - faʻamatalaga, 1 - faʻamaumauga;
  • o se fanua umi fesuisuiai (S) mai le 1 i le 7 bits, faʻamalamalamaina le umi o le ulutala ma le "siʻusiʻu" e tatau ona faʻaopoopo i le faʻamaumauga mo le faʻaleagaina;
  • umi fa'amaumauga (L).

S laulau tau:

S
Ulutala umi, paita
Fa'ate'aina ile tusitusi, byte

0
1
5 (00 00 00 ff ff)

10
1
6 (00 00 00 00 ff ff)

110
2
4 (00 00 ff ff)

1110
2
5 (00 00 00 ff ff)

11110
2
6 (00 00 00 00 ff ff)

1111100
3
4 (00 00 ff ff)

1111101
3
5 (00 00 00 ff ff)

1111110
3
6 (00 00 00 00 ff ff)

Sa ou taumafai e faʻamalamalama, ou te le iloa pe o le a le manino na iʻu mai ai:
O loʻu faʻatinoina o se mama mama i NOR flash
Lanu samasama iinei o loʻo faʻaalia ai le T fanua, paʻepaʻe le S fanua, lanumeamata L (le umi o faʻamaumauga faʻapipiʻi i bytes), lanumoana le faʻamaumauga faʻapipiʻi, mumu o paita mulimuli o faʻamaumauga faʻapipiʻi e le o tusia i le flash memory.

O le mea lea, e mafai ona matou tusia faʻamaumauga faʻamaumauga o le umi masani (e oʻo atu i le 63 + 5 paita i le faʻapipiʻiina) i le tasi paita.

A maeʻa faʻamaumauga taʻitasi, e teuina se siaki siaki CRC-32C, lea e faʻaaogaina ai le tau faʻaliliuina o le siaki muamua e avea ma tau muamua (init).

O le CRC o loʻo i ai le meatotino o le "umi", o le fua faʻatatau o loʻo i lalo e aoga (faʻaopoopo pe faʻaitiitia le suiga i le faagasologa): O loʻu faʻatinoina o se mama mama i NOR flash.
O lona uiga, o le mea moni, matou te faʻatatauina le CRC o pate uma muamua o ulutala ma faʻamaumauga i luga o lenei itulau.

O le mulimuli sa'o i le siaki siaki o le ulutala o le isi faamaumauga.

O le ulutala ua mamanuina i se auala e ese ai lona muamua muamua mai le 0x00 ma le 0xff (afai nai lo le muamua o le ulutala tatou te fetaiai ma le 0xff, o lona uiga o se vaega e le faʻaaogaina; 0x00 faʻailoga se mea sese).

Fa'ata'ita'iga Algorithms

Faitau mai le Flash Memory

Soo se faitauga e sau ma se siaki siaki.
Afai e le fetaui le su'ega, e toe fai le faitauga i ni nai taimi ma le fa'amoemoe e faitau fa'amaumauga sa'o.

(E talafeagai, Linux e le faʻaogaina le faitau mai le NOR Flash, faʻataʻitaʻiina)

Tusi i le flash memory

Matou te faamaumauina faʻamaumauga.
Sei o tatou faitau i ai.

Afai o faʻamatalaga faitau e le fetaui ma faʻamaumauga tusitusia, matou te faʻatumu le vaega i zeros ma faʻaalia se mea sese.

Saunia se microcircuit fou mo le gaioiga

Mo le amataga, o se ulutala ma le version 1 ua tusia i le itulau muamua (pe leai).
A maeʻa lena, o le faʻamatalaga muamua o loʻo tusia i lenei itulau (o loʻo i ai le UUID o le masini ma le faʻaogaina o tulaga).

O le mea lena, ua sauni le flash memory mo le faʻaaogaina.

Tu'uina le masini

Pe a utaina, o le 8 paita muamua o itulau taʻitasi (header + CRC) o loʻo faitau, itulau e le iloa Magic Numera poʻo se CRC sese e le amanaiaina.
Mai itulau "saʻo", o itulau e sili ona maualuga e filifilia, ma o le itulau e sili ona maualuga e ave mai ia i latou.
O le faʻamaumauga muamua e faitau, o le saʻo o le CRC ma le i ai o le "context" fuʻa e siakiina. Afai o lo'o lelei mea uma, o lenei itulau o lo'o i ai nei. Afai e leai, matou toe foʻi i tua i le muamua seia matou maua se itulau "ola".
ma i luga o le itulau na maua matou te faitau ai faʻamaumauga uma, o mea matou te faʻaogaina ma le "context" fuʻa.
Faasaoina le lomifefiloi zlib (o le a manaʻomia mo le faʻaopoopoina i lenei itulau).

O le mea lena, ua maeʻa le download, ua toe faʻaleleia le tala, e mafai ona e galue.

Fa'aopoopoina o se Tusi Talaaga

Matou te fa'apipi'i fa'amaumauga i le lomifefiloi sa'o, fa'ailoa mai le Z_SYNC_FLUSH. Matou te va'ai pe fetaui le fa'amaumauga fa'amau i le itulau o lo'o iai nei.
Afai e le fetaui (pe i ai ni mea sese CRC i luga o le itulau), amata se itulau fou (silasila i lalo).
Matou te tusia i lalo le faʻamaumauga ma le CRC. Afai e tupu se mea sese, amata se itulau fou.

Itulau fou

Matou te filifilia se itulau e leai se totogi ma le numera maualalo (matou te manatu o se itulau e leai se totogi o se itulau o loʻo i ai se siaki le saʻo i le ulutala poʻo se faʻamatalaga e itiiti ifo nai lo le taimi nei). Afai e leai ni itulau faapena, filifili le itulau o lo'o i ai le numera maualalo mai i latou o loʻo i ai se faʻamatalaga e tutusa ma le taimi nei.
Matou te tapeina le itulau ua filifilia. Matou te siakiina mea o loʻo i totonu i le 0xff. Afai ei ai se mea e sese, ave le isi itulau saoloto, ma isi.
Matou te tusia se ulutala i luga o le itulau ua tapeina, o le faʻamatalaga muamua o le tulaga o loʻo i ai nei o le tala, o le isi o le faʻailoga e leʻi tusiaina (pe a iai se tasi).

Fa'atonuga fa'atatau

I loʻu manatu, na avea ma se faatulagaga lelei mo le teuina o soʻo se tele pe itiiti ifo faʻamatalaga faʻamatalaga faʻamatalaga (tusi manino, JSON, MessagePack, CBOR, atonu protobuf) i NOR Flash.

Ioe, o le faatulagaga e "faʻatulagaina" mo SLC NOR Flash.

E le tatau ona faʻaaogaina i faʻasalalauga maualuga BER pei ole NAND poʻo MLC NOR (e mafai lava ona fa'atau atu sea manatuaga? Na'o lo'u va'aia o lo'o ta'ua i galuega i tulafono fa'asa'oga).

E le gata i lea, e le tatau ona faʻaaogaina i masini e iai a latou lava FTL: USB flash, SD, MicroSD, ma isi (mo ia manatua na ou fatuina ai se faatulagaga ma se itulau o le 512 bytes, saini i le amataga o itulau taʻitasi ma numera faʻamaumauga tulaga ese - o nisi taimi na mafai ai ona toe maua uma faʻamatalaga mai se "glitched" flash drive e ala i le faitau faʻasolosolo faigofie).

Faʻalagolago i galuega, e mafai ona faʻaogaina le faatulagaga e aunoa ma ni suiga i luga o le uila mai le 128Kbit (16Kb) i le 1Gbit (128MB). Afai e manaʻo ai, e mafai ona e faʻaogaina i luga o tupe meataalo tetele, ae atonu e te manaʻomia le fetuunaiga o le laupepa (Ae o lea ua tulaʻi mai le fesili o le faʻaogaina o le tamaoaiga; o le tau mo le tele-volume NOR Flash e le faʻamalosia).

Afai e maua e se tasi e manaia le faatulagaga ma manaʻo e faʻaaogaina i se galuega tatala, tusi, o le a ou taumafai e suʻe le taimi, faʻasalalau le code ma faʻapipiʻi i luga o le github.

iʻuga

E pei ona mafai ona e vaʻaia, i le faaiuga o le faʻatulagaga na faʻafaigofie ma e oo lava ina le fiafia.

E faigata ona atagia le faʻaleleia o loʻu manatu i se tusiga, ae talitonu mai ia te aʻu: muamua na ou manaʻo e fatuina se mea faʻapitoa, e le mafai ona faʻaumatia, e mafai ona ola e oʻo lava i se pa faaniukilia i le vavalalata. Ae ui i lea, o le mafuaaga (ou te faʻamoemoe) na manumalo pea ma faasolosolo malie le faʻamuamua i le faigofie ma le faʻamaoni.

Faamata ua ou sese? Ioe, mautinoa. Atonu e foliga mai, mo se faʻataʻitaʻiga, na matou faʻatauina se vaega o microcircuits maualalo. Po'o se isi lava mafua'aga e le ausia ai e meafaigaluega fa'amoemoega fa'atuatuaina.

E i ai sa'u fuafuaga mo lenei mea? Ou te manatu pe a uma ona faitau le tusiga e te le masalosalo o loʻo i ai se fuafuaga. Ma e le na o oe lava.

I luga o se faʻamatalaga sili atu ona ogaoga, o le faʻatulagaga na atiae uma e avea o se filifiliga galue ma o se "paluna faʻataʻitaʻiga".

I le taimi nei o loʻo lelei mea uma i luga o le laulau, o le mea moni o le isi aso o le a faʻapipiʻiina ai le fofo (tusa) i luga o le fiaselau o masini, seʻi o tatou vaʻai pe o le a le mea e tupu i le "taua" faʻagaioiga (mea e lelei ai, ou te faʻamoemoe o le faʻatulagaga e mafai ai ona e faʻamaonia faʻaletonu; ina ia mafai ona e aoina atoa fuainumera). I ni nai masina o le a mafai ona faia ni faaiuga (ma afai e te le manuia, e oʻo lava i le taimi muamua).

Afai, faʻavae i luga o taunuuga o le faʻaaogaina, o loʻo maua ni faʻafitauli matuia ma e manaʻomia ni faʻaleleia atili, ona ou tusia lea e uiga i ai.

Tusi

Ou te leʻi manaʻo e fai se lisi umi o galuega faʻaaogaina; a uma, e tofu tagata uma ma Google.

O iinei na ou filifili ai e tuʻu se lisi o mea na maua e foliga mai e sili ona manaia ia te aʻu, ae na faasolosolo malie ona latou malaga saʻo i totonu o le tusiga o le tusiga, ma o le tasi mea na tumau i luga o le lisi:

  1. Тилита infgen mai le tusitala zlib. E mafai ona faʻaalia manino mea o loʻo i totonu ole deflate/zlib/gzip archives. Afai e tatau ona e feagai ma le fausaga i totonu o le deflate (poʻo le gzip), ou te fautuaina tele.

puna: www.habr.com

Faaopoopo i ai se faamatalaga