Pull to refresh
3
0.5
Send message

Есть очевидные UB: ... type-puning через union

О, моя любимая мозоль. В C этот приём разрешён, потеря гарантий на уровне C на самом деле неочевидна. Оптимизации, ради которых могли пожертвовать гарантиями, тоже неочевидны. Если так решили упростить текст стандарта, то... это тоже неочевидно. То, что замена на memcpy избавляет от UB - по духу стандарта снова неочевидно, соответствующий пункт стандарта избегает описания memcpy между разными типами (T* вместо T1* и T2*), это замечал один из докладчиков на CppCon.

Воспользоваться гипотетическими оптимизациями из-за масштаба "трагедии" нельзя, можно пройтись по гитхабу:language:C++ /(?-i)union/. По-хорошему UB в нынешнем виде должен вызываться лишь новым атрибутом типа [[assume_no_punning]] специально для реализаций tagged union'ов. Обратная совместимость сохраняется. Можно учитывать новое правило только в новом коде. Исчезает нездоровая и отнимающая у всех время ситуация, когда стандарт не описывает поведение компиляторов, и когда отдельные энтузиасты пытаются вычерпать море (такой type punning везде, и в браузере тоже).

И может случиться то самое, что как бы чего не вышло! И о чём мы? Если есть технический запрет (ещё подумал - запретить протокол file:///), то говорить не о чем. Если его нет, то всё равно спасибо, от разговоров об этом надзирательстве вместо инфобеза поглупеть можно.

файлы/скрипты и прочее запрещено ... и - особенно! - исполнять на рабочем компе.

Э-э-э, так работает браузер. Если браузер можно, то надсмотрщика всё устроит.

---

Я бы сказал, что она может по возможностям потягаться с Obsidian, но не такая модная. Видно и объективные факторы (фрагментация: легаси-TiddlyWiki Classic и TiddlyWiki5; слишком много вынесено в плагины или предлагается для доработки напильником), и субъективные (культ цеттелькастена прошёл мимо неё).

Нет же, она самодостаточна - один локальный файл. И два в одном... как самораспаковывающийся архив - он и архив, и разархиватор. А здесь - html-файл с кучей джаваскрипта, в котором и вики-страницы, и скрипты, реализующие вики-движок.

Тяжёлое медиа из-за такой архитектуры внутрь (оно будет в base64) лучше не класть, но можно ссылаться на лежащее рядом (как в markdown).

На джаваскрипте, очевидно. Ну, её надо умудриться запретить - надо будет запретить загружать страницы в браузере. Или джаваскрипт. Или браузеры вообще.

Что остаётся?

Есть TiddlyWiki — вики-движок + сама вики (в роли личной базы знаний как тут) в виде одного html-файла. В самом простом варианте использования нужен только браузер, файл обновляется через "сохранение страницы" в браузере.

Почти все могут, столько звёзд сошлось: нужный инструмент утёк, утёк в общий доступ, утёк бесплатно и к нему создали инструкцию. Но терабайтный Optane за - сейчас - $146 должен быть и с доставкой выгоднее.

И надо прочувствовать момент: Optane был неудачен своей около-DRAM-ной ценой на обоих поколениях 3D XPoint (видимо, она не масштабируется как флеш-память). По задержкам это память из будущего, но в прошлом её портила цена, а в будущем на горизонте аналогов пока нет. SLC в 983 ZET и SZ1735 хуже (да и это тоже прошлое), SLC/MLC под брендом XL-FLASH хуже (это настоящее/будущее, из наиболее доступного видно Kioxia FL6 на ebay), а развитие протоколов здесь не поможет (от него только throughput: последовательные скорости и глубокие очереди).

Если не расставаться с ерундой* про pSLC и надёжность одного диска, то можно ещё попробовать аудиофилов окучить обрадовать. Сначала Sony продавала улучшающие звучание карты памяти, потом один форумчанин сумел запустить идею о pSLC с той же магией.

* "The vast majority of drive failures happen well before their P/E cycle limit is reached" - doi:10.1109/TDSC.2021.3131571; "Most of the [failed] devices have not used more than 1% of the PE cycles" - A Study of SSD Reliability in Large Scale Enterprise Storage Deployments.

*Занудно* умничанье - это не демагогия. Назвать одноплатником - ошибка, она раз 10 в статье встречается. Назвать компьютером - допустимо, но зачем, если "плата с микроконтроллером" - привычнее и точнее.

Процессор общего назначения - внутри микроконтроллера. На мнение отдельной Foundation плевать, но если не плевать - она эти же основы в своей книжке повторяет. "Microcontrollers ... are computers stripped back to their bare essentials", "type of computer, but it’s not the only type", "CPU: 32-bit dual-core ARM...".

Память, CPU, ввод-вывод есть. В традиционном широком смысле микроконтроллеры - это компьютеры. А сужать смысл можно сколько угодно (What's a Computer?). Но за одноплатным компьютером закрепился другой смысл, да.

"Протереть" SSD получится ещё как, спросите у владельцев видеорегистраторов 4К.

Это должна быть история из серии "Logitech бесплатно меняет мышку в n-ый раз", потому что добраться до гарантийного ресурса, храня видео неделю или дольше (речь ведь не об автомобильных регистраторах? в них SSD не поставить), тяжело - придётся найти SSD с особо низким гарантийным ресурсом. Например, у BX500 4TB на QLC-памяти он 1000 TBW. Это 250 перезаписей всего или 0.23 перезаписей в день (DWPD) в течение 3 гарантийных лет. 1 перезапись в 4 дня. Но можно найти хуже - WD Green SN350 2TB, 1 перезапись в 22 дня.

Но будет из серии "я меняю термопасту 4 раза в год" или "торренты убивают жёсткие диски" - "SSD 100% протёрся, с чего ему ещё умирать?".

Переделать(перепрошить) самому не проблема

Об этом не хотелось говорить, чтобы остаться в контексте первого коммента о производителях, так-то ещё у eMMC есть какой-то более официальный путь перевода в pSLC.

Вообще, у "непонятного" по ссылке цена соответствует теоретическому трёхкратному удорожанию. И у него был китайский аналог (Phison E18, низкая цена, [1][2][3][4]). Правда, он не покидал пределы Китая и "китайнет" слишком огорожен, чтобы разбираться дальше.

P3006R1 говорит, что UB в такой конструкции сейчас есть:

alignas(T) std::byte storage[sizeof(T)];
::new (&storage) T();
// ...
T *ptr_ = reinterpret_cast<T*>(&storage);  // UB

Он ссылается на понятие pointer-interconvertible (появилось в P0137R1). На всё это ведут комменты на stackoverflow.

Если шутят, что программирование на Rust - это борьба с компилятором, то надо шутить, что программирование на C++ - это борьба с оптимизатором (который в рамках стандарта может действовать по принципу "вижу UB - не вижу препятствий").

Оптаны, да, хорошая вещь, только доставка обойдётся в треть цены минимум.

Так у pSLC была/будет та же проблема - несколько моделей под Chia существует, но до нас не доезжали (что-то непонятное до сих пор продаётся).

Для майнинга не нужна надёжность, только ресурс (можно считать одним из аспектов надёжности или совсем другим свойством). А если смотреть ещё глубже, ресурс - для окупаемости, которая достигнется скорее с чем-то незамысловатым (списанные Micron MAX?), чем с новыми pSLC SSD.

Видеонаблюдением сильно "протереть" SSD вроде же никак не получится. SLC обретает смысл при >3 перезаписях в день, то есть видео придётся хранить меньше 8 часов. Если хранить хотя бы неделю, то уже будет QLC подходить.

Да и наверное можно в холодильник положить

Известная мысль, но вроде никто на практике не доходил до этого. Логично засунуть в герметичный пакет с силикагелем и не вытаскивать, пока не отогреется.

Та же табличка из JESD218 (Table D.1 — Expected retention (weeks)) примерно удваивает retention при уменьшении температуры хранения на каждые 5 градусов.

upd: то есть +20°C -> -20°C даёт улучшение примерно в 2^8 раз. Всё ниже +25°C - это экстраполяция за пределы таблицы, но с сухим выключенным SSD ничего странного не должно случиться.

Поправлю себя: "(b) ... для лучшего выравнивания износа" и можно добавить (a.2) перемещать данные только по результатам ручного чтения, без автоматических фоновых проверок (пользователь запускает чтение всего диска, контроллер замечает проблемы).

Было бы интересно если бы кто-нибудь разбирающийся рассказал.

На реддите упоминают Phison SmartRefresh, в котором есть "RTMS guarantees that the entire drive is scanned entirely in a specific period (e.g., once every week)".

И упоминают похожий StaticDataRefresh у Silicon Motion. В одном месте написано, что он работает как (а.2) ("monitor the error bit levels at each read operation"), в другом - как (a) ("automatically scans cells at a temperature-dependent rate").

NewMaxx, который там известен постами про SSD, пишет, что есть "разумные основания ожидать" автоматического перемещения от современных SSD и что он в каких-то прошлых постах разбирал StaticDataRefresh.

По таймеру (ну, "periodic refresh feature") - это то, как Samsung со второго раза исправил проблему в 840 EVO / 840.

Но на самом деле нет, в "опциях для продвинутых пользователей" спрятан имеется -outfile. Ну, в работе с видео незаменимые двоичные конвейеры бывают.

Это ещё и покупателю невыгодно. Три TLC SSD стоят как один pSLC. Отказаться от диска с бэкапом, от диска с зеркалом и в итоге потерять всё, скажем, из-за бага в прошивке? Так что ли его надо использовать? А если с бэкапами порядок, отказоустойчивость нужная есть, но душа просит чего-то ещё, то куда тут дешевизну приткнуть?

Да и на самом деле душа просит только поворчать. Вот за океаном в рамках бесконечной распродажи оптейна есть предложение даже покруче, чем pSLC SSD.

Он про другое, не связанное с trim.

Есть постоянно запитанный SSD, на нём лежат старые данные, заряд медленно-медленно, но утекает и контроллер при этом может:

(a) периодически перемещать данные (по результатам фоновой проверки или по таймеру)

(b) перемещать старые данные только при записи новых, для выравнивания износа (wear leveling)

(c) не трогать старые данные совсем

Наверное, обычно делают (b).

Про суровые условия - это уже в другую сторону перегиб. JESD218 говорит, что изношенные* SSD клиентского класса должны год хранить информацию без питания, корпоративного класса - 3 месяца. Для клиентского класса подразумевается, что SSD используется при 40 градусах и хранится при 30, для корпоративного температуры другие, но примерно эквивалентные, судя по табличке в приложении (retention in weeks как функция от температуры хранения и температуры работы).

Если SSD изношен не на 100%, а на 10%, это теоретически должно выливаться в 10x к сохранности (исходя из равномерного выравнивания износа + того, что пишет Infineon + написанного в JESD47).

10 лет назад была история с Samsung 840 и 840 EVO и медленным чтением старых данных. Память была 2D TLC - что-то вроде нынешней QLC. Тормоза людей беспокоили больше, чем шанс потери данных (до потери данных доходило редко?).

* то есть когда запись достигла заявленного производителем TBW. Тестовая нагрузка по соседнему стандарту - JESD219 (для корпоративных SSD - более тяжёлая).

Information

Rating
1,877-th
Registered
Activity