Моя рСализация ΠΊΠΎΠ»ΡŒΡ†Π΅Π²ΠΎΠ³ΠΎ Π±ΡƒΡ„Π΅Ρ€Π° Π² NOR flash

ΠŸΡ€Π΅Π΄Ρ‹ΡΡ‚ΠΎΡ€ΠΈΡ

Π•ΡΡ‚ΡŒ Ρ‚ΠΎΡ€Π³ΠΎΠ²Ρ‹Π΅ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚Ρ‹ собствСнной Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ. Π’Π½ΡƒΡ‚Ρ€ΠΈ Raspberry Pi ΠΈ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ обвязки Π½Π° ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΏΠ»Π°Ρ‚Π΅. ΠŸΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½Ρ‹ ΠΌΠΎΠ½Π΅Ρ‚ΠΎΠΏΡ€ΠΈΡ‘ΠΌΠ½ΠΈΠΊ, ΠΊΡƒΠΏΡŽΡ€ΠΎΠΏΡ€ΠΈΡ‘ΠΌΠ½ΠΈΠΊ, банковский тСрминал… УправляСт всСм самописная ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°. Вся история Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΠΈΡˆΠ΅Ρ‚ΡΡ Π² ΠΆΡƒΡ€Π½Π°Π» Π½Π° Ρ„Π»Π΅ΡˆΠΊΠ΅ (MicroSD), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΠΎΡ‚ΠΎΠΌ пСрСдаётся Ρ‡Π΅Ρ€Π΅Π· ΠΈΠ½Ρ‚Π΅Ρ€Π½Π΅Ρ‚ (с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ USB-ΠΌΠΎΠ΄Π΅ΠΌΠ°) Π½Π° сСрвСр, Ρ‚Π°ΠΌ складываСтся Π² Π‘Π”. Π˜Π½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡ ΠΎ ΠΏΡ€ΠΎΠ΄Π°ΠΆΠ°Ρ… загруТаСтся Π² 1с, Ρ‚Π°ΠΊΠΆΠ΅ Π΅ΡΡ‚ΡŒ ΠΏΡ€ΠΎΡΡ‚Π΅Π½ΡŒΠΊΠΈΠΉ Π²Π΅Π±-интСрфСйс для ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³Π° ΠΈ Ρ‚.ΠΏ.

Π’ΠΎ Π΅ΡΡ‚ΡŒ ΠΆΡƒΡ€Π½Π°Π» ΠΆΠΈΠ·Π½Π΅Π½Π½ΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌ β€” для ΡƒΡ‡Ρ‘Ρ‚Π° (Ρ‚Π°ΠΌ Π²Ρ‹Ρ€ΡƒΡ‡ΠΊΠ°, ΠΏΡ€ΠΎΠ΄Π°ΠΆΠΈ ΠΈ Ρ‚.Π΄.), ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³Π° (всСвозмоТныС сбои ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ форс-ΠΌΠ°ΠΆΠΎΡ€Π½Ρ‹Π΅ ΠΎΠ±ΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΡΡ‚Π²Π°); это, ΠΌΠΎΠΆΠ½ΠΎ ΡΠΊΠ°Π·Π°Ρ‚ΡŒ, вся информация, которая Ρƒ нас ΠΎΠ± этом Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚Π΅.

ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ°

ЀлСшки ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ сСбя ΠΊΠ°ΠΊ ΠΎΡ‡Π΅Π½ΡŒ Π½Π΅Π½Π°Π΄Ρ‘ΠΆΠ½Ρ‹Π΅ устройства. Они с Π·Π°Π²ΠΈΠ΄Π½ΠΎΠΉ Ρ€Π΅Π³ΡƒΠ»ΡΡ€Π½ΠΎΡΡ‚ΡŒΡŽ выходят ΠΈΠ· строя. Π­Ρ‚ΠΎ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊΠ°ΠΊ ΠΊ простоям Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΎΠ², Ρ‚Π°ΠΊ ΠΈ (Ссли ΠΏΠΎ ΠΊΠ°ΠΊΠΈΠΌ-Ρ‚ΠΎ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π°ΠΌ ΠΆΡƒΡ€Π½Π°Π» Π½Π΅ ΠΌΠΎΠ³ Π±Ρ‹Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π΄Π°Π½ ΠΎΠ½Π»Π°ΠΉΠ½) ΠΊ потСрям Π΄Π°Π½Π½Ρ‹Ρ….

Π­Ρ‚ΠΎ ΡƒΠΆΠ΅ Π½Π΅ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ ΠΎΠΏΡ‹Ρ‚ использования Ρ„Π»Π΅ΡˆΠ΅ΠΊ, Π΄ΠΎ этого Π±Ρ‹Π» Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ с Π±ΠΎΠ»Π΅Π΅, Ρ‡Π΅ΠΌ сотнСй устройств, Π³Π΄Π΅ ΠΆΡƒΡ€Π½Π°Π» хранился Π½Π° USB-Ρ„Π»Π΅ΡˆΠΊΠ°Ρ…, Ρ‚Π°ΠΌ Ρ‚ΠΎΠΆΠ΅ Π±Ρ‹Π»ΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ с Π½Π°Π΄Ρ‘ΠΆΠ½ΠΎΡΡ‚ΡŒΡŽ, Π²Ρ€Π΅ΠΌΠ΅Π½Π°ΠΌΠΈ число Π²Ρ‹ΡˆΠ΅Π΄ΡˆΠΈΡ… ΠΈΠ· строя Π·Π° мСсяц ΠΈΡΡ‡ΠΈΡΠ»ΡΠ»ΠΎΡΡŒ дСсятками. ΠŸΡ€ΠΎΠ±ΠΎΠ²Π°Π»ΠΈ Ρ€Π°Π·Π½Ρ‹Π΅ Ρ„Π»Π΅ΡˆΠΊΠΈ, Π² Ρ‚ΠΎΠΌ числС ΠΈ Π±Ρ€Π΅Π½Π΄ΠΎΠ²Ρ‹Π΅ Π½Π° SLC памяти, Π΄Π° Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ΄Π΅Π»ΠΈ Π½Π°Π΄Ρ‘ΠΆΠ½Π΅Π΅ Π΄Ρ€ΡƒΠ³ΠΈΡ…, Π½ΠΎ Π·Π°ΠΌΠ΅Π½Π° Ρ„Π»Π΅ΡˆΠ΅ΠΊ Π½Π΅ Ρ€Π΅ΡˆΠΈΠ»Π° ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ ΠΊΠ°Ρ€Π΄ΠΈΠ½Π°Π»ΡŒΠ½ΠΎ.

Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅! Π›ΠΎΠ½Π³Ρ€ΠΈΠ΄! Если Π²Π°ΠΌ нСинтСрСсно «ΠΏΠΎΡ‡Π΅ΠΌΡƒ», Π° интСрСсно Ρ‚ΠΎΠ»ΡŒΠΊΠΎ «ΠΊΠ°ΠΊ», ΠΌΠΎΠΆΠ΅Ρ‚Π΅ сразу ΠΈΠ΄Ρ‚ΠΈ Π² ΠΊΠΎΠ½Π΅Ρ† ΡΡ‚Π°Ρ‚ΡŒΠΈ.

РСшСниС

ΠŸΠ΅Ρ€Π²ΠΎΠ΅, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈΡ…ΠΎΠ΄ΠΈΡ‚ Π² Π³ΠΎΠ»ΠΎΠ²Ρƒ: ΠΎΡ‚ΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ ΠΎΡ‚ MicroSD, ΠΏΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, SSD, ΠΈ Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒΡΡ с Π½Π΅Π³ΠΎ. ВСорСтичСски Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π½Π°Π²Π΅Ρ€Π½ΠΎΠ΅, Π½ΠΎ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π΄ΠΎΡ€ΠΎΠ³ΠΎ, ΠΈ Π½Π΅ Ρ‚Π°ΠΊ ΡƒΠΆ Π½Π°Π΄Ρ‘ΠΆΠ½ΠΎ (добавляСтся ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π½ΠΈΠΊ USB-SATA; ΠΏΠΎ Π±ΡŽΠ΄ΠΆΠ΅Ρ‚Π½Ρ‹ΠΌ SSD статистика ΠΎΡ‚ΠΊΠ°Π·ΠΎΠ² Ρ‚ΠΎΠΆΠ΅ Π½Π΅ Ρ€Π°Π΄ΡƒΠ΅Ρ‚).

USB HDD Ρ‚ΠΎΠΆΠ΅ Π½Π΅ выглядит особо ΠΏΡ€ΠΈΠ²Π»Π΅ΠΊΠ°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ΠΌ.

ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ ΠΏΡ€ΠΈΡˆΠ»ΠΈ ΠΊ Ρ‚Π°ΠΊΠΎΠΌΡƒ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρƒ: ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΡƒ с MicroSD, Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΡ… Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ read-only, Π° ΠΆΡƒΡ€Π½Π°Π» Ρ€Π°Π±ΠΎΡ‚Ρ‹ (ΠΈ Π΄Ρ€ΡƒΠ³ΡƒΡŽ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½ΡƒΡŽ для ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΉ ΠΆΠ΅Π»Π΅Π·ΠΊΠΈ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ β€” сСрийный Π½ΠΎΠΌΠ΅Ρ€, ΠΊΠ°Π»ΠΈΠ±Ρ€ΠΎΠ²ΠΊΠΈ Π΄Π°Ρ‚Ρ‡ΠΈΠΊΠΎΠ², etc) Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Π³Π΄Π΅-Ρ‚ΠΎ Π΅Ρ‰Ρ‘.

Π’Π΅ΠΌΠ° read-only Π€Π‘ для ΠΌΠ°Π»ΠΈΠ½ΠΊΠΈ ΡƒΠΆΠ΅ ΠΈΠ·ΡƒΡ‡Π΅Π½Π° вдоль ΠΈ ΠΏΠΎΠΏΠ΅Ρ€Ρ‘ΠΊ, я Π½Π΅ Π±ΡƒΠ΄Ρƒ ΠΎΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Ρ‚ΡŒΡΡ Π½Π° дСталях Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π² этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ (Π½ΠΎ Ссли Π±ΡƒΠ΄Π΅Ρ‚ интСрСс β€” Π±Ρ‹Ρ‚ΡŒ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈ Π½Π°ΠΏΠΈΡˆΡƒ ΠΌΠΈΠ½ΠΈ-ΡΡ‚Π°Ρ‚ΡŒΡŽ Π½Π° эту Ρ‚Π΅ΠΌΡƒ). ЕдинствСнный ΠΌΠΎΠΌΠ΅Π½Ρ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ хочСтся ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ: ΠΈ ΠΏΠΎ Π»ΠΈΡ‡Π½ΠΎΠΌ ΠΎΠΏΡ‹Ρ‚Ρƒ, ΠΈ ΠΏΠΎ ΠΎΡ‚Π·Ρ‹Π²Π°ΠΌ ΡƒΠΆΠ΅ Π²Π½Π΅Π΄Ρ€ΠΈΠ²ΡˆΠΈΡ… Π²Ρ‹ΠΈΠ³Ρ€Ρ‹Ρˆ Π² надёТности Π΅ΡΡ‚ΡŒ. Π”Π°, ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΠΈΠ·Π±Π°Π²ΠΈΡ‚ΡŒΡΡ ΠΎΡ‚ ΠΏΠΎΠ»ΠΎΠΌΠΎΠΊ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΠΎΠ΄Π½Π°ΠΊΠΎ сущСствСнно ΡΠ½ΠΈΠ·ΠΈΡ‚ΡŒ ΠΈΡ… частоту β€” Π²ΠΏΠΎΠ»Π½Π΅ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎ. Π”Π° ΠΈ ΠΊΠ°Ρ€Ρ‚ΠΎΡ‡ΠΊΠΈ становятся ΡƒΠ½ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌΠΈ, Ρ‡Ρ‚ΠΎ Π·Π°ΠΌΠ΅Ρ‚Π½ΠΎ ΡƒΠΏΡ€ΠΎΡ‰Π°Π΅Ρ‚ Π·Π°ΠΌΠ΅Π½Ρƒ для ΠΎΠ±ΡΠ»ΡƒΠΆΠΈΠ²Π°ΡŽΡ‰Π΅Π³ΠΎ пСрсонала.

Аппаратная Ρ‡Π°ΡΡ‚ΡŒ

Π‘ Π²Ρ‹Π±ΠΎΡ€ΠΎΠΌ Ρ‚ΠΈΠΏΠ° памяти особых сомнСний Π½Π΅ Π±Ρ‹Π»ΠΎ β€” NOR Flash.
АргумСнты:

  • простоС ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ (Ρ‡Π°Ρ‰Π΅ всСго шина SPI, ΠΎΠΏΡ‹Ρ‚ использования ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΡƒΠΆΠ΅ Π΅ΡΡ‚ΡŒ, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ «ΠΆΠ΅Π»Π΅Π·Π½Ρ‹Ρ…» ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ Π½Π΅ прСдвидится);
  • смСшная Ρ†Π΅Π½Π°;
  • стандартный ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ» Ρ€Π°Π±ΠΎΡ‚Ρ‹ (рСализация Π΅ΡΡ‚ΡŒ ΡƒΠΆΠ΅ Π² ядрС Linux, ΠΏΡ€ΠΈ ΠΆΠ΅Π»Π°Π½ΠΈΠΈ ΠΌΠΎΠΆΠ½ΠΎ Π²Π·ΡΡ‚ΡŒ ΡΡ‚ΠΎΡ€ΠΎΠ½Π½ΡŽΡŽ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ‚ΠΎΠΆΠ΅ ΠΏΡ€ΠΈΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‚, ΠΈΠ»ΠΈ Π΄Π°ΠΆΠ΅ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ свою, Π±Π»Π°Π³ΠΎ всё просто);
  • Π½Π°Π΄Ρ‘ΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΈ рСсурс:
    ΠΈΠ· Ρ‚ΠΈΠΏΠΈΡ‡Π½ΠΎΠ³ΠΎ Π΄Π°Ρ‚Π°ΡˆΠΈΡ‚Π°: Π΄Π°Π½Π½Ρ‹Π΅ хранятся 20 Π»Π΅Ρ‚, 100000 Ρ†ΠΈΠΊΠ»ΠΎΠ² erase для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Π±Π»ΠΎΠΊΠ°;
    ΠΈΠ· сторонних источников: ΠΊΡ€Π°ΠΉΠ½Π΅ Π½ΠΈΠ·ΠΊΠΈΠΉ BER, постулируСтся отсутствиС нСобходимости Π² ΠΊΠΎΠ΄Π°Ρ… ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ†ΠΈΠΈ ошибок (Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Ρ€Π°Π±ΠΎΡ‚Π°Ρ… рассматриваСтся ECC для NOR, Π½ΠΎ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ всё-Ρ‚Π°ΠΊΠΈ Ρ‚Π°ΠΌ ΠΈΠΌΠ΅ΡŽΡ‚ Π² Π²ΠΈΠ΄Ρƒ MLC NOR, Π±Ρ‹Π²Π°Π΅Ρ‚ ΠΈ Ρ‚Π°ΠΊΠΎΠ΅).

ΠŸΡ€ΠΈΠΊΠΈΠ½Π΅ΠΌ трСбования ΠΊ ΠΎΠ±ΡŠΡ‘ΠΌΡƒ ΠΈ рСсурсу.

Π₯очСтся, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎ ΡΠΎΡ…Ρ€Π°Π½ΡΠ»ΠΈΡΡŒ Π΄Π°Π½Π½Ρ‹Π΅ Π·Π° нСсколько Π΄Π½Π΅ΠΉ. НуТно это для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π² случаС ΠΊΠ°ΠΊΠΈΡ…-Π»ΠΈΠ±ΠΎ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ со связью история ΠΏΡ€ΠΎΠ΄Π°ΠΆ Π½Π΅ Π±Ρ‹Π»Π° потСряна. Π‘ΡƒΠ΄Π΅ΠΌ ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π½Π° 5 Π΄Π½Π΅ΠΉ, Π·Π° этот срок (Π΄Π°ΠΆΠ΅ с ΡƒΡ‡Ρ‘Ρ‚ΠΎΠΌ Π²Ρ‹Ρ…ΠΎΠ΄Π½Ρ‹Ρ… ΠΈ ΠΏΡ€Π°Π·Π΄Π½ΠΈΠΊΠΎΠ²) ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π΅ΡˆΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ.

Π£ нас сСйчас Π·Π° сутки набираСтся ΠΎΠΊΠΎΠ»ΠΎ 100ΠΊΠ± ΠΆΡƒΡ€Π½Π°Π»Π° (3-4 тысячи записСй), ΠΎΠ΄Π½Π°ΠΊΠΎ постСпСнно эта Ρ†ΠΈΡ„Ρ€Π° растёт β€” увСличиваСтся дСтализация, Π΄ΠΎΠ±Π°Π²Π»ΡΡŽΡ‚ΡΡ Π½ΠΎΠ²Ρ‹Π΅ события. Плюс ΠΈΠ½ΠΎΠ³Π΄Π° Π±Ρ‹Π²Π°ΡŽΡ‚ всплСски (ΠΊΠ°ΠΊΠΎΠΉ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ Π΄Π°Ρ‚Ρ‡ΠΈΠΊ Π½Π°Ρ‡ΠΈΠ½Π°Π΅Ρ‚ ΡΠΏΠ°ΠΌΠΈΡ‚ΡŒ Π»ΠΎΠΆΠ½Ρ‹ΠΌΠΈ срабатываниями, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€). Π‘ΡƒΠ΄Π΅ΠΌ Ρ€Π°ΡΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ Π½Π° 10 тысяч записСй ΠΏΠΎ 100 Π±Π°ΠΉΡ‚ β€” ΠΌΠ΅Π³Π°Π±Π°ΠΉΡ‚ Π² сутки.

Π˜Ρ‚ΠΎΠ³ΠΎ Π²Ρ‹Ρ…ΠΎΠ΄ΠΈΡ‚ 5Мб чистых (Ρ…ΠΎΡ€ΠΎΡˆΠΎ сТимаСмых) Π΄Π°Π½Π½Ρ‹Ρ…. К Π½ΠΈΠΌ Π΅Ρ‰Ρ‘ (грубая ΠΏΡ€ΠΈΠΊΠΈΠ΄ΠΊΠ°) 1Мб слуТСбных Π΄Π°Π½Π½Ρ‹Ρ….

Π’ΠΎ Π΅ΡΡ‚ΡŒ Π½Π°ΠΌ Π½ΡƒΠΆΠ½Π° микросхСма Π½Π° 8Мб Ссли Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ сТатиС, ΠΈΠ»ΠΈ 4Мб Ссли ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ. Π’ΠΏΠΎΠ»Π½Π΅ Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹Π΅ Ρ†ΠΈΡ„Ρ€Ρ‹ для этого Ρ‚ΠΈΠΏΠ° памяти.

Π§Ρ‚ΠΎ ΠΆΠ΅ Π΄ΠΎ рСсурса: Ссли ΠΌΡ‹ ΠΏΠ»Π°Π½ΠΈΡ€ΡƒΠ΅ΠΌ, Ρ‡Ρ‚ΠΎ ΠΏΠ°ΠΌΡΡ‚ΡŒ Ρ†Π΅Π»ΠΈΠΊΠΎΠΌ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅ΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒΡΡ Π½Π΅ Ρ‡Π°Ρ‰Π΅, Ρ‡Π΅ΠΌ Ρ€Π°Π· Π² 5 Π΄Π½Π΅ΠΉ, Ρ‚ΠΎ Π·Π° 10 Π»Π΅Ρ‚ слуТбы ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ ΠΌΠ΅Π½Π΅Π΅ тысячи Ρ†ΠΈΠΊΠ»ΠΎΠ² пСрСзаписи.
Напоминаю, ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒ ΠΎΠ±Π΅Ρ‰Π°Π΅Ρ‚ сто тысяч.

НСмного ΠΏΡ€ΠΎ NOR vs NAND

БСгодня, ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ, ΠΊΡƒΠ΄Π° Π±ΠΎΠ»Π΅Π΅ популярна NAND ΠΏΠ°ΠΌΡΡ‚ΡŒ, ΠΎΠ΄Π½Π°ΠΊΠΎ для этого ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° я Π±Ρ‹ Π½Π΅ стал Π΅Ρ‘ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ: NAND, Π² ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ NOR, ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ использования ΠΊΠΎΠ΄ΠΎΠ² ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ†ΠΈΠΈ ошибок, Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ сбойных Π±Π»ΠΎΠΊΠΎΠ² ΠΈ Ρ‚.Π΄., Π΄Π° ΠΈ Π½ΠΎΠΆΠ΅ΠΊ Ρƒ микросхСм NAND ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΊΡƒΠ΄Π° большС.

