Názor k článku Banana Pi R1: připojení SATA disku od František Ryšánek - Váš příspěvek mě velice zaujal :-) Natolik, že...

  • Článek je starý, nové názory již nelze přidávat.
  • 25. 4. 2015 8:54

    František Ryšánek

    Váš příspěvek mě velice zaujal :-) Natolik, že jsem se snažil k tomu něco dohledat/dostudovat - ale moc jsem toho nenašel. Neměl byste nějaké odkazy na zdroje, které to podrobněji pitvají?

    Takhle na první pohled bych totiž řekl, že jste tu zkratku trochu přehnal :-)

    Můj dojem:

    Tak jako různé varianty ATA Flash (vč. ATA/SATA SSD, CF/CFast apod.) a USB Mass Storage, i SD karta obsahuje dvě základní součástky:
    1) surové NAND Flash čipy s rozhraním JEDEC nebo jak se to dneska jmenuje
    2) řadič, který se navenek baví přes ATA nebo USB Mass Storage, dovnitř se baví se surovou NAND flash, navenek se tváří jako normální disk (adresace po sektorech), nad flashkou páchá nějaký ten wear leveling, dvoupatrové mapování sektorů na NAND řádky a erase bloky.

    Nedovedu si představit, že by SD karta "neměla řadič".

    SD karta s klasickým SD rozhraním (existuje v několika generacích) prezentuje hostiteli "blokovou abstrakci", která je přímo použitelná různými OS v jejich diskovém subsystému (v blokové vrstvě). Něco jako LBA na ATA/SCSI. Velikost bloku=sektoru patrně klasických 512 B. Počítá se s tím, že nejběžnějším FS jsou různé generace FAT: historicky postupně FAT16, FAT32, ExFAT. Čili pokud pomineme detaily fyzické vrstvy a komunikačního protokolu, abstrakce práce s daty je shodná jako u CompacfFlash / ATA Flash / USB Mass Storage. Potažmo pokud ta karta má něco vydržet, musí dělat interně wear leveling. Otázkou dále je, nakolik je tento wear leveling pokročilý. Přesněji, u SD bych čekal tzv. "statický" wear leveling (tupý round robin) - ostatně to třeba Panasonic u svých "industrial" flashek výslovně uvádí. A jak je známo o low-end ATA flashkách, firmware řadiče uvnitř karty doslova počítá s tím, že na kartě je FAT FS, dokonce s konkrétní velikostí clusteru a potažmo konkrétní velikostí FAT tabulky (karta se prodává předformátovaná FATkou s těmito parametry) a právě sektory nesoucí FAT tabulku mají důkladnější wear leveling než celý zbytek disku. Pochopitelně - FATka se přepisuje mnohem častěji a v drobnějších kvantech. V popisu nějakých značkových industrial flashek jsem zaznamenal "protection against double power failure". Nevím co to přesně znamená, možná si firmware SD řadiče uvnitř karty operace žurnáluje, provádí copy-on-write nebo tak něco - aby se vyhnul nekonzistenci ve svém interním dvoupatrovém mapování, případně byl schopen rekonstruovat své mezivrstvy do konzistentního bodu před výpadkem napájení. Určitě nedokáže garantovat konzistenci FS, který žije o dvě vrstvy výš.

    Podobně jako CF karty umí "přímo mapovaný režim" (připojí se přímo na ROM-style sběrnici MCU), tak SD karty umí SPI režim (přinejmenším některé. SPI režim je součástí standardu SD). Tyto režimy umožňují dvě věci: 1) obejít se bez ATA nebo SD řadiče a 2) adresovat flashku po bajtech. Hardwarový SPI řadič je součástí mnoha MCU, embedded PC čipsetů apod. (které o ATA/SATA nebo SD nikdy neslyšely) a navíc SPI se dá také zařídit poměrně snadno softwarově přes GPIO (bit banging = "taháním za drátky").

    Dál je pro mne osobně otázkou, co to vlastně znamená ve vztahu k blokové abstrakci resp. wear levelingu. Pokud tomu mám rozumět tak, že přímo mapovaná CF karta nebo SDčko v SPI režimu mají i v tomto režimu umožnit přístup k datům na FAT FS, aby bylo možno třeba přenášet data mezi PC a "nejmenovanou krabičkou na bázi MCU", pak i v těchto režimech musí být dodržena abstrakce blokové vrstvy, přestože jednodušší rozhraní umožňuje přistupovat k jednotlivým bajtům -> i v těchto režimech by karta musela interně dělat to složité mapování a wear leveling...

    Druhá možnost je, že v těchto "přímo mapovaných" režimech řadič pouze přímo zpřístupní surové NAND Flash čipy nějakou trapnou lineární translací SPI na "JEDEC". Tohle mi ale moc nejde do hlavy - protože NAND se musí číst a zapisovat po celých řádkách, mazat po erase blocích, a nejsem si úplně jistý, zda je součástí SPI protokolu např. operace "smaž celý erase block" nebo "zjisti fyzickou geometrii čipů" (velikost řádku a erase bloku) - a tyhle operace mívají u specifických modelů NAND čipů specifické detaily a zádrhele... že by je uměl řadič SD/flash odstínit, a přitom zůstat u adresace na nízké vrstvě? Přijde mi to příliš složité... spíš bych to opravdu viděl na "přístup po bajtech na blokovou abstrakci".

    Jinak řečeno, domnívám se, že ani v těchto "přímo bajtově mapovaných" režimech nemá např. Linux v roli hostitele možnost, pracovat přímo s NAND Flash čipy v podobě MTD, provozovat si na nich svůj vlastní flashový FS s plnotučným žurnálujícím wear levelingem apod.

    Co dalšího odlišuje "industrial" SDčko?
    Mrkněte do Google Images - je tam vidět např. nápad některých výrobců, že u "průmyslových" SDček budou zalévat osazený plošák do kostky plastu (kdežto konvenční karta má jenom přicvaknutý plastový kryt).
    https://www.google.com/search?q=industrial+SD+card&source=lnms&tbm=isch

    To mi moc radikální nepřipadá - odhadem to tak většina "industrial" výrobců ani nedělá.

    Klasickou vlastností "industrial" flashek je použití SLC čipů. "Industrial MLC" je podle mého marketingový výplod některých výrobců, kteří se snaží nabídnout trhu "něco mezi" - levnější flashku, která není úplně spotřební, ale taky to není šíleně drahé SLCčko. Nakolik je pak "industrial" cena záležitostí jenom té "industrial" samolepky, to je na zvážení nás jako uživatelů...

    Je třeba si uvědomit (už to tu padlo) že "industrial flashka" je okrajový sortiment, zlomek trhu v porovnání se spotřebními flashkami. Z toho plyne jednak vyšší cena (protože méně masová výroba a menší konkurence), druhak se člověk může chlácholit nadějí, že aspoň největší "industrial" výrobci si pohlídají aspoň kvalitu firmwaru v něco/flash řadičích ve svých kartách. Snad kromě největších firem typu Sandisk nevěřím, že by si kdokoli menší byl schopen navrhnout a nechat vyrábět své vlastní něco/flash řadiče (křemík). Hardware těchto řadičů vyrábí několik výrobců - jeden či dva značkoví a pak hrst asijských sídlištních garáží, které ani nemají jméno v latince. Výrobci flash karet tyto řadiče nakupují hotové a s větším či menším úspěchem se snaží pohlídat na svém výstupu kvalitu = kompatibilitu s různým hostitelským hardwarem a bezchybný provoz firmwaru v oblasti mapování a wear levelingu... Obchodní značky jako Pretec nebo Transcend prodávají pod jedním objednacím kódem flashky klidně ze čtyř fabrik po světě s různými vnitřnostmi :-(

    Na "transparentní práci s NAND Flash skrz blokovou vrstvu ATA/Flash řadiče" moc nevěřím. Něco málo se hostitel může domáknout, snad velikost erase bloku (při správném zarovnání testovacích transakcí) - ale těžko to někdy bude dokonalé...