Π’ качСствС нСдостатков NOR ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ:

  • ΠΌΠ°Π»Ρ‹ΠΉ ΠΎΠ±ΡŠΡ‘ΠΌ (ΠΈ, соотвСтствСнно, высокая Ρ†Π΅Π½Π° Π·Π° ΠΌΠ΅Π³Π°Π±Π°ΠΉΡ‚);
  • нСвысокая ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ ΠΎΠ±ΠΌΠ΅Π½Π° (Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΎΠΌ ΠΈΠ·-Π·Π° Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ интСрфСйс, ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ SPI ΠΈΠ»ΠΈ I2C);
  • ΠΌΠ΅Π΄Π»Π΅Π½Π½Ρ‹ΠΉ erase (Π² зависимости ΠΎΡ‚ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° Π±Π»ΠΎΠΊΠ°, ΠΎΠ½ Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ ΠΎΡ‚ Π΄ΠΎΠ»Π΅ΠΉ сСкунды, Π΄ΠΎ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… сСкунд).

Π’Ρ€ΠΎΠ΄Π΅ Π±Ρ‹ Π½ΠΈΡ‡Π΅Π³ΠΎ ΠΊΡ€ΠΈΡ‚ΠΈΡ‡Π½ΠΎΠ³ΠΎ для нас, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅ΠΌ.

Если интСрСсны Π΄Π΅Ρ‚Π°Π»ΠΈ, Π±Ρ‹Π»Π° Π²Ρ‹Π±Ρ€Π°Π½Π° микросхСма at25df321a (Π²ΠΏΡ€ΠΎΡ‡Π΅ΠΌ, это нСсущСствСнно, Π½Π° Ρ€Ρ‹Π½ΠΊΠ΅ ΠΊΡƒΡ‡Π° Π°Π½Π°Π»ΠΎΠ³ΠΎΠ², совмСстимых ΠΏΠΎ распиновкС ΠΈ систСмС ΠΊΠΎΠΌΠ°Π½Π΄; Π΄Π°ΠΆΠ΅ Ссли ΠΌΡ‹ Π·Π°Ρ…ΠΎΡ‚ΠΈΠΌ ΠΏΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ микросхСму ΠΎΠ΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ производитСля ΠΈ/ΠΈΠ»ΠΈ Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΡ‘ΠΌΠ°, Ρ‚ΠΎ всё Π·Π°Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π±Π΅Π· измСнСния ΠΊΠΎΠ΄Π°).

Π― ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽ встроСнный Π² ядро Linux Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€, Π½Π° Raspberry благодаря ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ΅ device tree overlay всё ΠΎΡ‡Π΅Π½ΡŒ просто β€” Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚ΡŒ Π² /boot/overlays скомпилированный ΠΎΠ²Π΅Ρ€Π»Π΅ΠΉ ΠΈ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ /boot/config.txt.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ dts Ρ„Π°ΠΉΠ»Π°

ЧСстно говоря, Π½Π΅ ΡƒΠ²Π΅Ρ€Π΅Π½, Ρ‡Ρ‚ΠΎ написано Π±Π΅Π· ошибок, Π½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚.

/*
 * 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?";
    };
};

И Π΅Ρ‰Ρ‘ строчка Π² config.txt

dtoverlay=at25:spimaxfrequency=50000000

ОписаниС самого ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ микросхСмы ΠΊ Raspberry Pi ΠΎΠΏΡƒΡ‰Ρƒ. Π‘ ΠΎΠ΄Π½ΠΎΠΉ стороны, я Π½Π΅ спСциалист Π² элСктроникС, с Π΄Ρ€ΡƒΠ³ΠΎΠΉ β€” Ρ‚ΡƒΡ‚ всё банально Π΄Π°ΠΆΠ΅ для мСня: Ρƒ микросхСмы всСго 8 Π½ΠΎΠ³, ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π½Π°ΠΌ Π½ΡƒΠΆΠ½Ρ‹ зСмля, ΠΏΠΈΡ‚Π°Π½ΠΈΠ΅, SPI (CS, SI, SO, SCK); ΡƒΡ€ΠΎΠ²Π½ΠΈ ΡΠΎΠ²ΠΏΠ°Π΄Π°ΡŽΡ‚ с Ρ‚Π°ΠΊΠΎΠ²Ρ‹ΠΌΠΈ Ρƒ Raspberry Pi, Π½ΠΈΠΊΠ°ΠΊΠΎΠΉ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ обвязки Π½Π΅ трСбуСтся β€” просто ΡΠΎΠ΅Π΄ΠΈΠ½ΠΈΡ‚ΡŒ ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹Π΅ 6 ΠΊΠΎΠ½Ρ‚Π°ΠΊΡ‚ΠΎΠ².

ΠŸΠΎΡΡ‚Π°Π½ΠΎΠ²ΠΊΠ° Π·Π°Π΄Π°Ρ‡ΠΈ

Как ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ, постановка Π·Π°Π΄Π°Ρ‡ΠΈ ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΈΡ‚ нСсколько ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΉ, ΠΌΠ½Π΅ каТСтся, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈΡˆΠ»ΠΎ врСмя для ΠΎΡ‡Π΅Ρ€Π΅Π΄Π½ΠΎΠΉ. Π’Π°ΠΊ Ρ‡Ρ‚ΠΎ Π΄Π°Π²Π°ΠΉΡ‚Π΅ остановимся, собСрём Π²ΠΎΠ΅Π΄ΠΈΠ½ΠΎ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΡƒΠΆΠ΅ Π±Ρ‹Π»ΠΎ написано, ΠΈ проясним ΠΎΡΡ‚Π°Π²ΡˆΠΈΠ΅ΡΡ Π² Ρ‚Π΅Π½ΠΈ Π΄Π΅Ρ‚Π°Π»ΠΈ.

Π˜Ρ‚Π°ΠΊ, ΠΌΡ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠ»ΠΈΡΡŒ с Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ ΠΆΡƒΡ€Π½Π°Π» Π±ΡƒΠ΄Π΅Ρ‚ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒΡΡ Π² SPI NOR Flash.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ NOR Flash для Ρ‚Π΅Ρ…, ΠΊΡ‚ΠΎ Π½Π΅ Π·Π½Π°Π΅Ρ‚

Π­Ρ‚ΠΎ энСргонСзависимая ΠΏΠ°ΠΌΡΡ‚ΡŒ, с ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΌΠΎΠΆΠ½ΠΎ Π΄Π΅Π»Π°Ρ‚ΡŒ Ρ‚Ρ€ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ:

  1. Π§Ρ‚Π΅Π½ΠΈΠ΅:
    Π‘Π°ΠΌΠΎΠ΅ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠ΅ Ρ‡Ρ‚Π΅Π½ΠΈΠ΅: ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‘ΠΌ адрСс ΠΈ Ρ‡ΠΈΡ‚Π°Π΅ΠΌ ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ Π±Π°ΠΉΡ‚, сколько Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ;
  2. Π—Π°ΠΏΠΈΡΡŒ:
    Π—Π°ΠΏΠΈΡΡŒ Π² NOR flash выглядит ΠΊΠ°ΠΊ обычная, Π½ΠΎ Ρƒ Π½Π΅Ρ‘ Π΅ΡΡ‚ΡŒ ΠΎΠ΄Π½Π° ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΡŒ: ΠΌΠΎΠΆΠ½ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΌΠ΅Π½ΡΡ‚ΡŒ 1 Π½Π° 0, Π½ΠΎ Π½Π΅ Π½Π°ΠΎΠ±ΠΎΡ€ΠΎΡ‚. НапримСр, Ссли Ρƒ нас Π² ячСйкС памяти Π»Π΅ΠΆΠ°Π»ΠΎ 0x55, Ρ‚ΠΎ послС записи Π² Π½Π΅Ρ‘ 0x0f Ρ‚Π°ΠΌ ΡƒΠΆΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒΡΡ 0x05 (см. Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ Ρ‡ΡƒΡ‚ΡŒ Π½ΠΈΠΆΠ΅);
  3. Erase:
    РазумССтся, Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΡƒΠΌΠ΅Ρ‚ΡŒ Π΄Π΅Π»Π°Ρ‚ΡŒ ΠΈ ΠΎΠ±Ρ€Π°Ρ‚Π½ΡƒΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ β€” ΠΌΠ΅Π½ΡΡ‚ΡŒ 0 Π½Π° 1, ΠΈΠΌΠ΅Π½Π½ΠΎ для этого ΠΈ сущСствуСт опСрация erase. Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ ΠΏΠ΅Ρ€Π²Ρ‹Ρ… Π΄Π²ΡƒΡ…, ΠΎΠ½Π° ΠΎΠΏΠ΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ Π½Π΅ Π±Π°ΠΉΡ‚Π°ΠΌΠΈ, Π° Π±Π»ΠΎΠΊΠ°ΠΌΠΈ (ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ erase block Π² Π²Ρ‹Π±Ρ€Π°Π½Π½ΠΎΠΉ микросхСмС β€” 4ΠΊΠ±). Erase ΡƒΠ½ΠΈΡ‡Ρ‚ΠΎΠΆΠ°Π΅Ρ‚ вСсь Π±Π»ΠΎΠΊ Ρ†Π΅Π»ΠΈΠΊΠΎΠΌ ΠΈ это СдинствСнный способ ΠΏΠΎΠΌΠ΅Π½ΡΡ‚ΡŒ 0 Π½Π° 1. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ, ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с Ρ„Π»Π΅Ρˆ-ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ часто приходится Π²Ρ‹Ρ€Π°Π²Π½ΠΈΠ²Π°Ρ‚ΡŒ структуры Π΄Π°Π½Π½Ρ‹Ρ… Π½Π° Π³Ρ€Π°Π½ΠΈΡ†Ρƒ erase block.
    Π—Π°ΠΏΠΈΡΡŒ Π² NOR Flash:

Π”Π²ΠΎΠΈΡ‡Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅

Π‘Ρ‹Π»ΠΎ
01010101

Записали
00001111

Π‘Ρ‚Π°Π»ΠΎ
00000101

Π‘Π°ΠΌ ΠΆΡƒΡ€Π½Π°Π» прСдставляСт ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ записСй ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π΄Π»ΠΈΠ½Ρ‹. Випичная Π΄Π»ΠΈΠ½Π° записи ΠΎΠΊΠΎΠ»ΠΎ 30 Π±Π°ΠΉΡ‚ (хотя ΠΈΠ½ΠΎΠ³Π΄Π° ΡΠ»ΡƒΡ‡Π°ΡŽΡ‚ΡΡ ΠΈ записи Π΄Π»ΠΈΠ½ΠΎΠΉ Π² нСсколько ΠΊΠΈΠ»ΠΎΠ±Π°ΠΉΡ‚). Π’ Π΄Π°Π½Π½ΠΎΠΌ случаС ΠΌΡ‹ Ρ€Π°Π±ΠΎΡ‚Π°Π΅ΠΌ с Π½ΠΈΠΌΠΈ просто ΠΊΠ°ΠΊ с Π½Π°Π±ΠΎΡ€ΠΎΠΌ Π±Π°ΠΉΡ‚, Π½ΠΎ, Ссли интСрСсно, Π²Π½ΡƒΡ‚Ρ€ΠΈ записСй ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ CBOR

Помимо ΠΆΡƒΡ€Π½Π°Π»Π°, Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ «Π½Π°ΡΡ‚Ρ€ΠΎΠ΅Ρ‡Π½ΡƒΡŽ» ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ, ΠΊΠ°ΠΊ ΠΎΠ±Π½ΠΎΠ²Π»ΡΠ΅ΠΌΡƒΡŽ, Ρ‚Π°ΠΊ ΠΈ Π½Π΅Ρ‚: Π½Π΅ΠΊΠΈΠΉ ID Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Π°, ΠΊΠ°Π»ΠΈΠ±Ρ€ΠΎΠ²ΠΊΠΈ Π΄Π°Ρ‚Ρ‡ΠΈΠΊΠΎΠ², Ρ„Π»Π°Π³ «Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚ Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½», etc.
Π­Ρ‚Π° информация прСдставляСт ΠΈΠ· сСбя Π½Π°Π±ΠΎΡ€ записСй key-value, Ρ‚Π°ΠΊΠΆΠ΅ хранится Π² CBOR.Π­Ρ‚ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ Ρƒ нас Π½Π΅ ΠΎΡ‡Π΅Π½ΡŒ ΠΌΠ½ΠΎΠ³ΠΎ (максимум нСсколько ΠΊΠΈΠ»ΠΎΠ±Π°ΠΉΡ‚), обновляСтся ΠΎΠ½Π° нСчасто.
Π’ дальнСйшСм Π±ΡƒΠ΄Π΅ΠΌ Π½Π°Π·Ρ‹Π²Π°Ρ‚ΡŒ Π΅Ρ‘ контСкстом.

Если Π²ΡΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ с Ρ‡Π΅Π³ΠΎ Π½Π°Ρ‡ΠΈΠ½Π°Π»Π°ΡΡŒ эта ΡΡ‚Π°Ρ‚ΡŒΡ, Ρ‚ΠΎ ΠΎΡ‡Π΅Π½ΡŒ Π²Π°ΠΆΠ½ΠΎ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ Π½Π°Π΄Ρ‘ΠΆΠ½ΠΎΡΡ‚ΡŒ хранСния Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ, ΠΏΠΎ возмоТности, Π±Π΅ΡΠΏΡ€Π΅Ρ€Ρ‹Π²Π½ΡƒΡŽ Ρ€Π°Π±ΠΎΡ‚Ρƒ Π΄Π°ΠΆΠ΅ Π² случаС Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Π½Ρ‹Ρ… сбоСв/поврСТдСния Π΄Π°Π½Π½Ρ‹Ρ….

КакиС источники ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°ΡΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ?

  • ΠžΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ питания Π² ΠΌΠΎΠΌΠ΅Π½Ρ‚ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ write/erase. Π­Ρ‚ΠΎ ΠΈΠ· разряда «ΠΏΡ€ΠΎΡ‚ΠΈΠ² Π»ΠΎΠΌΠ° Π½Π΅Ρ‚ ΠΏΡ€ΠΈΡ‘ΠΌΠ°».
    Π˜Π½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡ ΠΈΠ· обсуТдСния Π½Π° stackexchange: ΠΏΡ€ΠΈ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΈ питания Π² ΠΌΠΎΠΌΠ΅Π½Ρ‚ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с flash Ρ‡Ρ‚ΠΎ erase (установка Π² 1), Ρ‡Ρ‚ΠΎ write (установка Π² 0) приводят ΠΊ undefined behavior: Π΄Π°Π½Π½Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒΡΡ, Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒΡΡ частично (скаТСм, ΠΌΡ‹ ΠΏΠ΅Ρ€Π΅Π΄Π°Π»ΠΈ 10 Π±Π°ΠΉΡ‚/80 Π±ΠΈΡ‚, Π° успСли Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ 45 Π±ΠΈΡ‚), Π½Π΅ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΎ ΠΈ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Ρ‡Π°ΡΡ‚ΡŒ Π±ΠΈΡ‚ΠΎΠ² окаТСтся Π² «ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½ΠΎΠΌ» состоянии (Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Π΄Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ 0, Ρ‚Π°ΠΊ ΠΈ 1);
  • Ошибки самой flash-памяти.
    BER Ρ…ΠΎΡ‚ΡŒ ΠΈ ΠΎΡ‡Π΅Π½ΡŒ Π½ΠΈΠ·ΠΎΠΊ, Π½ΠΎ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Ρ€Π°Π²Π½Ρ‹ΠΌ Π½ΡƒΠ»ΡŽ;
  • Ошибки ΠΏΠΎ шинС
    Π”Π°Π½Π½Ρ‹Π΅, ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Π΅ΠΌΡ‹Π΅ ΠΏΠΎ SPI Π½ΠΈΠΊΠ°ΠΊ Π½Π΅ Π·Π°Ρ‰ΠΈΡ‰Π΅Π½Ρ‹, Π²ΠΏΠΎΠ»Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΡΠ»ΡƒΡ‡ΠΈΡ‚ΡŒΡΡ ΠΊΠ°ΠΊ ΠΎΠ΄ΠΈΠ½ΠΎΡ‡Π½Ρ‹Π΅ Π±ΠΈΡ‚ΠΎΠ²Ρ‹Π΅ ошибки, Ρ‚Π°ΠΊ ΠΈ ошибки синхронизации β€” потСря ΠΈΠ»ΠΈ вставка Π±ΠΈΡ‚ (Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ массовым искаТСниям Π΄Π°Π½Π½Ρ‹Ρ…);
  • ΠŸΡ€ΠΎΡ‡ΠΈΠ΅ ошибки/сбои
    Ошибки Π² ΠΊΠΎΠ΄Π΅, «Π³Π»ΡŽΠΊΠΈ» Raspberry, Π²ΠΌΠ΅ΡˆΠ°Ρ‚Π΅Π»ΡŒΡΡ‚Π²ΠΎ инопланСтян…

Π― сформулировал трСбования, Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ…, Π½Π° ΠΌΠΎΠΉ взгляд, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ для обСспСчСния надёТности:

  • записи Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΠΎΠΏΠ°Π΄Π°Ρ‚ΡŒ Π²ΠΎ Ρ„Π»Π΅Ρˆ-ΠΏΠ°ΠΌΡΡ‚ΡŒ сразу, отлоТСнная запись Π½Π΅ рассматриваСтся;- Ссли ошибка Π²ΠΎΠ·Π½ΠΈΠΊΠ»Π°, Ρ‚ΠΎ ΠΎΠ½Π° Π΄ΠΎΠ»ΠΆΠ½Π° ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΠ²Π°Ρ‚ΡŒΡΡ ΠΈ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒΡΡ ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°Π½ΡŒΡˆΠ΅;- систСма Π΄ΠΎΠ»ΠΆΠ½Π° ΠΏΠΎ возмоТности Π²ΠΎΡΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Ρ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρƒ послС ошибок.
    (ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΈΠ· ΠΆΠΈΠ·Π½ΠΈ «ΠΊΠ°ΠΊ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ», с ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ, Π΄ΡƒΠΌΠ°ΡŽ, всС Π²ΡΡ‚Ρ€Π΅Ρ‡Π°Π»ΠΈΡΡŒ: послС Π°Π²Π°Ρ€ΠΈΠΉΠ½ΠΎΠΉ ΠΏΠ΅Ρ€Π΅Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ «ΠΏΠΎΠ±ΠΈΠ»Π°ΡΡŒ» файловая систСма ΠΈ опСрационная систСма Π½Π΅ грузится)

ИдСи, ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Ρ‹, Ρ€Π°Π·ΠΌΡ‹ΡˆΠ»Π΅Π½ΠΈΡ

Когда я Π½Π°Ρ‡Π°Π» Π΄ΡƒΠΌΠ°Ρ‚ΡŒ Π½Π°Π΄ этой Π·Π°Π΄Π°Ρ‡Π΅ΠΉ, Ρ‚ΠΎ Π² Π³ΠΎΠ»ΠΎΠ²Π΅ ΠΏΡ€ΠΎΠ½ΠΎΡΠΈΠ»Π°ΡΡŒ ΠΊΡƒΡ‡Π° ΠΈΠ΄Π΅ΠΉ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

  • ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ сТатиС Π΄Π°Π½Π½Ρ‹Ρ…;
  • ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ…ΠΈΡ‚Ρ€Ρ‹Π΅ структуры Π΄Π°Π½Π½Ρ‹Ρ…, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΈ записСй ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ ΠΎΡ‚ самих записСй, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΈ ошибкС Π² ΠΊΠ°ΠΊΠΎΠΉ-Π»ΠΈΠ±ΠΎ записи ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ Π±Π΅Π· ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅;
  • ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π±ΠΈΡ‚ΠΎΠ²Ρ‹Π΅ поля для контроля Π·Π°Π²Π΅Ρ€ΡˆΡ‘Π½Π½ΠΎΡΡ‚ΠΈ записи ΠΏΡ€ΠΈ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΈ питания;
  • Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½Ρ‹Π΅ суммы для всСго ΠΈ вся;
  • ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊΡƒΡŽ-Π»ΠΈΠ±ΠΎ Ρ€Π°Π·Π½ΠΎΠ²ΠΈΠ΄Π½ΠΎΡΡ‚ΡŒ помСхоустойчивого кодирования.

Π§Π°ΡΡ‚ΡŒ этих ΠΈΠ΄Π΅ΠΉ Π±Ρ‹Π»Π° использована, ΠΎΡ‚ части Π±Ρ‹Π»ΠΎ Ρ€Π΅ΡˆΠ΅Π½ΠΎ ΠΎΡ‚ΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ. Π”Π°Π²Π°ΠΉΡ‚Π΅ ΠΏΠΎ порядку.

Π‘ΠΆΠ°Ρ‚ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Ρ…

Π‘Π°ΠΌΠΈ события, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΡ‹ фиксируСм Π² ΠΆΡƒΡ€Π½Π°Π»Π΅, достаточно ΠΎΠ΄Π½ΠΎΡ‚ΠΈΠΏΠ½Ρ‹Π΅ ΠΈ повторяСмыС («ΠΊΠΈΠ½ΡƒΠ»ΠΈ ΠΌΠΎΠ½Π΅Ρ‚ΠΊΡƒ 5 Ρ€ΡƒΠ±Π»Π΅ΠΉ», «Π½Π°ΠΆΠ°Π»ΠΈ Π½Π° ΠΊΠ½ΠΎΠΏΠΊΡƒ Π²Ρ‹Π΄Π°Ρ‡ΠΈ сдачи», …). ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ сТатиС Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ достаточно эффСктивным.

НакладныС расходы Π½Π° сТатиС нСсущСствСнны (процСссор Ρƒ нас достаточно ΠΌΠΎΡ‰Π½Ρ‹ΠΉ, Π΄Π°ΠΆΠ΅ Π½Π° ΠΏΠ΅Ρ€Π²ΠΎΠΌ Pi Π±Ρ‹Π»ΠΎ ΠΎΠ΄Π½ΠΎ ядро с частотой 700ΠœΠ“Ρ†, Π½Π° Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Ρ… модСлях нСсколько ядСр с частотой ΡΠ²Ρ‹ΡˆΠ΅ Π³ΠΈΠ³Π°Π³Π΅Ρ€Ρ†Π°), ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ ΠΎΠ±ΠΌΠ΅Π½Π° с Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ΠΌ нСвысокая (нСсколько ΠΌΠ΅Π³Π°Π±Π°ΠΉΡ‚ Π² сСкунду), Ρ€Π°Π·ΠΌΠ΅Ρ€ записСй Π½Π΅Π²Π΅Π»ΠΈΠΊ. Π’ ΠΎΠ±Ρ‰Π΅ΠΌ, Ссли сТатиС ΠΈ ΠΎΠΊΠ°ΠΆΠ΅Ρ‚ влияниС Π½Π° ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ, Ρ‚ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ (Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½ΠΎ Π½Π΅ΠΊΡ€ΠΈΡ‚ΠΈΡ‡Π½ΠΎ, просто ΠΊΠΎΠ½ΡΡ‚Π°Ρ‚ΠΈΡ€ΡƒΡŽ). Плюс Ρƒ нас ΠΆΠ΅ Π½Π΅ настоящий embedded, Π° ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΉ Linux β€” Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ рСализация Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Π° ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΎ усилий (достаточно просто ΠΏΡ€ΠΈΠ»ΠΈΠ½ΠΊΠΎΠ²Π°Ρ‚ΡŒ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ нСсколько Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΈΠ· Π½Π΅Ρ‘).

Π‘Ρ‹Π» взят кусок Π»ΠΎΠ³Π° с Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰Π΅Π³ΠΎ устройства (1.7Мб, 70 тысяч записСй) ΠΈ для Π½Π°Ρ‡Π°Π»Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€Π΅Π½ Π½Π° ΡΠΆΠΈΠΌΠ°Π΅ΠΌΠΎΡΡ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΡ…ΡΡ Π½Π° ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π΅ gzip, lz4, lzop, bzip2, xz, zstd.

  • gzip, xz, zstd ΠΏΠΎΠΊΠ°Π·Π°Π»ΠΈ Π±Π»ΠΈΠ·ΠΊΠΈΠ΅ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ (40Кб).
    Π£Π΄ΠΈΠ²ΠΈΠ»ΠΎ, Ρ‡Ρ‚ΠΎ ΠΌΠΎΠ΄Π½Ρ‹ΠΉ xz ΠΏΠΎΠΊΠ°Π·Π°Π» Ρ‚ΡƒΡ‚ сСбя Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ gzip ΠΈΠ»ΠΈ zstd;
  • lzip с настройками ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Π΄Π°Π» Ρ‡ΡƒΡ‚ΡŒ Ρ…ΡƒΠ΄ΡˆΠΈΠΉ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚;
  • lz4 ΠΈ lzop ΠΏΠΎΠΊΠ°Π·Π°Π»ΠΈ Π½Π΅ ΠΎΡ‡Π΅Π½ΡŒ Ρ…ΠΎΡ€ΠΎΡˆΠΈΠΉ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ (150Кб);
  • bzip2 ΠΏΠΎΠΊΠ°Π·Π°Π» Π½Π° ΡƒΠ΄ΠΈΠ²Π»Π΅Π½ΠΈΠ΅ Ρ…ΠΎΡ€ΠΎΡˆΠΈΠΉ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ (18Кб).

Π˜Ρ‚Π°ΠΊ, Π΄Π°Π½Π½Ρ‹Π΅ ΡΠΆΠΈΠΌΠ°ΡŽΡ‚ΡΡ ΠΎΡ‡Π΅Π½ΡŒ Ρ…ΠΎΡ€ΠΎΡˆΠΎ.
Π’Π°ΠΊ Ρ‡Ρ‚ΠΎ (Ссли ΠΌΡ‹ Π½Π΅ Π½Π°ΠΉΠ΄Ρ‘ΠΌ Ρ„Π°Ρ‚Π°Π»ΡŒΠ½Ρ‹Ρ… нСдостатков) ΡΠΆΠ°Ρ‚ΠΈΡŽ Π±Ρ‹Ρ‚ΡŒ! ΠŸΡ€ΠΎΡΡ‚ΠΎ ΠΏΠΎΡ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ Π½Π° Ρ‚Ρƒ ΠΆΠ΅ Ρ„Π»Π΅ΡˆΠΊΡƒ помСстится большС Π΄Π°Π½Π½Ρ‹Ρ….

Π”Π°Π²Π°ΠΉΡ‚Π΅ ΠΏΠΎΠ΄ΡƒΠΌΠ°Π΅ΠΌ ΠΎ нСдостатках.

ΠŸΠ΅Ρ€Π²Π°Ρ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°: ΠΌΡ‹ ΡƒΠΆΠ΅ Π΄ΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΠ»ΠΈΡΡŒ, Ρ‡Ρ‚ΠΎ каТдая запись Π΄ΠΎΠ»ΠΆΠ½Π° Π½Π΅Π·Π°ΠΌΠ΅Π΄Π»ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΠΎΠΏΠ°ΡΡ‚ΡŒ Π½Π° Ρ„Π»Π΅Ρˆ. ΠžΠ±Ρ‹Ρ‡Π½ΠΎ Π°Ρ€Ρ…ΠΈΠ²Π°Ρ‚ΠΎΡ€ Π½Π°Π±ΠΈΡ€Π°Π΅Ρ‚ Π΄Π°Π½Π½Ρ‹Π΅ ΠΈΠ· Π²Ρ…ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΏΠΎΡ‚ΠΎΠΊΠ° Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° Π½Π΅ Ρ€Π΅ΡˆΠΈΡ‚, Ρ‡Ρ‚ΠΎ ΠΏΠΎΡ€Π° ΠΏΠΈΡΠ°Ρ‚ΡŒ Π² Π²Ρ‹Ρ…ΠΎΠ΄Π½ΠΎΠΉ. Нам ΠΆΠ΅ Π½ΡƒΠΆΠ½ΠΎ сразу ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ сТатый Π±Π»ΠΎΠΊ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Π΅Π³ΠΎ Π² энСргонСзависимой памяти.

Π― Π²ΠΈΠΆΡƒ Ρ‚Ρ€ΠΈ ΠΏΡƒΡ‚ΠΈ:

  1. Π‘ΠΆΠΈΠΌΠ°Ρ‚ΡŒ ΠΊΠ°ΠΆΠ΄ΡƒΡŽ запись с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ словарного сТатия вмСсто рассмотрСнных Π²Ρ‹ΡˆΠ΅ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ².
    Π’ΠΏΠΎΠ»Π½Π΅ Ρ€Π°Π±ΠΎΡ‡ΠΈΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚, Π½ΠΎ ΠΌΠ½Π΅ ΠΎΠ½ Π½Π΅ нравится. Для обСспСчСния Π±ΠΎΠ»Π΅Π΅-ΠΌΠ΅Π½Π΅Π΅ ΠΏΡ€ΠΈΠ»ΠΈΡ‡Π½ΠΎΠ³ΠΎ уровня сТатия ΡΠ»ΠΎΠ²Π°Ρ€ΡŒ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ «Π·Π°Ρ‚ΠΎΡ‡Π΅Π½» ΠΏΠΎΠ΄ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅, любоС ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΈΠ²Π΅Π΄Ρ‘Ρ‚ ΠΊ Ρ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ сТатия катастрофичСски ΠΏΠ°Π΄Π°Π΅Ρ‚. Π”Π°, ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Ρ€Π΅ΡˆΠ°Π΅Ρ‚ΡΡ созданиСм Π½ΠΎΠ²ΠΎΠΉ вСрсии словаря, Π½ΠΎ это ΠΆΠ΅ головная боль β€” Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ всС вСрсии словаря; Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΉ записи Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ с ΠΊΠ°ΠΊΠΎΠΉ вСрсиСй словаря ΠΎΠ½Π° Π±Ρ‹Π»Π° сТата…
  2. Π‘ΠΆΠΈΠΌΠ°Ρ‚ΡŒ ΠΊΠ°ΠΆΠ΄ΡƒΡŽ запись «ΠΊΠ»Π°ΡΡΠΈΡ‡Π΅ΡΠΊΠΈΠΌΠΈ» Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ°ΠΌΠΈ, Π½ΠΎ нСзависимо ΠΎΡ‚ Π΄Ρ€ΡƒΠ³ΠΈΡ….
    РассматриваСмыС Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ‹ компрСссии Π½Π΅ рассчитаны Π½Π° Ρ€Π°Π±ΠΎΡ‚Ρƒ с записями Ρ‚Π°ΠΊΠΎΠ³ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° (дСсятки Π±Π°ΠΉΡ‚), коэффициСнт сТатия Π±ΡƒΠ΄Π΅Ρ‚ явно мСньшС 1 (Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΠ΅ ΠΎΠ±ΡŠΡ‘ΠΌΠ° Π΄Π°Π½Π½Ρ‹Ρ… вмСсто сТатия);
  3. Π”Π΅Π»Π°Ρ‚ΡŒ FLUSH послС ΠΊΠ°ΠΆΠ΄ΠΎΠΉ записи.
    Π’ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ… Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°Ρ… сТатия Π΅ΡΡ‚ΡŒ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° FLUSH. Π­Ρ‚ΠΎ ΠΊΠΎΠΌΠ°Π½Π΄Π° (ΠΈΠ»ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ ΠΊ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π΅ сТатия), ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ² ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π°Ρ€Ρ…ΠΈΠ²Π°Ρ‚ΠΎΡ€ Ρ„ΠΎΡ€ΠΌΠΈΡ€ΡƒΠ΅Ρ‚ сТатый ΠΏΠΎΡ‚ΠΎΠΊ Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π° Π΅Π³ΠΎ основании ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΎΡΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ всС нСсТатыС Π΄Π°Π½Π½Ρ‹Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡƒΠΆΠ΅ Π±Ρ‹Π»ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Ρ‹. Π’Π°ΠΊΠΎΠΉ Π°Π½Π°Π»ΠΎΠ³ sync Π² Ρ„Π°ΠΉΠ»ΠΎΠ²Ρ‹Ρ… систСмах ΠΈΠ»ΠΈ commit Π² sql.
    Π§Ρ‚ΠΎ Π²Π°ΠΆΠ½ΠΎ, ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ сТатия смогут ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π½Π°ΠΊΠΎΠΏΠ»Π΅Π½Π½Ρ‹ΠΉ ΡΠ»ΠΎΠ²Π°Ρ€ΡŒ ΠΈ ΡΡ‚Π΅ΠΏΠ΅Π½ΡŒ сТатия Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΡΡ‚Ρ€Π°Π΄Π°Ρ‚ΡŒ Ρ‚Π°ΠΊ сильно, ΠΊΠ°ΠΊ Π² ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΌ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π΅.

Π”ΡƒΠΌΠ°ΡŽ ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎ, Ρ‡Ρ‚ΠΎ я Π²Ρ‹Π±Ρ€Π°Π» Ρ‚Ρ€Π΅Ρ‚ΠΈΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚, остановимся Π½Π° Π½Ρ‘ΠΌ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅.

Нашлась отличная ΡΡ‚Π°Ρ‚ΡŒΡ ΠΏΡ€ΠΎ FLUSH Π² zlib.

Π‘Π΄Π΅Π»Π°Π» ΠΏΠΎ ΠΌΠΎΡ‚ΠΈΠ²Π°ΠΌ ΡΡ‚Π°Ρ‚ΡŒΠΈ Π½Π°ΠΊΠΎΠ»Π΅Π½Π½Ρ‹ΠΉ тСст, взял 70 тысяч записСй ΠΆΡƒΡ€Π½Π°Π»Π° с Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ устройства, ΠΏΡ€ΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ€Π΅ страницы Π² 60Кб (ΠΊ Ρ€Π°Π·ΠΌΠ΅Ρ€Ρƒ страницы ΠΌΡ‹ Π΅Ρ‰Ρ‘ вСрнёмся) ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»:

Π˜ΡΡ…ΠΎΠ΄Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅
Π‘ΠΆΠ°Ρ‚ΠΈΠ΅ gzipΒ -9 (Π±Π΅Π·Β FLUSH)
zlib с Z_PARTIAL_FLUSH
zlib с Z_SYNC_FLUSH

ΠžΠ±ΡŠΡ‘ΠΌ, Кб
1692
40
352
604

На ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ взгляд Ρ†Π΅Π½Π°, вносимая FLUSH Ρ‡Ρ€Π΅Π·ΠΌΠ΅Ρ€Π½ΠΎ высока, ΠΎΠ΄Π½Π°ΠΊΠΎ Π½Π° самом Π΄Π΅Π»Π΅ Ρƒ нас Π½Π΅Π±ΠΎΠ³Π°Ρ‚Ρ‹ΠΉ Π²Ρ‹Π±ΠΎΡ€ β€” ΠΈΠ»ΠΈ Π½Π΅ ΡΠΆΠΈΠΌΠ°Ρ‚ΡŒ вовсС, ΠΈΠ»ΠΈ ΡΠΆΠΈΠΌΠ°Ρ‚ΡŒ (ΠΈ вСсьма эффСктивно) с FLUSH. НС Π½Π°Π΄ΠΎ Π·Π°Π±Ρ‹Π²Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ Ρƒ нас 70 тысяч записСй, ΠΈΠ·Π±Ρ‹Ρ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒ, вносимая Z_PARTIAL_FLUSH составляСт всСго 4-5 Π±Π°ΠΉΡ‚ Π½Π° запись. А коэффициСнт сТатия оказался ΠΏΠΎΡ‡Ρ‚ΠΈ 5:1, Ρ‡Ρ‚ΠΎ Π±ΠΎΠ»Π΅Π΅, Ρ‡Π΅ΠΌ ΠΎΡ‚Π»ΠΈΡ‡Π½Ρ‹ΠΉ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚.

ΠœΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ Π½Π΅ΠΎΠΆΠΈΠ΄Π°Π½Π½Ρ‹ΠΌ, Π½ΠΎ Π½Π° самом Π΄Π΅Π»Π΅ Z_SYNC_FLUSH — Π±ΠΎΠ»Π΅Π΅ эффСктивный способ Π΄Π΅Π»Π°Ρ‚ΡŒ FLUSH

Π’ случаС использования Z_SYNC_FLUSH 4 послСдних Π±Π°ΠΉΡ‚Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΉ записи всСгда Π±ΡƒΠ΄ΡƒΡ‚ 0x00, 0x00, 0xff, 0xff. А Ссли ΠΎΠ½ΠΈ Π½Π°ΠΌ извСстны β€” Ρ‚ΠΎ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡ… Π½Π΅ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ, Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΈΡ‚ΠΎΠ³ΠΎΠ²Ρ‹ΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€ оказываСтся всСго 324Кб.

Π’ ΡΡ‚Π°Ρ‚ΡŒΠ΅, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ я ΡΡΡ‹Π»Π°ΡŽΡΡŒ, Π΅ΡΡ‚ΡŒ объяснСниС:

A new type 0 block with empty contents is appended.

A type 0 block with empty contents consists of:

  • the three-bit block header;
  • 0 to 7 bits equal to zero, to achieve byte alignment;
  • the four-byte sequence 00 00 FF FF.

Как нСслоТно Π·Π°ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Π² послСднСм Π±Π»ΠΎΠΊΠ΅ ΠΏΠ΅Ρ€Π΅Π΄ этими 4 Π±Π°ΠΉΡ‚Π°ΠΌΠΈ ΠΈΠ΄Ρ‘Ρ‚ ΠΎΡ‚ 3 Π΄ΠΎ 10 Π½ΡƒΠ»Π΅Π²Ρ‹Ρ… Π±ΠΈΡ‚. Однако ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ° ΠΏΠΎΠΊΠ°Π·Π°Π»Π°, Ρ‡Ρ‚ΠΎ Π½ΡƒΠ»Π΅Π²Ρ‹Ρ… Π±ΠΈΡ‚ Π½Π° самом Π΄Π΅Π»Π΅ ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌ 10.

ΠžΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ΡΡ, ΡΡ‚ΠΎΠ»ΡŒ ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΈΠ΅ Π±Π»ΠΎΠΊΠΈ Π΄Π°Π½Π½Ρ‹Ρ… ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ (всСгда?) ΠΊΠΎΠ΄ΠΈΡ€ΡƒΡŽΡ‚ΡΡ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π±Π»ΠΎΠΊΠ° Ρ‚ΠΈΠΏΠ° 1 (fixed block), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ заканчиваСтся 7 Π½ΡƒΠ»Π΅Π²Ρ‹ΠΌΠΈ Π±ΠΈΡ‚Π°ΠΌΠΈ, ΠΈΡ‚ΠΎΠ³ΠΎ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ 10-17 Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎ Π½ΡƒΠ»Π΅Π²Ρ‹Ρ… Π±ΠΈΡ‚ (Π° ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ Π±ΡƒΠ΄ΡƒΡ‚ Π½ΡƒΠ»Π΅Π²Ρ‹ΠΌΠΈ с Π²Π΅Ρ€ΠΎΡΡ‚Π½ΠΎΡΡ‚ΡŒΡŽ ΠΎΠΊΠΎΠ»ΠΎ 50%).

Π˜Ρ‚Π°ΠΊ, Π½Π° тСстовых Π΄Π°Π½Π½Ρ‹Ρ… Π² 100% случаСв ΠΏΠ΅Ρ€Π΅Π΄ 0x00, 0x00, 0xff, 0xff ΠΈΠ΄Ρ‘Ρ‚ ΠΎΠ΄ΠΈΠ½ Π½ΡƒΠ»Π΅Π²ΠΎΠΉ Π±Π°ΠΉΡ‚, Π° Π±ΠΎΠ»Π΅Π΅, Ρ‡Π΅ΠΌ Π² Ρ‚Ρ€Π΅Ρ‚ΠΈ случаС β€” Π΄Π²Π° Π½ΡƒΠ»Π΅Π²Ρ‹Ρ… Π±Π°ΠΉΡ‚Π° (Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π΄Π΅Π»ΠΎ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ я ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽ Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ CBOR, Π° ΠΏΡ€ΠΈ использовании тСкстового JSON Ρ‡Π°Ρ‰Π΅ Π²ΡΡ‚Ρ€Π΅Ρ‡Π°Π»ΠΈΡΡŒ Π±Ρ‹ Π±Π»ΠΎΠΊΠΈ Ρ‚ΠΈΠΏΠ° 2 β€” dynamic block, соотвСтсвСнно Π²ΡΡ‚Ρ€Π΅Ρ‡Π°Π»ΠΈΡΡŒ Π±Ρ‹ Π±Π»ΠΎΠΊΠΈ Π±Π΅Π· Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… Π½ΡƒΠ»Π΅Π²Ρ‹Ρ… Π±Π°ΠΉΡ‚ ΠΏΠ΅Ρ€Π΅Π΄ 0x00, 0x00, 0xff, 0xff).

Π˜Ρ‚ΠΎΠ³ΠΎ Π½Π° ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΡ…ΡΡ тСстовых Π΄Π°Π½Π½Ρ‹Ρ… ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠ»ΠΎΠΆΠΈΡ‚ΡŒΡΡ Π² ΠΌΠ΅Π½Π΅Π΅, Ρ‡Π΅ΠΌ 250Кб сТатых Π΄Π°Π½Π½Ρ‹Ρ….

МоТно ΡΡΠΊΠΎΠ½ΠΎΠΌΠΈΡ‚ΡŒ Π΅Ρ‰Ρ‘ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ, занявшись ΠΆΠΎΠ½Π³Π»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Π±ΠΈΡ‚Π°ΠΌΠΈ: сСйчас ΠΌΡ‹ ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΡƒΠ΅ΠΌ Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… Π½ΡƒΠ»Π΅Π²Ρ‹Ρ… Π±ΠΈΡ‚ Π² ΠΊΠΎΠ½Ρ†Π΅ Π±Π»ΠΎΠΊΠ°, нСсколько Π±ΠΈΡ‚ Π² Π½Π°Ρ‡Π°Π»Π΅ Π±Π»ΠΎΠΊΠ° Ρ‚Π°ΠΊΠΆΠ΅ Π½Π΅ ΠΌΠ΅Π½ΡΡŽΡ‚ΡΡβ€¦
Но Ρ‚ΡƒΡ‚ я принял Π²ΠΎΠ»Π΅Π²ΠΎΠ΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ ΠΎΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒΡΡ, ΠΈΠ½Π°Ρ‡Π΅ Ρ‚Π°ΠΊΠΈΠΌΠΈ Ρ‚Π΅ΠΌΠΏΠ°ΠΌΠΈ ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠΉΡ‚ΠΈ Π΄ΠΎ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ своСго Π°Ρ€Ρ…ΠΈΠ²Π°Ρ‚ΠΎΡ€Π°.

Π˜Ρ‚ΠΎΠ³ΠΎ, я ΠΈΠ· своих тСстовых Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ» 3-4 Π±Π°ΠΉΡ‚Π° Π½Π° запись, коэффициСнт сТатия получился Π±ΠΎΠ»Π΅Π΅ 6:1. ЧСстно скаТу: я Π½Π° Ρ‚Π°ΠΊΠΎΠΉ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ ΠΈ Π½Π΅ рассчитывал, Π½Π° ΠΌΠΎΠΉ взгляд всё, Ρ‡Ρ‚ΠΎ Π»ΡƒΡ‡ΡˆΠ΅ 2:1 β€” ΡƒΠΆΠ΅ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚, ΠΎΠΏΡ€Π°Π²Π΄Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ использованиС сТатия.

Всё ΠΎΡ‚Π»ΠΈΡ‡Π½ΠΎ, Π½ΠΎ zlib (deflate) β€” всё-Ρ‚Π°ΠΊΠΈ Π°Ρ€Ρ…Π°ΠΈΡ‡Π½Ρ‹ΠΉ заслуТСнный ΠΈ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ старомодный Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ сТатия. Π£ΠΆΠ΅ ΠΎΠ΄Π½ΠΎ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π² качСствС словаря ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ послСдниС 32Кб ΠΈΠ· ΠΏΠΎΡ‚ΠΎΠΊΠ° нСсТатых Π΄Π°Π½Π½Ρ‹Ρ…, сСгодня выглядит странным (Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Ссли ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ Π±Π»ΠΎΠΊ Π΄Π°Π½Π½Ρ‹Ρ… ΠΎΡ‡Π΅Π½ΡŒ ΠΏΠΎΡ…ΠΎΠΆ Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π±Ρ‹Π»ΠΎ Π²ΠΎ Π²Ρ…ΠΎΠ΄Π½ΠΎΠΌ ΠΏΠΎΡ‚ΠΎΠΊΠ΅ 40Кб Π½Π°Π·Π°Π΄, Ρ‚ΠΎ ΠΎΠ½ Π½Π°Ρ‡Π½Ρ‘Ρ‚ Π°Ρ€Ρ…ΠΈΠ²ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π·Π°Π½ΠΎΠ²ΠΎ, Π° Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΡΡΡ‹Π»Π°Ρ‚ΡŒΡΡ Π½Π° ΠΏΡ€ΠΎΡˆΠ»ΠΎΠ΅ Π²Ρ…ΠΎΠΆΠ΄Π΅Π½ΠΈΠ΅). Π’ ΠΌΠΎΠ΄Π½Ρ‹Ρ… соврСмСнных Π°Ρ€Ρ…ΠΈΠ²Π°Ρ‚ΠΎΡ€Π°Ρ… Ρ€Π°Π·ΠΌΠ΅Ρ€ словаря Ρ‡Π°Ρ‰Π΅ измСряСтся ΠΌΠ΅Π³Π°Π±Π°ΠΉΡ‚Π°ΠΌΠΈ, Π° Π½Π΅ ΠΊΠΈΠ»ΠΎΠ±Π°ΠΉΡ‚Π°ΠΌΠΈ.

Π’Π°ΠΊ Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅ΠΌ нашС ΠΌΠΈΠ½ΠΈ-исслСдованиС Π°Ρ€Ρ…ΠΈΠ²Π°Ρ‚ΠΎΡ€ΠΎΠ².

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ Π±Ρ‹Π» ΠΎΠΏΡ€ΠΎΠ±ΠΎΠ²Π°Π½ bzip2 (напоминаю, Π±Π΅Π· FLUSH ΠΎΠ½ ΠΏΠΎΠΊΠ°Π·Π°Π» Ρ„Π°Π½Ρ‚Π°ΡΡ‚ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ ΡΡ‚Π΅ΠΏΠ΅Π½ΡŒ сТатия, ΠΏΠΎΡ‡Ρ‚ΠΈ 100:1). Π£Π²Ρ‹, с FLUSH ΠΎΠ½ ΠΏΠΎΠΊΠ°Π·Π°Π» сСбя ΠΎΡ‡Π΅Π½ΡŒ ΠΏΠ»ΠΎΡ…ΠΎ, Ρ€Π°Π·ΠΌΠ΅Ρ€ сТатых Π΄Π°Π½Π½Ρ‹Ρ… оказался большС, Ρ‡Π΅ΠΌ нСсТатых.

Мои прСдполоТСния ΠΎ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π°Ρ… ΠΏΡ€ΠΎΠ²Π°Π»Π°

Libbz2 ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π΅Ρ‚ всСго ΠΎΠ΄ΠΈΠ½ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ flush, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ, ΠΏΠΎΡ…ΠΎΠΆΠ΅, ΠΎΡ‡ΠΈΡ‰Π°Π΅Ρ‚ ΡΠ»ΠΎΠ²Π°Ρ€ΡŒ (Π°Π½Π°Π»ΠΎΠ³ Z_FULL_FLUSH Π² zlib), Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ΡŒ ΠΎ ΠΊΠ°ΠΊΠΎΠΌ-Ρ‚ΠΎ эффСктивном сТатии послС этого Π½Π΅ приходится.

И послСдним Π±Ρ‹Π» ΠΎΠΏΡ€ΠΎΠ±ΠΎΠ²Π°Π½ zstd. Π’ зависимости ΠΎΡ‚ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² ΠΎΠ½ сТимаСт ΠΈΠ»ΠΈ Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ gzip, Π½ΠΎ Π³ΠΎΡ€Π°Π·Π΄ΠΎ быстрСС, ΠΈΠ»ΠΈ ΠΆΠ΅ Π»ΡƒΡ‡ΡˆΠ΅ gzip.

Π£Π²Ρ‹, с FLUSH ΠΈ ΠΎΠ½ ΠΏΠΎΠΊΠ°Π·Π°Π» сСбя «Π½Π΅ ΠΎΡ‡Π΅Π½ΡŒ»: Ρ€Π°Π·ΠΌΠ΅Ρ€ сТатых Π΄Π°Π½Π½Ρ‹Ρ… Π²Ρ‹ΡˆΠ΅Π» ΠΎΠΊΠΎΠ»ΠΎ 700Кб.

Π― Π·Π°Π΄Π°Π» вопрос Π½Π° страницС ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Π² github, ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ» ΠΎΡ‚Π²Π΅Ρ‚, Ρ‡Ρ‚ΠΎ стоит Ρ€Π°ΡΡΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ Π½Π° Π΄ΠΎ 10 Π±Π°ΠΉΡ‚ слуТСбных Π΄Π°Π½Π½Ρ‹Ρ… Π½Π° ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Π±Π»ΠΎΠΊ сТатых Π΄Π°Π½Π½Ρ‹Ρ…, Ρ‡Ρ‚ΠΎ Π±Π»ΠΈΠ·ΠΊΠΎ ΠΊ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹ΠΌ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°ΠΌ, Π΄ΠΎΠ³Π½Π°Ρ‚ΡŒ deflate Π½ΠΈΠΊΠ°ΠΊ Π½Π΅ получится.

На этом я Ρ€Π΅ΡˆΠΈΠ» ΠΎΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒΡΡ Π² экспСримСнтах с Π°Ρ€Ρ…ΠΈΠ²Π°Ρ‚ΠΎΡ€Π°ΠΌΠΈ (напомню, xz, lzip, lzo, lz4 Π½Π΅ ΠΏΠΎΠΊΠ°Π·Π°Π»ΠΈ сСбя Π΅Ρ‰Ρ‘ Π½Π° этапС тСстирования Π±Π΅Π· FLUSH, Π° Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ экзотичСскиС Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ‹ сТатия я Π½Π΅ стал).

ВозвращаСмся ΠΊ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°ΠΌ Π°Ρ€Ρ…ΠΈΠ²Π°Ρ†ΠΈΠΈ.

Вторая (ΠΊΠ°ΠΊ говорится ΠΏΠΎ порядку, Π° Π½Π΅ ΠΏΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ) ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° β€” сТатыС Π΄Π°Π½Π½Ρ‹Π΅ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ ΠΈΠ· сСбя Π΅Π΄ΠΈΠ½Ρ‹ΠΉ ΠΏΠΎΡ‚ΠΎΠΊ, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ постоянно ΠΈΠ΄ΡƒΡ‚ отсылки Π½Π° ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠ΅ участки. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΏΡ€ΠΈ ΠΏΠΎΠ²Ρ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠΈ ΠΊΠ°ΠΊΠΎΠ³ΠΎ-Ρ‚ΠΎ участка сТатых Π΄Π°Π½Π½Ρ‹Ρ… ΠΌΡ‹ тСряСм Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ связанный с Π½ΠΈΠΌ Π±Π»ΠΎΠΊ нСсТатых Π΄Π°Π½Π½Ρ‹Ρ…, Π½ΠΎ ΠΈ всС ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅.

Π•ΡΡ‚ΡŒ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π° ΠΊ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡŽ этой ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹:

  1. ΠŸΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π°Ρ‚ΡŒ появлСниС ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ β€” Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ Π² сТатыС Π΄Π°Π½Π½Ρ‹Π΅ ΠΈΠ·Π±Ρ‹Ρ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒ, которая ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ ΠΈ ΠΈΡΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ ошибки; ΠΎΠ± этом ΠΌΡ‹ ΠΏΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΠΌ ΠΏΠΎΠ·ΠΆΠ΅;
  2. ΠœΠΈΠ½ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ послСдствия Π² случаС возникновСния ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹
    ΠœΡ‹ ΡƒΠΆΠ΅ Π³ΠΎΠ²ΠΎΡ€ΠΈΠ»ΠΈ Ρ€Π°Π½Π΅Π΅, Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Π±Π»ΠΎΠΊ Π΄Π°Π½Π½Ρ‹Ρ… ΡΠΆΠΈΠΌΠ°Ρ‚ΡŒ нСзависимо, ΠΏΡ€ΠΈ этом ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° исчСзнСт сама собой (ΠΏΠΎΡ€Ρ‡Π° Π΄Π°Π½Π½Ρ‹Ρ… ΠΎΠ΄Π½ΠΎΠ³ΠΎ Π±Π»ΠΎΠΊΠ° ΠΏΡ€ΠΈΠ²Π΅Π΄Ρ‘Ρ‚ ΠΊ ΠΏΠΎΡ‚Π΅Ρ€Π΅ Π΄Π°Π½Π½Ρ‹Ρ… Ρ‚ΠΎΠ»ΡŒΠΊΠΎ этого Π±Π»ΠΎΠΊΠ°). Однако, это ΠΊΡ€Π°ΠΉΠ½ΠΈΠΉ случай, ΠΏΡ€ΠΈ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ сТатиС Π΄Π°Π½Π½Ρ‹Ρ… Π±ΡƒΠ΄Π΅Ρ‚ нСэффСктивно. ΠŸΡ€ΠΎΡ‚ΠΈΠ²ΠΎΠΏΠΎΠ»ΠΎΠΆΠ½Π°Ρ ΠΊΡ€Π°ΠΉΠ½ΠΎΡΡ‚ΡŒ: ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ всС 4Мб нашСй микросхСмы ΠΊΠ°ΠΊ Π΅Π΄ΠΈΠ½Ρ‹ΠΉ Π°Ρ€Ρ…ΠΈΠ², Ρ‡Ρ‚ΠΎ даст Π½Π°ΠΌ ΠΎΡ‚Π»ΠΈΡ‡Π½ΠΎΠ΅ сТатиС, Π½ΠΎ катастрофичСскиС послСдствия Π² случаС ΠΏΠΎΡ€Ρ‡ΠΈ Π΄Π°Π½Π½Ρ‹Ρ….
    Π”Π°, Π½ΡƒΠΆΠ΅Π½ компромисс с Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния надёТности. Но Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ Ρ€Π°Π·Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅ΠΌ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ хранСния Π΄Π°Π½Π½Ρ‹Ρ… для энСргонСзависимой памяти с ΠΊΡ€Π°ΠΉΠ½Π΅ Π½ΠΈΠ·ΠΊΠΈΠΌ BER ΠΈ Π΄Π΅ΠΊΠ»Π°Ρ€ΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΌ сроком хранСния Π΄Π°Π½Π½Ρ‹Ρ… 20 Π»Π΅Ρ‚.

Π’ процСссС экспСримСнтов я ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΠ», Ρ‡Ρ‚ΠΎ Π±ΠΎΠ»Π΅Π΅-ΠΌΠ΅Π½Π΅Π΅ Π·Π°ΠΌΠ΅Ρ‚Π½Ρ‹Π΅ ΠΏΠΎΡ‚Π΅Ρ€ΠΈ уровня сТатия Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‚ΡΡ Π½Π° Π±Π»ΠΎΠΊΠ°Ρ… сТатых Π΄Π°Π½Π½Ρ‹Ρ… Ρ€Π°ΠΌΠ΅Ρ€ΠΎΠΌ ΠΌΠ΅Π½Π΅Π΅ 10Кб.
Π Π°Π½Π΅Π΅ ΡƒΠΏΠΎΠΌΠΈΠ½Π°Π»ΠΎΡΡŒ, Ρ‡Ρ‚ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠ°Ρ ΠΏΠ°ΠΌΡΡ‚ΡŒ ΠΈΠΌΠ΅Π΅Ρ‚ ΡΡ‚Ρ€Π°Π½ΠΈΡ‡Π½ΡƒΡŽ ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΡŽ, я Π½Π΅ Π²ΠΈΠΆΡƒ ΠΏΡ€ΠΈΡ‡ΠΈΠ½, ΠΏΠΎ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ Π½Π΅ стоит ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ соотвСтствиС «ΠΎΠ΄Π½Π° страница β€” ΠΎΠ΄ΠΈΠ½ Π±Π»ΠΎΠΊ сТатых Π΄Π°Π½Π½Ρ‹Ρ…».

Π’ΠΎ Π΅ΡΡ‚ΡŒ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π°Π·ΡƒΠΌΠ½Ρ‹ΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€ страницы Ρ€Π°Π²Π΅Π½ 16Кб (с запасом Π½Π° ΡΠ»ΡƒΠΆΠ΅Π±Π½ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ). Однако ΡΡ‚ΠΎΠ»ΡŒ ΠΌΠ°Π»Ρ‹ΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€ страницы Π½Π°ΠΊΠ»Π°Π΄Ρ‹Π²Π°Π΅Ρ‚ сущСствСнныС ограничСния Π½Π° ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€ записи.

Π₯ΠΎΡ‚ΡŒ Ρƒ мСня ΠΏΠΎΠΊΠ° ΠΈ Π½Π΅ прСдвидится записСй большС Π΅Π΄ΠΈΠ½ΠΈΡ† ΠΊΠΈΠ»ΠΎΠ±Π°ΠΉΡ‚ Π² сТатом Π²ΠΈΠ΄Π΅, я Ρ€Π΅ΡˆΠΈΠ» ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ страницы Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ 32Кб (ΠΈΡ‚ΠΎΠ³ΠΎ получаСтся 128 страниц Π½Π° микросхСму).

РСзюмС:

  • Π”Π°Π½Π½Ρ‹Π΅ ΠΌΡ‹ Ρ…Ρ€Π°Π½ΠΈΠΌ сТатыми с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ zlib (deflate);
  • Для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ записи устанавливаСм Z_SYNC_FLUSH;
  • Π£ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ сТатой записи ΠΎΠ±Ρ€Π΅Π·Π°Π΅ΠΌ ΠΊΠΎΠ½Π΅Ρ‡Π½Ρ‹Π΅ Π±Π°ΠΉΡ‚Ρ‹ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, 0x00, 0x00, 0xff, 0xff); Π² Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ΅ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅ΠΌ ΠΊΠ°ΠΊ ΠΌΠ½ΠΎΠ³ΠΎ Π±Π°ΠΉΡ‚ ΠΌΡ‹ ΠΎΡ‚Ρ€Π΅Π·Π°Π»ΠΈ;
  • Π”Π°Π½Π½Ρ‹Π΅ Ρ…Ρ€Π°Π½ΠΈΠΌ страницами ΠΏΠΎ 32Кб; Π²Π½ΡƒΡ‚Ρ€ΠΈ страницы ΠΈΠ΄Ρ‘Ρ‚ Π΅Π΄ΠΈΠ½Ρ‹ΠΉ ΠΏΠΎΡ‚ΠΎΠΊ сТатых Π΄Π°Π½Π½Ρ‹Ρ…; Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΉ страницС сТатиС Π½Π°Ρ‡ΠΈΠ½Π°Π΅ΠΌ Π·Π°Π½ΠΎΠ²ΠΎ.

И, ΠΏΠ΅Ρ€Π΅Π΄ Ρ‚Π΅ΠΌ ΠΊΠ°ΠΊ Π·Π°ΠΊΠΎΠ½Ρ‡ΠΈΡ‚ΡŒ со сТатиСм, Ρ…ΠΎΡ‚Π΅Π»ΠΎΡΡŒ Π±Ρ‹ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ сТатых Π΄Π°Π½Π½Ρ‹Ρ… Ρƒ нас получаСтся всСго нСсколько Π±Π°ΠΉΡ‚ Π½Π° запись, поэтому ΠΊΡ€Π°ΠΉΠ½Π΅ Π²Π°ΠΆΠ½ΠΎ Π½Π΅ Ρ€Π°Π·Π΄ΡƒΠ²Π°Ρ‚ΡŒ ΡΠ»ΡƒΠΆΠ΅Π±Π½ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ, ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Π±Π°ΠΉΡ‚ Ρ‚ΡƒΡ‚ Π½Π° счСту.

Π₯Ρ€Π°Π½Π΅Π½ΠΈΠ΅ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ…

Π’Π°ΠΊ ΠΊΠ°ΠΊ Ρƒ нас записи ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π΄Π»ΠΈΠ½Ρ‹, Ρ‚ΠΎ Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΊΠ°ΠΊ-Ρ‚ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅/Π³Ρ€Π°Π½ΠΈΡ†Ρ‹ записСй.

Π― знаю Ρ‚Ρ€ΠΈ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π°:

  1. ВсС записи хранятся Π² Π½Π΅ΠΏΡ€Π΅Ρ€Ρ‹Π²Π½ΠΎΠΌ ΠΏΠΎΡ‚ΠΎΠΊΠ΅, сначала ΠΈΠ΄Ρ‘Ρ‚ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ записи, содСрТащий Π΄Π»ΠΈΠ½Ρƒ, Π° ΠΏΠΎΡ‚ΠΎΠΌ сама запись.
    Π’ этом Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π΅ ΠΈ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΈ, ΠΈ Π΄Π°Π½Π½Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ Π΄Π»ΠΈΠ½Ρƒ.
    По сути, Ρƒ нас получаСтся односвязный список, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ сплошь ΠΈ рядом;
  2. Π—Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΈ ΠΈ сами записи хранятся Π² Ρ€Π°Π·Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠΎΡ‚ΠΎΠΊΠ°Ρ….
    Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΈ постоянной Π΄Π»ΠΈΠ½Ρ‹, ΠΌΡ‹ добиваСмся Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ ΠΏΠΎΡ€Ρ‡Π° ΠΎΠ΄Π½ΠΎΠ³ΠΎ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° Π½Π΅ влияСт Π½Π° ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅.
    ΠŸΠΎΠ΄ΠΎΠ±Π½Ρ‹ΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ… Ρ„Π°ΠΉΠ»ΠΎΠ²Ρ‹Ρ… систСмах;
  3. Записи хранятся Π² Π½Π΅ΠΏΡ€Π΅Ρ€Ρ‹Π²Π½ΠΎΠΌ ΠΏΠΎΡ‚ΠΎΠΊΠ΅, Π³Ρ€Π°Π½ΠΈΡ†Π° записи опрСдСляСтся ΠΏΠΎ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ ΠΌΠ°Ρ€ΠΊΠ΅Ρ€Ρƒ (символу/ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ символов, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ/которая Π·Π°ΠΏΡ€Π΅Ρ‰Π΅Π½Ρ‹ Π²Π½ΡƒΡ‚Ρ€ΠΈ Π±Π»ΠΎΠΊΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ…). Если Π²Π½ΡƒΡ‚Ρ€ΠΈ записи встрСчаСтся ΠΌΠ°Ρ€ΠΊΠ΅Ρ€, Ρ‚ΠΎ ΠΌΡ‹ замСняСм Π΅Π³ΠΎ Π½Π° Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ (экранируСм Π΅Π³ΠΎ).
    ΠŸΠΎΠ΄ΠΎΠ±Π½Ρ‹ΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π² ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π΅ PPP.

ΠŸΡ€ΠΎΠΈΠ»Π»ΡŽΡΡ‚Ρ€ΠΈΡ€ΡƒΡŽ.

Π’Π°Ρ€ΠΈΠ°Π½Ρ‚ 1:
Моя рСализация ΠΊΠΎΠ»ΡŒΡ†Π΅Π²ΠΎΠ³ΠΎ Π±ΡƒΡ„Π΅Ρ€Π° Π² NOR flash
Π’ΡƒΡ‚ всё ΠΎΡ‡Π΅Π½ΡŒ просто: зная Π΄Π»ΠΈΠ½Ρƒ записи ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚ΡŒ адрСс ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ°. Π’Π°ΠΊ ΠΌΡ‹ пСрСмСщаСмся ΠΏΠΎ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ°ΠΌ, ΠΏΠΎΠΊΠ° Π½Π΅ встрСтим ΠΎΠ±Π»Π°ΡΡ‚ΡŒ, Π·Π°ΠΏΠΎΠ»Π½Π΅Π½Π½ΡƒΡŽ 0xff (ΡΠ²ΠΎΠ±ΠΎΠ΄Π½ΡƒΡŽ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ) ΠΈΠ»ΠΈ ΠΊΠΎΠ½Π΅Ρ† страницы.

Π’Π°Ρ€ΠΈΠ°Π½Ρ‚ 2:
Моя рСализация ΠΊΠΎΠ»ΡŒΡ†Π΅Π²ΠΎΠ³ΠΎ Π±ΡƒΡ„Π΅Ρ€Π° Π² NOR flash
Из-Π·Π° ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π΄Π»ΠΈΠ½Ρ‹ записи ΠΌΡ‹ Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ Π·Π°Ρ€Π°Π½Π΅Π΅ ΡΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ ΠΌΠ½ΠΎΠ³ΠΎ записСй (Π° Π·Π½Π°Ρ‡ΠΈΡ‚ ΠΈ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΎΠ²) Π½Π° страницу Π½Π°ΠΌ потрСбуСтся. МоТно разнСсти Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΈ ΠΈ сами Π΄Π°Π½Π½Ρ‹Π΅ ΠΏΠΎ Ρ€Π°Π·Π½Ρ‹ΠΌ страницам, Π½ΠΎ ΠΌΠ½Π΅ симпатичнСС Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄: ΠΈ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΈ, ΠΈ Π΄Π°Π½Π½Ρ‹Π΅ Ρ€Π°Π·ΠΌΠ΅Ρ‰Π°Π΅ΠΌ Π½Π° ΠΎΠ΄Π½ΠΎΠΉ страницС, ΠΎΠ΄Π½Π°ΠΊΠΎ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΈ (постоянного Ρ€Π°Π·ΠΌΠ΅Ρ€Π°) Ρƒ нас ΠΈΠ΄ΡƒΡ‚ ΠΎΡ‚ Π½Π°Ρ‡Π°Π»Π° страницы, Π° Π΄Π°Π½Π½Ρ‹Π΅ (ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π΄Π»ΠΈΠ½Ρ‹) β€” ΠΎΡ‚ ΠΊΠΎΠ½Ρ†Π°. Как Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ½ΠΈ «Π²ΡΡ‚рСтятся» (свободного мСста Π½Π΅ Ρ…Π²Π°Ρ‚ΠΈΡ‚ Π½Π° Π½ΠΎΠ²ΡƒΡŽ запись) β€” считаСм эту страницу Π·Π°ΠΏΠΎΠ»Π½Π΅Π½Π½ΠΎΠΉ.

Π’Π°Ρ€ΠΈΠ°Π½Ρ‚ 3:
Моя рСализация ΠΊΠΎΠ»ΡŒΡ†Π΅Π²ΠΎΠ³ΠΎ Π±ΡƒΡ„Π΅Ρ€Π° Π² NOR flash
Π’ΡƒΡ‚ Π½Π΅Ρ‚ Π½ΡƒΠΆΠ΄Ρ‹ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Π² Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ΅ Π΄Π»ΠΈΠ½Ρƒ ΠΈΠ»ΠΈ Π΄Ρ€ΡƒΠ³ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ располоТСнии Π΄Π°Π½Π½Ρ‹Ρ…, достаточно ΠΌΠ°Ρ€ΠΊΠ΅Ρ€ΠΎΠ², ΠΎΠ·Π½Π°Ρ‡Π°ΡŽΡ‰ΠΈΡ… Π³Ρ€Π°Π½ΠΈΡ†Ρ‹ записСй. Однако Π΄Π°Π½Π½Ρ‹Π΅ приходится ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ ΠΏΡ€ΠΈ записи/Ρ‡Ρ‚Π΅Π½ΠΈΠΈ.
Π’ качСствС ΠΌΠ°Ρ€ΠΊΠ΅Ρ€Π° я Π±Ρ‹ использовал 0xff (ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ Π·Π°ΠΏΠΎΠ»Π½Π΅Π½Π° страница послС erase), Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ свободная ΠΎΠ±Π»Π°ΡΡ‚ΡŒ Ρ‚ΠΎΡ‡Π½ΠΎ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Ρ‚Ρ€Π°ΠΊΡ‚ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΊΠ°ΠΊ Π΄Π°Π½Π½Ρ‹Π΅.

Π‘Ρ€Π°Π²Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ Ρ‚Π°Π±Π»ΠΈΡ†Π°:

Π’Π°Ρ€ΠΈΠ°Π½Ρ‚ 1
Π’Π°Ρ€ΠΈΠ°Π½Ρ‚ 2
Π’Π°Ρ€ΠΈΠ°Π½Ρ‚ 3

Π£ΡΡ‚ΠΎΠΉΡ‡ΠΈΠ²ΠΎΡΡ‚ΡŒ ΠΊ ошибкам

+
+

ΠšΠΎΠΌΠΏΠ°ΠΊΡ‚Π½ΠΎΡΡ‚ΡŒ
+

+

Π‘Π»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ
*
**
**

Π’Π°Ρ€ΠΈΠ°Π½Ρ‚ 1 ΠΈΠΌΠ΅Π΅Ρ‚ Ρ„Π°Ρ‚Π°Π»ΡŒΠ½Ρ‹ΠΉ нСдостаток: ΠΏΡ€ΠΈ ΠΏΠΎΠ²Ρ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠΈ ΠΊΠ°ΠΊΠΎΠ³ΠΎ-Ρ‚ΠΎ ΠΈΠ· Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΎΠ² Ρƒ нас Ρ€Π°Π·Ρ€ΡƒΡˆΠ°Π΅Ρ‚ΡΡ вся ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π°Ρ Ρ†Π΅ΠΏΠΎΡ‡ΠΊΠ°. ΠžΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ Π²ΠΎΡΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Ρ‡Π°ΡΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Ρ… Π΄Π°ΠΆΠ΅ ΠΏΡ€ΠΈ массовых поврСТдСниях.
Но Ρ‚ΡƒΡ‚ умСстно Π²ΡΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ Ρ€Π΅ΡˆΠΈΠ»ΠΈ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ Π² сТатом Π²ΠΈΠ΄Π΅, Ρ‚Π°ΠΊ ΠΈ Ρ‚Π°ΠΊ ΠΌΡ‹ тСряСм всС Π΄Π°Π½Π½Ρ‹Π΅ Π½Π° страницС послС «Π±ΠΈΡ‚ΠΎΠΉ» записи, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ Ρ…ΠΎΡ‚ΡŒ Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ ΠΈ стоит минус, ΠΌΡ‹ Π΅Π³ΠΎ Π½Π΅ ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°Π΅ΠΌ.

ΠšΠΎΠΌΠΏΠ°ΠΊΡ‚Π½ΠΎΡΡ‚ΡŒ:

  • Π² ΠΏΠ΅Ρ€Π²ΠΎΠΌ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π΅ Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Π² Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π΄Π»ΠΈΠ½Ρƒ, Ссли ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ†Π΅Π»Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π΄Π»ΠΈΠ½Ρ‹, Ρ‚ΠΎ Π² Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ случаСв ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±ΠΎΠΉΡ‚ΠΈΡΡŒ ΠΎΠ΄Π½ΠΈΠΌ Π±Π°ΠΉΡ‚ΠΎΠΌ;
  • Π²ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΌ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π΅ Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹ΠΉ адрСс ΠΈ Π΄Π»ΠΈΠ½Ρƒ; запись Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ постоянного Ρ€Π°Π·ΠΌΠ΅Ρ€Π°, я ΠΎΡ†Π΅Π½ΠΈΠ²Π°ΡŽ Π² 4 Π±Π°ΠΉΡ‚Π° Π½Π° запись (Π΄Π²Π° Π±Π°ΠΉΡ‚Π° Π½Π° смСщСниС, ΠΈ Π΄Π²Π° Π±Π°ΠΉΡ‚Π° Π½Π° Π΄Π»ΠΈΠ½Ρƒ);
  • Ρ‚Ρ€Π΅Ρ‚ΡŒΠ΅ΠΌΡƒ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρƒ достаточно всСго ΠΎΠ΄Π½ΠΎΠ³ΠΎ символа для обозначСния Π½Π°Ρ‡Π°Π»Π° записи, плюс сама запись ΠΈΠ·-Π·Π° экранирования вырастСт Π½Π° 1-2%. Π’ Ρ†Π΅Π»ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½Ρ‹ΠΉ ΠΏΠ°Ρ€ΠΈΡ‚Π΅Ρ‚ с ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠΌ.

Π˜Π·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ я рассматривал Π²Ρ‚ΠΎΡ€ΠΎΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ ΠΊΠ°ΠΊ основной (ΠΈ Π΄Π°ΠΆΠ΅ написал Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ). ΠžΡ‚ΠΊΠ°Π·Π°Π»ΡΡ ΠΎΡ‚ Π½Π΅Π³ΠΎ я Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚ΠΎΠ³Π΄Π°, ΠΊΠΎΠ³Π΄Π° ΠΎΠΊΠΎΠ½Ρ‡Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Ρ€Π΅ΡˆΠΈΠ» ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ сТатиС.

Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΠΊΠΎΠ³Π΄Π°-Π½ΠΈΠ±ΡƒΠ΄ΡŒ я всё-Ρ‚Π°ΠΊΠΈ Π±ΡƒΠ΄Ρƒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹ΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚. НапримСр, Ссли ΠΌΠ½Π΅ придётся Π·Π°Π½ΠΈΠΌΠ°Ρ‚ΡŒΡΡ Ρ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ΠΌ Π΄Π°Π½Π½Ρ‹Ρ… для корабля, ΠΊΡƒΡ€ΡΠΈΡ€ΡƒΡŽΡ‰Π΅Π³ΠΎ ΠΌΠ΅ΠΆΠ΄Ρƒ Π—Π΅ΠΌΠ»Ρ‘ΠΉ ΠΈ ΠœΠ°Ρ€ΡΠΎΠΌ β€” совсСм Π΄Ρ€ΡƒΠ³ΠΈΠ΅ трСбования ΠΊ надёТности, космичСскоС ΠΈΠ·Π»ΡƒΡ‡Π΅Π½ΠΈΠ΅, …

Π§Ρ‚ΠΎ ΠΆΠ΅ Π΄ΠΎ Ρ‚Ρ€Π΅Ρ‚ΡŒΠ΅Π³ΠΎ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π°: я поставил Π΅ΠΌΡƒ Π΄Π²Π΅ Π·Π²Ρ‘Π·Π΄ΠΎΡ‡ΠΊΠΈ Π·Π° ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ просто ΠΏΠΎΡ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ Π½Π΅ люблю Π²ΠΎΠ·ΠΈΡ‚ΡŒΡΡ с экранированиСм, ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ΠΌ Π΄Π»ΠΈΠ½Ρ‹ Π² процСссС ΠΈ Ρ‚.ΠΏ. Π”Π°, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, прСдвзято, Π½ΠΎ ΠΊΠΎΠ΄ ΠΏΠΈΡΠ°Ρ‚ΡŒ придётся ΠΌΠ½Π΅ β€” Π·Π°Ρ‡Π΅ΠΌ Π·Π°ΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ сСбя Π΄Π΅Π»Π°Ρ‚ΡŒ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π½Π΅ нравится.

РСзюмС: Π²Ρ‹Π±ΠΈΡ€Π°Π΅ΠΌ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ хранСния Π² Π²ΠΈΠ΄Π΅ Ρ†Π΅ΠΏΠΎΡ‡Π΅ΠΊ «Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ с Π΄Π»ΠΈΠ½ΠΎΠΉ β€” Π΄Π°Π½Π½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π΄Π»ΠΈΠ½Ρ‹» ΠΈΠ·-Π·Π° эффСктивности ΠΈ простоты Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ.

ИспользованиС Π±ΠΈΡ‚ΠΎΠ²Ρ‹Ρ… ΠΏΠΎΠ»Π΅ΠΉ для контроля ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΡΡ‚ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ записи

Π£ΠΆΠ΅ сСйчас Π½Π΅ помню, Π³Π΄Π΅ я подсмотрСл идСю, Π½ΠΎ выглядит всё ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ Ρ‚Π°ΠΊ:
Для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ записи выдСляСм нСсколько Π±ΠΈΡ‚ для хранСния Ρ„Π»Π°Π³ΠΎΠ².
Как ΠΌΡ‹ Π³ΠΎΠ²ΠΎΡ€ΠΈΠ»ΠΈ Ρ€Π°Π½Π΅Π΅, послС erase всС Π±ΠΈΡ‚Ρ‹ Π·Π°ΠΏΠΎΠ»Π½Π΅Π½Ρ‹ 1, ΠΈ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ 1 Π½Π° 0, Π½ΠΎ Π½Π΅ Π½Π°ΠΎΠ±ΠΎΡ€ΠΎΡ‚. Π’Π°ΠΊ Ρ‡Ρ‚ΠΎ для «Ρ„Π»Π°Π³ Π½Π΅ установлСн» ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ 1, для «Ρ„Π»Π°Π³ установлСн» β€” 0.

Π’ΠΎΡ‚ ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ ΠΏΠΎΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ записи ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π΄Π»ΠΈΠ½Ρ‹ Π²ΠΎ flash:

  1. УстанавливаСм Ρ„Π»Π°Π³ β€œΠ·Π°ΠΏΠΈΡΡŒ Π΄Π»ΠΈΠ½Ρ‹ Π½Π°Ρ‡Π°Π»Π°ΡΡŒβ€;
  2. ЗаписываСм Π΄Π»ΠΈΠ½Ρƒ;
  3. УстанавливаСм Ρ„Π»Π°Π³ β€œΠ·Π°ΠΏΠΈΡΡŒ Π΄Π°Π½Π½Ρ‹Ρ… Π½Π°Ρ‡Π°Π»Π°ΡΡŒβ€;
  4. ЗаписываСм Π΄Π°Π½Π½Ρ‹Π΅;
  5. УстанавливаСм Ρ„Π»Π°Π³ β€œΠ·Π°ΠΏΠΈΡΡŒ Π·Π°ΠΊΠΎΠ½Ρ‡ΠΈΠ»Π°ΡΡŒβ€.

ΠšΡ€ΠΎΠΌΠ΅ этого, Ρƒ нас Π±ΡƒΠ΄Π΅Ρ‚ Ρ„Π»Π°Π³ β€œΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»Π° ΠΎΡˆΠΈΠ±ΠΊΠ°β€, ΠΈΡ‚ΠΎΠ³ΠΎ 4 Π±ΠΈΡ‚ΠΎΠ²Ρ‹Ρ… Ρ„Π»Π°Π³Π°.

Π’ этом случаС Ρƒ нас Π΅ΡΡ‚ΡŒ Π΄Π²Π° ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½Ρ‹Ρ… состояния β€œ1111” β€” запись Π½Π΅ Π½Π°Ρ‡Π°Π»Π°ΡΡŒ ΠΈ β€œ1000” β€” запись ΠΏΡ€ΠΎΡˆΠ»Π° ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ; Π² случаС Π½Π΅ΠΏΡ€Π΅Π΄Π²ΠΈΠ΄Π΅Π½Π½ΠΎΠ³ΠΎ прСрывания процСсса записи ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½Ρ‹Π΅ состояния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΡ‹ ΠΏΠΎΡ‚ΠΎΠΌ ΠΌΡ‹ смоТСм ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΡ‚ΡŒ ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ.

ΠŸΠΎΠ΄Ρ…ΠΎΠ΄ интСрСсный, Π½ΠΎ ΠΎΠ½ Π·Π°Ρ‰ΠΈΡ‰Π°Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΡ‚ Π²Π½Π΅Π·Π°ΠΏΠ½ΠΎΠ³ΠΎ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ питания ΠΈ ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Ρ… сбоСв, Ρ‡Ρ‚ΠΎ, ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ, Π²Π°ΠΆΠ½ΠΎ, ΠΎΠ΄Π½Π°ΠΊΠΎ это Π΄Π°Π»Π΅ΠΊΠΎ Π½Π΅ СдинствСнная (ΠΈ Π΄Π°ΠΆΠ΅ Π½Π΅ основная) ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Ρ… сбоСв.

РСзюмС: ΠΈΠ΄Ρ‘ΠΌ дальшС Π² поисках Ρ…ΠΎΡ€ΠΎΡˆΠ΅Π³ΠΎ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ.

ΠšΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½Ρ‹Π΅ суммы

ΠšΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½Ρ‹Π΅ суммы Ρ‚ΠΎΠΆΠ΅ Π΄Π°ΡŽΡ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΡƒΠ΄ΠΎΡΡ‚ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒΡΡ (с достаточной Π²Π΅Ρ€ΠΎΡΡ‚Π½ΠΎΡΡ‚ΡŒΡŽ) Ρ‡Ρ‚ΠΎ ΠΌΡ‹ Ρ‡ΠΈΡ‚Π°Π΅ΠΌ ΠΈΠΌΠ΅Π½Π½ΠΎ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ Π±Ρ‹Ρ‚ΡŒ записано. И, Π² ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ рассмотрСнных Π²Ρ‹ΡˆΠ΅ Π±ΠΈΡ‚ΠΎΠ²Ρ‹Ρ… ΠΏΠΎΠ»Π΅ΠΉ, ΠΎΠ½ΠΈ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ всСгда.

Если Ρ€Π°ΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ список ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… источников ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ, ΠΎ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΌΡ‹ Π³ΠΎΠ²ΠΎΡ€ΠΈΠ»ΠΈ Π²Ρ‹ΡˆΠ΅, Ρ‚ΠΎ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½Π°Ρ сумма способна Ρ€Π°ΡΠΏΠΎΠ·Π½Π°Ρ‚ΡŒ ΠΎΡˆΠΈΠ±ΠΊΡƒ нСзависимо ΠΎΡ‚ Π΅Ρ‘ происхоТдСния (Π·Π° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ, ΠΏΠΎΠΆΠ°Π»ΡƒΠΉ, Π·Π»ΠΎΠΊΠΎΠ·Π½Π΅Π½Π½Ρ‹Ρ… инопланСтян β€” Ρ‚Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠΎΠ΄Π΄Π΅Π»Π°Ρ‚ΡŒ ΠΈ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½ΡƒΡŽ сумму Ρ‚ΠΎΠΆΠ΅).

Π’Π°ΠΊ Ρ‡Ρ‚ΠΎ, Ссли наша Ρ†Π΅Π»ΡŒ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π΄Π°Π½Π½Ρ‹Π΅ Ρ†Π΅Π»Ρ‹, ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½Ρ‹Π΅ суммы β€” отличная идСя.

Π’Ρ‹Π±ΠΎΡ€ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° вычислСния ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½ΠΎΠΉ суммы вопросов Π½Π΅ Π²Ρ‹Π·Ρ‹Π²Π°Π» β€” CRC. Π‘ ΠΎΠ΄Π½ΠΎΠΉ стороны, матСматичСскиС свойства ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ Π² 100% Π»ΠΎΠ²ΠΈΡ‚ΡŒ ошибки Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ², с Π΄Ρ€ΡƒΠ³ΠΎΠΉ β€” Π½Π° случайных Π΄Π°Π½Π½Ρ‹Ρ… ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ этот Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π²Π΅Ρ€ΠΎΡΡ‚Π½ΠΎΡΡ‚ΡŒ ΠΊΠΎΠ»Π»ΠΈΠ·ΠΈΠΉ Π½Π΅ сильно большС тСорСтичСского ΠΏΡ€Π΅Π΄Π΅Π»Π° Моя рСализация ΠΊΠΎΠ»ΡŒΡ†Π΅Π²ΠΎΠ³ΠΎ Π±ΡƒΡ„Π΅Ρ€Π° Π² NOR flash. ΠŸΡƒΡΡ‚ΡŒ это Π½Π΅ самый быстрый Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ, Π½Π΅ всСгда ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΠΎ числу ΠΊΠΎΠ»Π»ΠΈΠ·ΠΈΠΉ, Π½ΠΎ Ρƒ Π½Π΅Π³ΠΎ Π΅ΡΡ‚ΡŒ ΠΎΡ‡Π΅Π½ΡŒ Π²Π°ΠΆΠ½ΠΎΠ΅ качСство: Π²ΠΎ Π²ΡΡ‚Ρ€Π΅Ρ‡Π°Π²ΡˆΠΈΡΡ ΠΌΠ½Π΅ тСстах Π½Π΅ попадались ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½Ρ‹, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΎΠ½ Π±Ρ‹ явно проваливался. Π‘Ρ‚Π°Π±ΠΈΠ»ΡŒΠ½ΠΎΡΡ‚ΡŒ β€” это Π³Π»Π°Π²Π½ΠΎΠ΅ качСство Π² Π΄Π°Π½Π½ΠΎΠΌ случаС.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΠΎΠ±ΡŠΡ‘ΠΌΠ½ΠΎΠ³ΠΎ исслСдования: Ρ‡Π°ΡΡ‚ΡŒ 1, Ρ‡Π°ΡΡ‚ΡŒ 2 (ссылки Π½Π° narod.ru, ΠΈΠ·Π²ΠΈΠ½ΠΈΡ‚Π΅).

Однако Π·Π°Π΄Π°Ρ‡Π° Π²Ρ‹Π±ΠΎΡ€Π° ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½ΠΎΠΉ суммы Π½Π΅ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½Π°, CRC β€” это Ρ†Π΅Π»ΠΎΠ΅ сСмСйство ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½Ρ‹Ρ… сумм. НуТно ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒΡΡ с Π΄Π»ΠΈΠ½ΠΎΠΉ, Π° ΠΏΠΎΡ‚ΠΎΠΌ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ ΠΏΠΎΠ»ΠΈΠ½ΠΎΠΌ.

Π’Ρ‹Π±ΠΎΡ€ Π΄Π»ΠΈΠ½Ρ‹ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½ΠΎΠΉ суммы Π½Π΅ Ρ‚Π°ΠΊΠΎΠΉ простой вопрос, ΠΊΠ°ΠΊ каТСтся с ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ взгляда.

ΠŸΡ€ΠΎΠΈΠ»Π»ΡŽΡΡ‚Ρ€ΠΈΡ€ΡƒΡŽ:
ΠŸΡƒΡΡ‚ΡŒ Ρƒ нас Π²Π΅Ρ€ΠΎΡΡ‚Π½ΠΎΡΡ‚ΡŒ ошибки Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΌ Π±Π°ΠΉΡ‚Π΅ Моя рСализация ΠΊΠΎΠ»ΡŒΡ†Π΅Π²ΠΎΠ³ΠΎ Π±ΡƒΡ„Π΅Ρ€Π° Π² NOR flash ΠΈ идСальная ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½Π°Ρ сумма, посчитаСм срСднСС число ошибок Π½Π° ΠΌΠΈΠ»Π»ΠΈΠΎΠ½ записСй:

Π”Π°Π½Π½Ρ‹Π΅, Π±Π°ΠΉΡ‚
ΠšΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½Π°ΡΒ ΡΡƒΠΌΠΌΠ°, Π±Π°ΠΉΡ‚
НСобнаруТСнных ошибок
Π›ΠΎΠΆΠ½Ρ‹Ρ… ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½ΠΈΠΉ ошибок
Π˜Ρ‚ΠΎΠ³ΠΎ Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹Ρ… срабатываний

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

Казалось Π±Ρ‹, всё просто β€” Π²Ρ‹Π±ΠΈΡ€Π°ΠΉ Π² зависимости ΠΎΡ‚ Π΄Π»ΠΈΠ½Ρ‹ Π·Π°Ρ‰ΠΈΡ‰Π°Π΅ΠΌΡ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ… Π΄Π»ΠΈΠ½Ρƒ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½ΠΎΠΉ суммы с ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌΠΎΠΌ Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹Ρ… срабатываний β€” ΠΈ Π΄Π΅Π»ΠΎ Π² шляпС.

Однако, с ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΈΠΌΠΈ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½Ρ‹ΠΌΠΈ суммами Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°: ΠΎΠ½ΠΈ, Ρ…ΠΎΡ‚ΡŒ ΠΈ Ρ…ΠΎΡ€ΠΎΡˆΠΎ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΠ²Π°ΡŽΡ‚ Π΅Π΄ΠΈΠ½ΠΈΡ‡Π½Ρ‹Π΅ Π±ΠΈΡ‚ΠΎΠ²Ρ‹Π΅ ошибки, ΠΌΠΎΠ³ΡƒΡ‚ с достаточно большой Π²Π΅Ρ€ΠΎΡΡ‚Π½ΠΎΡΡ‚ΡŒΡŽ ΠΏΡ€ΠΈΠ½ΡΡ‚ΡŒ Π·Π° Π²Π΅Ρ€Π½Ρ‹Π΅ ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½Π½ΠΎ случайныС Π΄Π°Π½Π½Ρ‹Π΅. На Ρ…Π°Π±Ρ€Π΅ ΡƒΠΆΠ΅ Π±Ρ‹Π»Π° ΡΡ‚Π°Ρ‚ΡŒΡ, ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‰Π°Ρ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ Π² Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΉ ΠΆΠΈΠ·Π½ΠΈ.

ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ случайноС совпадСниС ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½ΠΎΠΉ суммы практичСски Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹ΠΌ, Π½ΡƒΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½Ρ‹Π΅ суммы Π΄Π»ΠΈΠ½ΠΎΠΉ 32 Π±ΠΈΡ‚Π° ΠΈ Π±ΠΎΠ»Π΅Π΅ (для Π΄Π»ΠΈΠ½ Π±ΠΎΠ»Π΅Π΅ 64 Π±ΠΈΡ‚ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ криптографичСскиС Ρ…ΡΡˆ-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ).

НСсмотря Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Ρ€Π°Π½Π΅Π΅ я писал, Ρ‡Ρ‚ΠΎ Π½ΡƒΠΆΠ½ΠΎ ΡΠΊΠΎΠ½ΠΎΠΌΠΈΡ‚ΡŒ мСсто всСми силами, всё-Ρ‚Π°ΠΊΠΈ Π±ΡƒΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ 32-Π±ΠΈΡ‚Π½ΡƒΡŽ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½ΡƒΡŽ сумму (16 Π±ΠΈΡ‚ ΠΌΠ°Π»ΠΎ, Π²Π΅Ρ€ΠΎΡΡ‚Π½ΠΎΡΡ‚ΡŒ ΠΊΠΎΠ»Π»ΠΈΠ·ΠΈΠΈ большС 0.01%; Π° 24 Π±ΠΈΡ‚Π°, ΠΊΠ°ΠΊ говорится, Π½ΠΈ Ρ‚ΡƒΠ΄Π° ΠΈ Π½ΠΈ сюда).

Π’ΡƒΡ‚ ΠΌΠΎΠΆΠ΅Ρ‚ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΡƒΡ‚ΡŒ Π²ΠΎΠ·Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅: для Ρ‚ΠΎΠ³ΠΎ Π»ΠΈ ΠΌΡ‹ экономили ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Π±Π°ΠΉΡ‚ ΠΏΡ€ΠΈ Π²Ρ‹Π±ΠΎΡ€Π΅ сТатия, Ρ‡Ρ‚ΠΎΠ±Ρ‹ сСйчас ΠΎΡ‚Π΄Π°Ρ‚ΡŒ 4 Π±Π°ΠΉΡ‚Π° сразу? Π½Π΅ Π»ΡƒΡ‡ΡˆΠ΅ Π»ΠΈ Π±Ρ‹Π»ΠΎ Π½Π΅ ΡΠΆΠΈΠΌΠ°Ρ‚ΡŒ ΠΈ Π½Π΅ Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½ΡƒΡŽ сумму? ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ Π½Π΅Ρ‚, отсутствиС сТатия Π½Π΅ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° цСлостности Π½Π°ΠΌ Π½Π΅ Π½ΡƒΠΆΠ½Π°.

По Π²Ρ‹Π±ΠΎΡ€Ρƒ ΠΏΠΎΠ»ΠΈΠ½ΠΎΠΌΠ° Π½Π΅ Π±ΡƒΠ΄Π΅ΠΌ ΠΈΠ·ΠΎΠ±Ρ€Π΅Ρ‚Π°Ρ‚ΡŒ вСлосипСд, Π° Π²ΠΎΠ·ΡŒΠΌΡ‘ΠΌ популярный сСйчас CRC-32C.
Π­Ρ‚ΠΎΡ‚ ΠΊΠΎΠ΄ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΠ²Π°Π΅Ρ‚ 6 Π±ΠΈΡ‚ΠΎΠ²Ρ‹Ρ… ошибок Π½Π° ΠΏΠ°ΠΊΠ΅Ρ‚Π°Ρ… Π΄ΠΎ 22 Π±Π°ΠΉΡ‚ (ΠΏΠΎΠΆΠ°Π»ΡƒΠΉ, самый частый случай для Π½Π°c), 4 Π±ΠΈΡ‚ΠΎΠ²Ρ‹Π΅ ошибки Π½Π° ΠΏΠ°ΠΊΠ΅Ρ‚Π°Ρ… Π΄ΠΎ 655 Π±Π°ΠΉΡ‚ (Ρ‚ΠΎΠΆΠ΅ частый случай для нас), 2 ΠΈΠ»ΠΈ любоС Π½Π΅Ρ‡Ρ‘Ρ‚Π½ΠΎΠ΅ число Π±ΠΈΡ‚ΠΎΠ²Ρ‹Ρ… ошибок Π½Π° ΠΏΠ°ΠΊΠ΅Ρ‚Π°Ρ… любой Ρ€Π°Π·ΡƒΠΌΠ½ΠΎΠΉ Π΄Π»ΠΈΠ½Ρ‹.

Если ΠΊΠΎΠΌΡƒ интСрСсны Π΄Π΅Ρ‚Π°Π»ΠΈ

Π‘Ρ‚Π°Ρ‚ΡŒΡ Π²ΠΈΠΊΠΈΠΏΠ΅Π΄ΠΈΠΈ ΠΏΡ€ΠΎ CRC.

ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ ΠΊΠΎΠ΄Π° crc-32c Π½Π° сайтС ΠšΡƒΠΏΠΌΠ°Π½Π° β€” ΠΏΠΎΠΆΠ°Π»ΡƒΠΉ, Π³Π»Π°Π²Π½ΠΎΠ³ΠΎ спСциалиста ΠΏΠΎ CRC Π½Π° ΠΏΠ»Π°Π½Π΅Ρ‚Π΅.

Π’ Π΅Π³ΠΎ ΡΡ‚Π°Ρ‚ΡŒΠ΅ Π΅ΡΡ‚ΡŒ Π΅Ρ‰Ρ‘ ΠΎΠ΄ΠΈΠ½ интСрСсный ΠΊΠΎΠ΄, ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°ΡŽΡ‰ΠΈΠΉ Ρ‡ΡƒΡ‚ΡŒ Π»ΡƒΡ‡ΡˆΠΈΠ΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ для Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Ρ… для нас Π΄Π»ΠΈΠ½ ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ², Π½ΠΎ я Π½Π΅ посчитал Ρ€Π°Π·Π½ΠΈΡ†Ρƒ сущСствСнной, Π° сСбя достаточно ΠΊΠΎΠΌΠΏΠ΅Ρ‚Π΅Π½Ρ‚Π½Ρ‹ΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ кастомный ΠΊΠΎΠ΄ вмСсто стандартного ΠΈ Ρ…ΠΎΡ€ΠΎΡˆΠΎ исслСдованного.

Π•Ρ‰Ρ‘, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Ρƒ нас Π΄Π°Π½Π½Ρ‹Π΅ сТаты, Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ вопрос: ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½ΡƒΡŽ сумму сТатых ΠΈΠ»ΠΈ нСсТатых Π΄Π°Π½Π½Ρ‹Ρ…?

АргумСнты «Π·Π°» подсчёт ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½ΠΎΠΉ суммы нСсТатых Π΄Π°Π½Π½Ρ‹Ρ…:

  • Π½Π°ΠΌ Π² ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠΌ ΠΈΡ‚ΠΎΠ³Π΅ Π½ΡƒΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ ΡΠΎΡ…Ρ€Π°Π½Π½ΠΎΡΡ‚ΡŒ хранСния Π΄Π°Π½Π½Ρ‹Ρ… β€” Π²ΠΎΡ‚ ΠΌΡ‹ Π΅Ρ‘ Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ ΠΈ провСряСм (ΠΏΡ€ΠΈ этом Π±ΡƒΠ΄ΡƒΡ‚ Π·Π°ΠΎΠ΄Π½ΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€Π΅Π½Ρ‹ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Π΅ ошибки Π² Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ компрСссии/дСкомпрСссии, поврСТдСния, Π²Ρ‹Π·Π²Π°Π½Π½Ρ‹Π΅ Π±ΠΈΡ‚ΠΎΠΉ ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ ΠΈ Ρ‚.ΠΏ.);
  • Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ deflate Π² zlib ΠΈΠΌΠ΅Π΅Ρ‚ достаточно Π·Ρ€Π΅Π»ΡƒΡŽ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ ΠΈ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΠ°Π΄Π°Ρ‚ΡŒ ΠΏΡ€ΠΈ «ΠΊΡ€ΠΈΠ²Ρ‹Ρ…» Π²Ρ…ΠΎΠ΄Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ…, Π±ΠΎΠ»Π΅Π΅ Ρ‚ΠΎΠ³ΠΎ, Π·Π°Ρ‡Π°ΡΡ‚ΡƒΡŽ ΠΎΠ½ способСн ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΡ‚ΡŒ ошибки Π²ΠΎ Π²Ρ…ΠΎΠ΄Π½ΠΎΠΌ ΠΏΠΎΡ‚ΠΎΠΊΠ΅, снизив ΠΎΠ±Ρ‰ΡƒΡŽ Π²Π΅Ρ€ΠΎΡΡ‚Π½ΠΎΡΡ‚ΡŒ нСобнаруТСния ошибки (ΠΏΡ€ΠΎΠ²Ρ‘Π» тСст с ΠΈΠ½Π²Π΅Ρ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΎΠ΄ΠΈΠ½ΠΎΡ‡Π½ΠΎΠ³ΠΎ Π±ΠΈΡ‚Π° Π² ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΎΠΉ записи, zlib ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΠ» ΠΎΡˆΠΈΠ±ΠΊΡƒ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ Π² Ρ‚Ρ€Π΅Ρ‚ΠΈ случаСв).

АргумСнты «ΠΏΡ€ΠΎΡ‚ΠΈΠ²» подсчёта ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½ΠΎΠΉ суммы нСсТатых Π΄Π°Π½Π½Ρ‹Ρ…:

  • CRC «Π·Π°Ρ‚ΠΎΡ‡Π΅Π½» ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΏΠΎΠ΄ нСмногочислСнныС Π±ΠΈΡ‚ΠΎΠ²Ρ‹Π΅ ошибки, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ…Π°Ρ€Π°ΠΊΡ‚Π΅Ρ€Π½Ρ‹ для Ρ„Π»Π΅Ρˆ-памяти (битовая ошибка Π² сТатом ΠΏΠΎΡ‚ΠΎΠΊΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π΄Π°Ρ‚ΡŒ массовоС ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π²Ρ‹Ρ…ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΏΠΎΡ‚ΠΎΠΊΠ°, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ, чисто тСорСтичСски, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ «ΠΏΠΎΠΉΠΌΠ°Ρ‚ΡŒ» коллизию);
  • ΠΌΠ½Π΅ Π½Π΅ ΠΎΡ‡Π΅Π½ΡŒ нравится идСя ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ дСкомпрСссору ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎ Π±ΠΈΡ‚Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅, ΠΊΡ‚ΠΎ Π΅Π³ΠΎ Π·Π½Π°Π΅Ρ‚, ΠΊΠ°ΠΊ ΠΎΠ½ ΠΎΡ‚Ρ€Π΅Π°Π³ΠΈΡ€ΡƒΠ΅Ρ‚.

Π’ Π΄Π°Π½Π½ΠΎΠΌ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅ я Ρ€Π΅ΡˆΠΈΠ» ΠΎΡ‚ΠΎΠΉΡ‚ΠΈ ΠΎΡ‚ общСпринятой ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠΈ хранСния ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½ΠΎΠΉ суммы нСсТатых Π΄Π°Π½Π½Ρ‹Ρ….

РСзюмС: ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ CRC-32C, ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½ΡƒΡŽ сумму считаСм ΠΎΡ‚ Π΄Π°Π½Π½Ρ‹Ρ… Π² Ρ‚ΠΎΠΌ Π²ΠΈΠ΄Π΅, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΎΠ½ΠΈ Π·Π°ΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ΡΡ Π²ΠΎ flash (послС сТатия).

Π˜Π·Π±Ρ‹Ρ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒ

ИспользованиС ΠΈΠ·Π±Ρ‹Ρ‚ΠΎΡ‡Π½ΠΎΠ³ΠΎ кодирования Π½Π΅ позволяСт, ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ, ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ ΠΏΠΎΡ‚Π΅Ρ€ΡŽ Π΄Π°Π½Π½Ρ‹Ρ…, ΠΎΠ΄Π½Π°ΠΊΠΎ, ΠΎΠ½ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ сущСствСнно (Π·Π°Ρ‡Π°ΡΡ‚ΡƒΡŽ Π½Π° ΠΌΠ½ΠΎΠ³ΠΈΠ΅ порядки) ΡΠ½ΠΈΠ·ΠΈΡ‚ΡŒ Π²Π΅Ρ€ΠΎΡΡ‚Π½ΠΎΡΡ‚ΡŒ нСвосстановимой ΠΏΠΎΡ‚Π΅Ρ€ΠΈ Π΄Π°Π½Π½Ρ‹Ρ….

ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ€Π°Π·Π½Ρ‹Π΅ Π²ΠΈΠ΄Ρ‹ избыточности для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΡΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ ошибки.
ΠšΠΎΠ΄Ρ‹ Π₯эмминга ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΡΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ ΠΎΠ΄ΠΈΠ½ΠΎΡ‡Π½Ρ‹Π΅ Π±ΠΈΡ‚ΠΎΠ²Ρ‹Π΅ ошибки, ΠΊΠΎΠ΄Ρ‹ Π ΠΈΠ΄Π°-Π‘ΠΎΠ»ΠΎΠΌΠΎΠ½Π° ΡΠΈΠΌΠ²ΠΎΠ»ΡŒΠ½Ρ‹Π΅, нСсколько ΠΊΠΎΠΏΠΈΠΉ Π΄Π°Π½Π½Ρ‹Ρ… совмСстно с ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½Ρ‹ΠΌΠΈ суммами ΠΈΠ»ΠΈ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π²Ρ€ΠΎΠ΄Π΅ RAID-6 ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠΎΠΌΠΎΡ‡ΡŒ Π²ΠΎΡΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ Π΄Π°ΠΆΠ΅ Π² случаС массовых ΠΏΠΎΠ²Ρ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠΉ.
Π˜Π·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ я Π±Ρ‹Π» настроСн Π½Π° ΡˆΠΈΡ€ΠΎΠΊΠΎΠ΅ использованиС помСхоустойчивого кодирования, Π½ΠΎ ΠΏΠΎΡ‚ΠΎΠΌ понял, Ρ‡Ρ‚ΠΎ сначала Π½ΡƒΠΆΠ½ΠΎ ΠΈΠΌΠ΅Ρ‚ΡŒ прСдставлСниС ΠΎΡ‚ ΠΊΠ°ΠΊΠΈΡ… ошибок ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ Π·Π°Ρ‰ΠΈΡ‚ΠΈΡ‚ΡŒΡΡ, Π° ΠΏΠΎΡ‚ΠΎΠΌ ΡƒΠΆΠ΅ Π²Ρ‹Π±ΠΈΡ€Π°Ρ‚ΡŒ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅.

ΠœΡ‹ Π³ΠΎΠ²ΠΎΡ€ΠΈΠ»ΠΈ Ρ€Π°Π½Π΅Π΅, Ρ‡Ρ‚ΠΎ ошибки Π½ΡƒΠΆΠ½ΠΎ Π²Ρ‹ΡΠ²Π»ΡΡ‚ΡŒ ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ быстрСС. Π’ ΠΊΠ°ΠΊΠΈΠ΅ ΠΌΠΎΠΌΠ΅Π½Ρ‚Ρ‹ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΡΡ‚ΠΎΠ»ΠΊΠ½ΡƒΡ‚ΡŒΡΡ с ошибками?

  1. НСзакончСнная запись (ΠΏΠΎ ΠΊΠ°ΠΊΠΈΠΌ-Π»ΠΈΠ±ΠΎ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π°ΠΌ Π² ΠΌΠΎΠΌΠ΅Π½Ρ‚ записи ΠΎΡ‚ΠΊΠ»ΡŽΡ‡ΠΈΠ»ΠΎΡΡŒ ΠΏΠΈΡ‚Π°Π½ΠΈΠ΅, завис Raspberry, …)
    Π£Π²Ρ‹, Π² случаС ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠΉ ошибки остаётся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π½Π΅Π²Π°Π»ΠΈΠ΄Π½Ρ‹Π΅ записи ΠΈ ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ потСрянными;
  2. Ошибки записи (ΠΏΠΎ ΠΊΠ°ΠΊΠΈΠΌ-Π»ΠΈΠ±ΠΎ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π°ΠΌ Π² flash-ΠΏΠ°ΠΌΡΡ‚ΡŒ записалось Π½Π΅ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π·Π°ΠΏΠΈΡΡ‹Π²Π°Π»ΠΎΡΡŒ)
    ΠŸΠΎΠ΄ΠΎΠ±Π½Ρ‹Π΅ ошибки ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ сразу ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΡ‚ΡŒ, Ссли ΠΌΡ‹ нСпосрСдствСнно послС записи Π±ΡƒΠ΄Π΅ΠΌ Π΄Π΅Π»Π°Ρ‚ΡŒ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½ΠΎΠ΅ Ρ‡Ρ‚Π΅Π½ΠΈΠ΅;
  3. ИскаТСниС Π΄Π°Π½Π½Ρ‹Ρ… Π² памяти Π² процСссС хранСния;
  4. Ошибки чтСния
    Для исправлСния достаточно Π² случаС нСсовпадСния ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½ΠΎΠΉ суммы нСсколько Ρ€Π°Π· ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΠΈΡ‚ΡŒ Ρ‡Ρ‚Π΅Π½ΠΈΠ΅.

Π’ΠΎ Π΅ΡΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ошибки Ρ‚Ρ€Π΅Ρ‚ΡŒΠ΅Π³ΠΎ Ρ‚ΠΈΠΏΠ° (ΡΠ°ΠΌΠΎΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½Π°Ρ ΠΏΠΎΡ€Ρ‡Π° Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΡ€ΠΈ Ρ…Ρ€Π°Π½Π΅Π½ΠΈΠΈ) Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ исправлСны Π±Π΅Π· помСхоустойчивого кодирования. ДумаСтся, ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Π΅ ошибки всё-Ρ‚Π°ΠΊΠΈ ΠΊΡ€Π°ΠΉΠ½Π΅ маловСроятны.

РСзюмС: Π±Ρ‹Π»ΠΎ Ρ€Π΅ΡˆΠ΅Π½ΠΎ ΠΎΡ‚ΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ ΠΎΡ‚ ΠΈΠ·Π±Ρ‹Ρ‚ΠΎΡ‡Π½ΠΎΠ³ΠΎ кодирования, Π½ΠΎ, Ссли эксплуатация ΠΏΠΎΠΊΠ°ΠΆΠ΅Ρ‚ ΠΎΡˆΠΈΠ±ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒ этого Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ, Ρ‚ΠΎ Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒΡΡ ΠΊ Ρ€Π°ΡΡΠΌΠΎΡ‚Ρ€Π΅Π½ΠΈΡŽ вопроса (с ΡƒΠΆΠ΅ Π½Π°ΠΊΠΎΠΏΠ»Π΅Π½Π½ΠΎΠΉ статистикой ΠΏΠΎ сбоям, которая ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ Π²ΠΈΠ΄ кодирования).

ΠŸΡ€ΠΎΡ‡Π΅Π΅

РазумССтся, Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ ΡΡ‚Π°Ρ‚ΡŒΠΈ Π½Π΅ позволяСт ΠΎΠ±ΠΎΡΠ½ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Π±ΠΈΡ‚ Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ (Π΄Π° ΠΈ Ρƒ мСня ΡƒΠΆΠ΅ иссякли силы), поэтому ΠΊΡ€Π°Ρ‚ΠΊΠΎ ΠΏΡ€ΠΎΠ±Π΅Π³ΡƒΡΡŒ ΠΏΠΎ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ ΠΌΠΎΠΌΠ΅Π½Ρ‚Π°ΠΌ, Π½Π΅ Π·Π°Ρ‚Ρ€ΠΎΠ½ΡƒΡ‚Ρ‹ΠΌ Ρ€Π°Π½Π΅Π΅.

  • РСшСно Π΄Π΅Π»Π°Ρ‚ΡŒ всС страницы «Ρ€Π°Π²Π½ΠΎΠΏΡ€Π°Π²Π½Ρ‹ΠΌΠΈ»
    Π’ΠΎ Π΅ΡΡ‚ΡŒ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΊΠ°ΠΊΠΈΡ…-Ρ‚ΠΎ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… страниц с ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹ΠΌΠΈ, ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌΠΈ ΠΈ Ρ‚.ΠΏ., вмСсто этого Π΅Π΄ΠΈΠ½Ρ‹ΠΉ ΠΏΠΎΡ‚ΠΎΠΊ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ пСрСписываСт всС страницы ΠΏΠΎ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ.
    Π­Ρ‚ΠΎ обСспСчиваСт Ρ€Π°Π²Π½ΠΎΠΌΠ΅Ρ€Π½Ρ‹ΠΉ износ страниц, остутствиС Π΅Π΄ΠΈΠ½ΠΎΠΉ Ρ‚ΠΎΡ‡ΠΊΠΈ ΠΎΡ‚ΠΊΠ°Π·Π°, Π½Ρƒ ΠΈ просто нравится;
  • ΠžΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Π½ΡƒΠΆΠ½ΠΎ ΠΏΡ€Π΅Π΄ΡƒΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Π²Π΅Ρ€ΡΠΈΠΎΠ½Π½ΠΎΡΡ‚ΡŒ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π°.
    Π€ΠΎΡ€ΠΌΠ°Ρ‚ Π±Π΅Π· Π½ΠΎΠΌΠ΅Ρ€Π° вСрсии Π² Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ΅ β€” Π·Π»ΠΎ!
    Достаточно Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π² Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ страницы ΠΏΠΎΠ»Π΅ с Π½Π΅ΠΊΠΈΠΌ Magic Number (сигнатурой), ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Π½Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° (Π½Π΅ Π΄ΡƒΠΌΠ°ΡŽ, Ρ‡Ρ‚ΠΎ ΠΈΡ… Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ Π΄Π°ΠΆΠ΅ дСсяток);
  • Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для записСй (ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΎΡ‡Π΅Π½ΡŒ ΠΌΠ½ΠΎΠ³ΠΎ) Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π΄Π»ΠΈΠ½Ρ‹, ΡΡ‚Π°Ρ€Π°ΡΡΡŒ для Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π° случаСв ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π΅Π³ΠΎ Π΄Π»ΠΈΠ½ΠΎΠΉ Π² 1 Π±Π°ΠΉΡ‚;
  • Для кодирования Π΄Π»ΠΈΠ½Ρ‹ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° ΠΈ Π΄Π»ΠΈΠ½Ρ‹ ΠΎΠ±Ρ€Π΅Π·Π°Π΅ΠΌΠΎΠΉ части сТатой записи ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π±ΠΈΠ½Π°Ρ€Π½Ρ‹Π΅ ΠΊΠΎΠ΄Ρ‹ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π΄Π»ΠΈΠ½Ρ‹.

ΠžΡ‡Π΅Π½ΡŒ ΠΏΠΎΠΌΠΎΠ³ ΠΎΠ½Π»Π°ΠΉΠ½-Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ ΠΊΠΎΠ΄ΠΎΠ² Π₯Π°Ρ„Ρ„ΠΌΠ°Π½Π°. Π‘ΡƒΠΊΠ²Π°Π»ΡŒΠ½ΠΎ Π·Π° нСсколько ΠΌΠΈΠ½ΡƒΡ‚ ΡƒΠ΄Π°Π»ΠΎΡΡŒ ΠΏΠΎΠ΄ΠΎΠ±Ρ€Π°Ρ‚ΡŒ Π½ΡƒΠΆΠ½Ρ‹Π΅ ΠΊΠΎΠ΄Ρ‹ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π΄Π»ΠΈΠ½Ρ‹.

ОписаниС Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° хранСния Π΄Π°Π½Π½Ρ‹Ρ…

Byte order

Поля, Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ ΠΏΡ€Π΅Π²Ρ‹ΡˆΠ°ΡŽΡ‰ΠΈΠ΅ ΠΎΠ΄ΠΈΠ½ Π±Π°ΠΉΡ‚, хранятся Π² big-endian Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ (network byte order), Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ 0x1234 записываСтся ΠΊΠ°ΠΊ 0x12, 0x34.

Π”Π΅Π»Π΅Π½ΠΈΠ΅ Π½Π° страницы

Вся Ρ„Π»Π΅Ρˆ-ΠΏΠ°ΠΌΡΡ‚ΡŒ Ρ€Π°Π·Π±ΠΈΡ‚Π° Π½Π° страницы Ρ€Π°Π²Π½ΠΎΠ³ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€Π°.

Π Π°Π·ΠΌΠ΅Ρ€ страницы ΠΏΠΎ ΡƒΠΌΠΎΡ‡Π°Π½ΠΈΡŽ 32Кб, Π½ΠΎ Π½Π΅ Π±ΠΎΠ»Π΅Π΅, Ρ‡Π΅ΠΌ 1/4 ΠΎΡ‚ ΠΎΠ±Ρ‰Π΅Π³ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° микросхСмы памяти (для микросхСмы Π½Π° 4Мб получаСтся 128 страниц).

КаТдая страница Ρ…Ρ€Π°Π½ΠΈΡ‚ Π΄Π°Π½Π½Ρ‹Π΅ нСзависимо ΠΎΡ‚ Π΄Ρ€ΡƒΠ³ΠΈΡ… (Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ ΠΎΠ΄Π½ΠΎΠΉ страницы Π½Π΅ ΡΡΡ‹Π»Π°ΡŽΡ‚ΡΡ Π½Π° Π΄Π°Π½Π½Ρ‹Π΅ Π΄Ρ€ΡƒΠ³ΠΎΠΉ страницы).

ВсС страницы ΠΏΡ€ΠΎΠ½ΡƒΠΌΠ΅Ρ€ΠΎΠ²Π°Π½Ρ‹ Π² СстСствСнном порядкС (Π² порядкС возрастания адрСсов), начиная с Π½ΠΎΠΌΠ΅Ρ€Π° 0 (нулСвая страница начинаСтся с адрСса 0, пСрвая β€” с 32Кб, вторая β€” с 64Кб ΠΈ Ρ‚.Π΄.)

ΠœΠΈΠΊΡ€ΠΎΡΡ…Π΅ΠΌΠ° памяти ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΊΠ°ΠΊ цикличСский Π±ΡƒΡ„Π΅Ρ€ (ring buffer), Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ сначала запись ΠΈΠ΄Ρ‘Ρ‚ Π² страницу с Π½ΠΎΠΌΠ΅Ρ€ΠΎΠΌ 0, ΠΏΠΎΡ‚ΠΎΠΌ с Π½ΠΎΠΌΠ΅Ρ€ΠΎΠΌ 1, …, ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ заполняСм ΠΏΠΎΡΠ»Π΅Π΄Π½ΡƒΡŽ страницу, Ρ‚ΠΎ начинаСтся Π½ΠΎΠ²Ρ‹ΠΉ Ρ†ΠΈΠΊΠ» ΠΈ запись продолТаСтся с Π½ΡƒΠ»Π΅Π²ΠΎΠΉ страницы.

Π’Π½ΡƒΡ‚Ρ€ΠΈ страницы

Моя рСализация ΠΊΠΎΠ»ΡŒΡ†Π΅Π²ΠΎΠ³ΠΎ Π±ΡƒΡ„Π΅Ρ€Π° Π² NOR flash
Π’ Π½Π°Ρ‡Π°Π»Π΅ страницы хранится 4-Π±Π°ΠΉΡ‚Π½Ρ‹ΠΉ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ страницы, ΠΏΠΎΡ‚ΠΎΠΌ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½Π°Ρ сумма Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° (CRC-32C), Π΄Π°Π»Π΅Π΅ хранятся записи Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ «Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ, Π΄Π°Π½Π½Ρ‹Π΅, ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½Π°Ρ сумма».

Π—Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ страницы (Π½Π° схСмС грязно-Π·Π΅Π»Ρ‘Π½Ρ‹ΠΉ) состоит ΠΈΠ·:

  • Π΄Π²ΡƒΡ…Π±Π°ΠΉΡ‚Π½ΠΎΠ³ΠΎ поля Magic Number (ΠΎΠ½ ΠΆΠ΅ β€” ΠΏΡ€ΠΈΠ·Π½Π°ΠΊ вСрсии Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π°)
    для Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ вСрсии Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° ΠΎΠ½ считаСтся ΠΊΠ°ΠΊ 0xed00 βŠ• Π½ΠΎΠΌΠ΅Ρ€ страницы;
  • Π΄Π²ΡƒΡ…Π±Π°ΠΉΡ‚Π½ΠΎΠ³ΠΎ счётчика «Π’Π΅Ρ€ΡΠΈΡ страницы» (Π½ΠΎΠΌΠ΅Ρ€ Ρ†ΠΈΠΊΠ»Π° пСрСзаписи памяти).

Записи Π½Π° страницС хранятся Π² сТатом Π²ΠΈΠ΄Π΅ (ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ deflate). ВсС записи Π½Π° ΠΎΠ΄Π½ΠΎΠΉ страницС ΡΠΆΠΈΠΌΠ°ΡŽΡ‚ΡΡ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΏΠΎΡ‚ΠΎΠΊΠ΅ (ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΎΠ±Ρ‰ΠΈΠΉ ΡΠ»ΠΎΠ²Π°Ρ€ΡŒ), Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π½ΠΎΠ²ΠΎΠΉ страницС сТатиС начинаСтся Π·Π°Π½ΠΎΠ²ΠΎ. Π’ΠΎ Π΅ΡΡ‚ΡŒ для дСкомпрСссии любой записи Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ΡΡ всС ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠ΅ записи с этой страницы (ΠΈ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ с этой).

КаТдая запись сТимСтся с Ρ„Π»Π°Π³ΠΎΠΌ Z_SYNC_FLUSH, ΠΏΡ€ΠΈ этом Π² ΠΊΠΎΠ½Ρ†Π΅ сТатого ΠΏΠΎΡ‚ΠΎΠΊΠ° ΠΎΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ 4 Π±Π°ΠΉΡ‚Π° 0x00, 0x00, 0xff, 0xff, ΠΏΡ€Π΅Π΄Π²Π°Ρ€Ρ‘Π½Π½Ρ‹Π΅, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π΅Ρ‰Ρ‘ ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ»ΠΈ двумя Π½ΡƒΠ»Π΅Π²Ρ‹ΠΌΠΈ Π±Π°ΠΉΡ‚Π°ΠΌΠΈ.
Π­Ρ‚Ρƒ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ (Π΄Π»ΠΈΠ½ΠΎΠΉ 4, 5 ΠΈΠ»ΠΈ 6 Π±Π°ΠΉΡ‚) ΠΌΡ‹ отбрасываСм ΠΏΡ€ΠΈ записи Π² Ρ„Π»Π΅Ρˆ-ΠΏΠ°ΠΌΡΡ‚ΡŒ.

Π—Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ записи прСдставляСт ΠΈΠ· сСбя 1, 2 ΠΈΠ»ΠΈ 3 Π±Π°ΠΉΡ‚Π°, хранящиС:

  • ΠΎΠ΄ΠΈΠ½ Π±ΠΈΡ‚ (T), ΠΎΠ·Π½Π°Ρ‡Π°ΡŽΡ‰ΠΈΠΉ Ρ‚ΠΈΠΏ записи: 0 β€” контСкст, 1 β€” ΠΆΡƒΡ€Π½Π°Π»;
  • ΠΏΠΎΠ»Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π΄Π»ΠΈΠ½Ρ‹ (S) ΠΎΡ‚ 1 Π΄ΠΎ 7 Π±ΠΈΡ‚, опрСдСлящСС Π΄Π»ΠΈΠ½Ρƒ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° ΠΈ «Ρ…вост», ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½ΡƒΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊ записи для распаковки;
  • Π΄Π»ΠΈΠ½Ρƒ записи (L).

Π’Π°Π±Π»ΠΈΡ†Π° Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ S:

S
Π”Π»ΠΈΠ½Π° Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ°, Π±Π°ΠΉΡ‚
ΠžΡ‚Π±Ρ€Π°ΡΡ‹Π²Π°Π΅Ρ‚ΡΡ ΠΏΡ€ΠΈ записи, Π±Π°ΠΉΡ‚

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)

ΠŸΠΎΠΏΡ€ΠΎΠ±ΠΎΠ²Π°Π» ΠΏΡ€ΠΎΠΈΠ»Π»ΡŽΡΡ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, Π½Π΅ знаю, насколько наглядно ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΎΡΡŒ:
Моя рСализация ΠΊΠΎΠ»ΡŒΡ†Π΅Π²ΠΎΠ³ΠΎ Π±ΡƒΡ„Π΅Ρ€Π° Π² NOR flash
Π–Ρ‘Π»Ρ‚Ρ‹ΠΌ Ρ‚ΡƒΡ‚ ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π΅Π½ΠΎ ΠΏΠΎΠ»Π΅ T, Π±Π΅Π»Ρ‹ΠΌ β€” ΠΏΠΎΠ»Π΅ S, Π·Π΅Π»Ρ‘Π½Ρ‹ΠΌ L (Π΄Π»ΠΈΠ½Π° сТатых Π΄Π°Π½Π½Ρ‹Ρ… Π² Π±Π°ΠΉΡ‚Π°Ρ…), Π³ΠΎΠ»ΡƒΠ±Ρ‹ΠΌ β€” сТатыС Π΄Π°Π½Π½Ρ‹Π΅, красным β€” ΠΊΠΎΠ½Π΅Ρ‡Π½Ρ‹Π΅ Π±Π°ΠΉΡ‚Ρ‹ сТатых Π΄Π°Π½Π½Ρ‹Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ ΠΏΠΈΡˆΡƒΡ‚ΡΡ Π²ΠΎ Ρ„Π»Π΅Ρˆ-ΠΏΠ°ΠΌΡΡ‚ΡŒ.

Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΈ записСй самой распространённой Π΄Π»ΠΈΠ½Ρ‹ (Π΄ΠΎ 63+5 Π±Π°ΠΉΡ‚ Π² сТатом Π²ΠΈΠ΄Π΅) ΠΌΡ‹ смоТСм Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΎΠ΄Π½ΠΈΠΌ Π±Π°ΠΉΡ‚ΠΎΠΌ.

ПослС ΠΊΠ°ΠΆΠ΄ΠΎΠΉ записи хранится ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½Π°Ρ сумма CRC-32C, Ρƒ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π² качСствС Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ значСния (init) ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΈΠ½Π²Π΅Ρ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΉ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½ΠΎΠΉ суммы.

CRC ΠΎΠ±Π»Π°Π΄Π°Π΅Ρ‚ свойством «ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ», дСйствуСт (плюс-минус ΠΈΠ½Π²Π΅Ρ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π±ΠΈΡ‚ Π² процСссС) такая Ρ„ΠΎΡ€ΠΌΡƒΠ»Π°: Моя рСализация ΠΊΠΎΠ»ΡŒΡ†Π΅Π²ΠΎΠ³ΠΎ Π±ΡƒΡ„Π΅Ρ€Π° Π² NOR flash.
Π’ΠΎ Π΅ΡΡ‚ΡŒ фактичСски ΠΌΡ‹ высчитываСм CRC всСх ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΡ… Π±Π°ΠΉΡ‚ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΎΠ² ΠΈ Π΄Π°Π½Π½Ρ‹Ρ… Π½Π° этой страницС.

НСпосрСдствСнно Π·Π° ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½ΠΎΠΉ суммой Π»Π΅ΠΆΠΈΡ‚ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ записи.

Π—Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ сконструирован Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ Π΅Π³ΠΎ Π±Π°ΠΉΡ‚ Π±Ρ‹Π» всСгда ΠΎΡ‚Π»ΠΈΡ‡Π΅Π½ ΠΎΡ‚ 0x00 ΠΈ 0xff (Ссли вмСсто ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ Π±Π°ΠΉΡ‚Π° Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° ΠΌΡ‹ встрСчаСм 0xff, Ρ‚ΠΎ Π·Π½Π°Ρ‡ΠΈΡ‚ это ΠΏΠΎΠΊΠ° Π½Π΅ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠ°Ρ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ; 0x00 ΠΆΠ΅ сигнализируСт ΠΎΠ± ошибкС).

ΠŸΡ€ΠΈΠΌΠ΅Ρ€Π½Ρ‹Π΅ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ‹

Π§Ρ‚Π΅Π½ΠΈΠ΅ ΠΈΠ· Ρ„Π»Π΅Ρˆ-памяти

Π›ΡŽΠ±ΠΎΠ΅ Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ ΠΈΠ΄Ρ‘Ρ‚ с ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΎΠΉ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½ΠΎΠΉ суммы.
Если ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½Π°Ρ сумма Π½Π΅ сошлась β€” Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ повторяСтся нСсколько Ρ€Π°Π· Π² Π½Π°Π΄Π΅ΠΆΠ΄Π΅ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ-Ρ‚Π°ΠΊΠΈ Π²Π΅Ρ€Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅.

(это ΠΈΠΌΠ΅Π΅Ρ‚ смысл, Linux Π½Π΅ ΠΊΡΡˆΠΈΡ€ΡƒΠ΅Ρ‚ Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ ΠΈΠ· NOR Flash, ΠΏΡ€ΠΎΠ²Π΅Ρ€Π΅Π½ΠΎ)

Π—Π°ΠΏΠΈΡΡŒ Π² Ρ„Π»Π΅Ρˆ-ΠΏΠ°ΠΌΡΡ‚ΡŒ

ЗаписываСм Π΄Π°Π½Π½Ρ‹Π΅.
Π§ΠΈΡ‚Π°Π΅ΠΌ ΠΈΡ….

Если ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Π½Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ Π½Π΅ ΡΠΎΠ²ΠΏΠ°Π΄Π°ΡŽΡ‚ с записанными β€” заполняСм ΠΎΠ±Π»Π°ΡΡ‚ΡŒ нулями ΠΈ сигнализируСм ΠΎ ошибкС.

ΠŸΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΠ° Π½ΠΎΠ²ΠΎΠΉ микросхСмы ΠΊ Ρ€Π°Π±ΠΎΡ‚Π΅

Для ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π² ΠΏΠ΅Ρ€Π²ΡƒΡŽ (Ρ‚ΠΎΡ‡Π½Π΅Π΅ Π½ΡƒΠ»Π΅Π²ΡƒΡŽ) страницу записываСтся Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ с вСрсиСй 1.
ПослС этого Π² эту страницу записываСтся Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹ΠΉ контСкст (содСрТит UUID Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚Π° ΠΈ Π΄Π΅Ρ„ΠΎΠ»Ρ‚Π½Ρ‹Π΅ настройки).

Всё, Ρ„Π»Π΅Ρˆ-ΠΏΠ°ΠΌΡΡ‚ΡŒ Π³ΠΎΡ‚ΠΎΠ²Π° ΠΊ Ρ€Π°Π±ΠΎΡ‚Π΅.

Π—Π°Π³Ρ€ΡƒΠ·ΠΊΠ° Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚Π°

ΠŸΡ€ΠΈ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ΅ Ρ‡ΠΈΡ‚Π°ΡŽΡ‚ΡΡ ΠΏΠ΅Ρ€Π²Ρ‹Π΅ 8 Π±Π°ΠΉΡ‚ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ страницы (Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ + CRC), страницы с нСизвСстным Magic Number ΠΈΠ»ΠΈ Π½Π΅Π²Π΅Ρ€Π½Ρ‹ΠΌ CRC ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΡƒΡŽΡ‚ΡΡ.
Из «ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹Ρ…» страниц Π²Ρ‹Π±ΠΈΡ€Π°ΡŽΡ‚ΡΡ страницы с максимальной вСрсиСй, ΠΈΠ· Π½ΠΈΡ… бСрётся страница, ΠΈΠΌΠ΅ΡŽΡ‰Π°Ρ наибольший Π½ΠΎΠΌΠ΅Ρ€.
БчитываСтся пСрвая запись, провСряСтся ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎΡΡ‚ΡŒ CRC, Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ Ρ„Π»Π°Π³Π° «ΠΊΠΎΠ½Ρ‚Скст». Если всё Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎ β€” эта страница считаСтся Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ. Если Π½Π΅Ρ‚ β€” откатываСмся Π½Π° ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΡƒΡŽ, ΠΏΠΎΠΊΠ° Π½Π΅ Π½Π°ΠΉΠ΄Ρ‘ΠΌ «ΠΆΠΈΠ²ΡƒΡŽ» страницу.
Π° Π½Π°ΠΉΠ΄Π΅Π½Π½ΠΎΠΉ страницС считываСм всС записи, Ρ‚Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ с Ρ„Π»Π°Π³ΠΎΠΌ «ΠΊΠΎΠ½Ρ‚Скст» примСняСм.
БохраняСм ΡΠ»ΠΎΠ²Π°Ρ€ΡŒ zlib (Π½ΡƒΠΆΠ΅Π½ Π±ΡƒΠ΄Π΅Ρ‚ для дозаписи Π² эту страницу).

Всё, Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ° Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½Π°, контСкст восстановлСн, ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ.

Π”ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ записи Π² ΠΆΡƒΡ€Π½Π°Π»

Π‘ΠΆΠΈΠΌΠ°Π΅ΠΌ запись с ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΌ словарём, указывая Z_SYNC_FLUSH.Π‘ΠΌΠΎΡ‚Ρ€ΠΈΠΌ, помСщаСтся Π»ΠΈ сТатая запись Π½Π° Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ страницС.
Если Π½Π΅ помСщаСтся (ΠΈΠ»ΠΈ Π½Π° страницС Π±Ρ‹Π»ΠΈ ошибки CRC) β€” Π½Π°Ρ‡ΠΈΠ½Π°Π΅ΠΌ Π½ΠΎΠ²ΡƒΡŽ страницу (см. Π½ΠΈΠΆΠ΅).
ЗаписываСм запись ΠΈ CRC. Если ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»Π° ошибка β€” Π½Π°Ρ‡ΠΈΠ½Π°Π΅ΠΌ Π½ΠΎΠ²ΡƒΡŽ страницу.

Новая страница

Π’Ρ‹Π±ΠΈΡ€Π°Π΅ΠΌ ΡΠ²ΠΎΠ±ΠΎΠ΄Π½ΡƒΡŽ страницу с ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΌ Π½ΠΎΠΌΠ΅Ρ€ΠΎΠΌ (свободной ΠΌΡ‹ считаСм страницу с Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠΉ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½ΠΎΠΉ суммой Π² Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ΅ ΠΈΠ»ΠΈ с вСрсиСй мСньшС Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ). Если Ρ‚Π°ΠΊΠΈΡ… страниц Π½Π΅Ρ‚ β€” Π²Ρ‹Π±ΠΈΡ€Π°Π΅ΠΌ страницу с ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΌ Π½ΠΎΠΌΠ΅Ρ€ΠΎΠΌ ΠΈΠ· Ρ‚Π΅Ρ…, Ρ‡Ρ‚ΠΎ ΠΈΠΌΠ΅ΡŽΡ‚ Π²Π΅Ρ€ΡΠΈΡŽ Ρ€Π°Π²Π½ΡƒΡŽ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ.
Π”Π΅Π»Π°Π΅ΠΌ Π²Ρ‹Π±Ρ€Π°Π½Π½ΠΎΠΉ страницС erase. БвСряСм содСрТимоС с 0xff. Если Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π½Π΅ Ρ‚Π°ΠΊ β€” Π±Π΅Ρ€Ρ‘ΠΌ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ ΡΠ²ΠΎΠ±ΠΎΠ΄Π½ΡƒΡŽ страницу, ΠΈ Ρ‚.Π΄.
На ΡΡ‚Ρ‘Ρ€Ρ‚ΡƒΡŽ страницу записываСм Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ, ΠΏΠ΅Ρ€Π²ΠΎΠΉ записью Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π΅ состояниС контСкста, ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ β€” Π½Π΅Π·Π°ΠΏΠΈΡΠ°Π½Π½ΡƒΡŽ запись ΠΆΡƒΡ€Π½Π°Π»Π° (Ссли ΠΎΠ½Π° Π΅ΡΡ‚ΡŒ).

ΠŸΡ€ΠΈΠΌΠ΅Π½ΠΈΠΌΠΎΡΡ‚ΡŒ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π°

По ΠΌΠΎΠ΅ΠΌΡƒ мнСнию, получился Π½Π΅ΠΏΠ»ΠΎΡ…ΠΎΠΉ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ для хранСния Π»ΡŽΠ±Ρ‹Ρ… Π±ΠΎΠ»Π΅Π΅-ΠΌΠ΅Π½Π΅Π΅ сТимаСмых ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ (простой тСкст, JSON, MessagePack, CBOR, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, protobuf) Π² NOR Flash.

ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ, Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ «Π·Π°Ρ‚ΠΎΡ‡Π΅Π½» ΠΏΠΎΠ΄ SLC NOR Flash.

Π•Π³ΠΎ Π½Π΅ стоит ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ с носитСлями с высоким BER, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ NAND ΠΈΠ»ΠΈ MLC NOR (Π° такая ΠΏΠ°ΠΌΡΡ‚ΡŒ Π²ΠΎΠΎΠ±Ρ‰Π΅ Π΅ΡΡ‚ΡŒ Π² ΠΏΡ€ΠΎΠ΄Π°ΠΆΠ΅? встрСчал упоминания Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² Ρ€Π°Π±ΠΎΡ‚Π°Ρ… ΠΏΠΎ ΠΊΠΎΠ΄Π°ΠΌ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ†ΠΈΠΈ).

Π’Π΅ΠΌ Π±ΠΎΠ»Π΅Π΅, Π΅Π³ΠΎ Π½Π΅ стоит ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ с устройствами, ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΠΌΠΈ свой FTL: USB flash, SD, MicroSD, etc (для Ρ‚Π°ΠΊΠΎΠΉ памяти я Π΄Π΅Π»Π°Π» Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ с Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ страницы Π² 512 Π±Π°ΠΉΡ‚, сигнатурой Π² Π½Π°Ρ‡Π°Π»Π΅ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ страницы ΠΈ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΌΠΈ Π½ΠΎΠΌΠ΅Ρ€Π°ΠΌΠΈ записСй β€” ΠΈΠ½ΠΎΠ³Π΄Π° ΠΈΠ· «Π³Π»ΡŽΠΊΠ½ΡƒΠ²ΡˆΠ΅ΠΉ» Ρ„Π»Π΅ΡˆΠΊΠΈ ΡƒΠ΄Π°Π²Π°Π»ΠΎΡΡŒ простым ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ΠΌ Π²ΠΎΡΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ всС Π΄Π°Π½Π½Ρ‹Π΅).

Π’ зависимости ΠΎΡ‚ Π·Π°Π΄Π°Ρ‡ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ Π±Π΅Π· ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π½Π° Ρ„Π»Π΅ΡˆΠΊΠ°Ρ… ΠΎΡ‚ 128ΠšΠ±ΠΈΡ‚ (16Кб) Π΄ΠΎ 1Π“Π±ΠΈΡ‚ (128Мб). ΠŸΡ€ΠΈ ΠΆΠ΅Π»Π°Π½ΠΈΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ Π½Π° микросхСмах большСго ΠΎΠ±ΡŠΡ‘ΠΌΠ°, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ, Π½Π°Π²Π΅Ρ€Π½ΠΎΠ΅, Π½ΡƒΠΆΠ½ΠΎ ΡΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ€ страницы (Но Ρ‚ΡƒΡ‚ ΡƒΠΆΠ΅ встаёт вопрос экономичСской цСлСсообразности, Ρ†Π΅Π½Π° Π½Π° NOR Flash большого ΠΎΠ±ΡŠΡ‘ΠΌΠ° Π½Π΅ Ρ€Π°Π΄ΡƒΠ΅Ρ‚).

Если ΠΊΠΎΠΌΡƒ-Ρ‚ΠΎ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ показался интСрСсным, ΠΈ ΠΎΠ½ Π·Π°Ρ…ΠΎΡ‡Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ Π² ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΎΠΌ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅ β€” ΠΏΠΈΡˆΠΈΡ‚Π΅, ΠΏΠΎΡΡ‚Π°Ρ€Π°ΡŽΡΡŒ Π½Π°ΠΉΡ‚ΠΈ врСмя, ΠΏΡ€ΠΈΡ‡Π΅ΡΠ°Ρ‚ΡŒ ΠΊΠΎΠ΄ ΠΈ Π²Ρ‹Π»ΠΎΠΆΠΈΡ‚ΡŒ Π½Π° github.

Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

Как Π²ΠΈΠ΄ΠΈΠΌ, Π² ΠΈΡ‚ΠΎΠ³Π΅ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ оказался простым ΠΈ Π΄Π°ΠΆΠ΅ скучным.

Π’ ΡΡ‚Π°Ρ‚ΡŒΠ΅ слоТно ΠΎΡ‚Ρ€Π°Π·ΠΈΡ‚ΡŒ ΡΠ²ΠΎΠ»ΡŽΡ†ΠΈΡŽ своСй Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния, Π½ΠΎ ΠΏΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅: ΠΈΠ·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ ΠΌΠ½Π΅ Ρ…ΠΎΡ‚Π΅Π»ΠΎΡΡŒ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π½Π°Π²ΠΎΡ€ΠΎΡ‡Π΅Π½Π½ΠΎΠ΅, Π½Π΅ΡƒΠ±ΠΈΠ²Π°Π΅ΠΌΠΎΠ΅, способноС Π²Ρ‹ΠΆΠΈΡ‚ΡŒ Π΄Π°ΠΆΠ΅ послС ядСрного Π²Π·Ρ€Ρ‹Π²Π° Π² нСпосрСдствСнной близости. Однако, Ρ€Π°Π·ΡƒΠΌ (надСюсь) всё-Ρ‚Π°ΠΊΠΈ ΠΏΠΎΠ±Π΅Π΄ΠΈΠ» ΠΈ постСпСнно ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚Ρ‹ ΡΠ΄Π²ΠΈΠ½ΡƒΠ»ΠΎΡΡŒ ΠΊ простотС ΠΈ компактности.

ΠœΠΎΠΆΠ΅Ρ‚ Π»ΠΈ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒΡΡ Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎ я ошибся? Π”Π°, ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ. Π’ΠΏΠΎΠ»Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ Π·Π°ΠΊΡƒΠΏΠΈΠ»ΠΈ ΠΏΠ°Ρ€Ρ‚ΠΈΡŽ нСкачСствСнных микросхСм. Или ΠΏΠΎ ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π΅ ΠΎΠ±ΠΎΡ€ΡƒΠ΄ΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π΅ ΠΎΠΏΡ€Π°Π²Π΄Π°Π΅Ρ‚ оТидания ΠΏΠΎ надёТности.

Π•ΡΡ‚ΡŒ Π»ΠΈ Ρƒ мСня ΠΏΠ»Π°Π½ Π½Π° этот случай? Π― Π΄ΡƒΠΌΠ°ΡŽ, Ρ‡Ρ‚ΠΎ ΠΏΠΎ ΠΏΡ€ΠΎΡ‡Ρ‚Π΅Π½ΠΈΡŽ ΡΡ‚Π°Ρ‚ΡŒΠΈ Π²Ρ‹ Π½Π΅ ΡΠΎΠΌΠ½Π΅Π²Π°Π΅Ρ‚Π΅ΡΡŒ, Ρ‡Ρ‚ΠΎ ΠΏΠ»Π°Π½ Π΅ΡΡ‚ΡŒ. И Π΄Π°ΠΆΠ΅ Π½Π΅ ΠΎΠ΄ΠΈΠ½.

Если Ρ‡ΡƒΡ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ ΡΠ΅Ρ€ΡŒΡ‘Π·Π½ΠΎ, Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ ΠΈ ΠΊΠ°ΠΊ Ρ€Π°Π±ΠΎΡ‡ΠΈΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚, ΠΈ ΠΊΠ°ΠΊ «ΠΏΡ€ΠΎΠ±Π½Ρ‹ΠΉ ΡˆΠ°Ρ€».

На сСгодняшний ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π½Π° столС всё Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎ, Π±ΡƒΠΊΠ²Π°Π»ΡŒΠ½ΠΎ Π½Π° днях Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π·Π²Ρ‘Ρ€Π½ΡƒΡ‚ΠΎ (ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ) Π½Π° сотнС устройств, посмотрим, Ρ‡Ρ‚ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Π² «Π±ΠΎΠ΅Π²ΠΎΠΉ» эксплуатации (Π±Π»Π°Π³ΠΎ, надСюсь, Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ позволяСт Π½Π°Π΄Ρ‘ΠΆΠ½ΠΎ Π΄Π΅Ρ‚Π΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ сбои; Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ получится ΡΠΎΠ±Ρ€Π°Ρ‚ΡŒ ΠΏΠΎΠ»Π½ΠΎΡ†Π΅Π½Π½ΡƒΡŽ статистику). Π§Π΅Ρ€Π΅Π· нСсколько мСсяцСв ΠΌΠΎΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Π΄Π΅Π»Π°Ρ‚ΡŒ Π²Ρ‹Π²ΠΎΠ΄Ρ‹ (Π° Ссли Π½Π΅ ΠΏΠΎΠ²Π΅Π·Ρ‘Ρ‚ β€” Ρ‚ΠΎ ΠΈ Ρ€Π°Π½ΡŒΡˆΠ΅).

Если ΠΏΠΎ ΠΈΡ‚ΠΎΠ³Π°ΠΌ использования обнаруТатся ΡΠ΅Ρ€ΡŒΡ‘Π·Π½Ρ‹Π΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ ΠΈ ΠΏΠΎΡ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ΡΡ Π΄ΠΎΡ€Π°Π±ΠΎΡ‚ΠΊΠΈ, Ρ‚ΠΎ я ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΎΠ± этом Π½Π°ΠΏΠΈΡˆΡƒ.

Π›ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΡƒΡ€Π°

НС Ρ…ΠΎΡ‚Π΅Π»ΠΎΡΡŒ ΡΠΎΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ Π΄Π»ΠΈΠ½Π½Ρ‹ΠΉ Π½ΡƒΠ΄Π½Ρ‹ΠΉ список ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½Π½Ρ‹Ρ… Ρ€Π°Π±ΠΎΡ‚, Π² ΠΊΠΎΠ½Ρ†Π΅ ΠΊΠΎΠ½Ρ†ΠΎΠ² Π³ΡƒΠ³Π» Π΅ΡΡ‚ΡŒ Ρƒ всСх.

Π’ΡƒΡ‚ я Ρ€Π΅ΡˆΠΈΠ» ΠΎΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ список Π½Π°Ρ…ΠΎΠ΄ΠΎΠΊ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠ½Π΅ показались особСнно интСрСсными, ΠΎΠ΄Π½Π°ΠΊΠΎ постСпСнно ΠΎΠ½ΠΈ ΠΏΠ΅Ρ€Π΅ΠΊΠΎΡ‡Π΅Π²Π°Π»ΠΈ нСпосрСдствСнно Π² тСкст ΡΡ‚Π°Ρ‚ΡŒΠΈ, ΠΈ Π² спискС остался ΠΎΠ΄ΠΈΠ½ ΠΏΡƒΠ½ΠΊΡ‚:

  1. Π£Ρ‚ΠΈΠ»ΠΈΡ‚Π° infgen ΠΎΡ‚ Π°Π²Ρ‚ΠΎΡ€Π° zlib. Π£ΠΌΠ΅Π΅Ρ‚ Π² понятном Π²ΠΈΠ΄Π΅ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Ρ‚ΡŒ содСрТимоС Π°Ρ€Ρ…ΠΈΠ²ΠΎΠ² deflate/zlib/gzip. Если Π²Π°ΠΌ приходится Ρ€Π°Π·Π±ΠΈΡ€Π°Ρ‚ΡŒΡΡ с Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠΌ устройством Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° deflate (ΠΈΠ»ΠΈ gzip) β€” Π½Π°ΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΡŽ.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: habr.com