Обновить
4
0

Пользователь

Отправить сообщение
с javascript — не очень ясно, как обратиться из js к интересуемым адресам. Вроде бы, js такое не позволяет, это же безопасный язык.
Это где такое написано? На сайте лежит pdf, в ней приводится код, и там есть строчка, которую я привел выше.

Насколько понимаю, предполагается, что ядро лежит по адресу array1. Поэтому, array1[x] — чтение из области ядра.

Потом подтягиваются в кэш соответствущая область памяти из array2. Какая именно область подтянется — зависит от значения, которое лежит по array1[x].
НЯМС:

там два чтения — одно запрещенное — а другое разрешенное:

temp = array2[array1[x]*512];

х — адрес внутри запрещенной области array1, array2 — разрешенная область.

Спеклятивно это выполняется. Значит, какая-то область array2 подтягивается в кэш.
Дальше мы читаем из array2 подряд, измеряя время чтения. И по времени чтения пытаемся понять, была ли подтянута в кэш соответствующая область.

почему 512 — мне не понятно. Размер кэш-лини — 64 байта, а не 512.
Я испугался этого слова — гаджеты… И не читал ту главу.

Там дальше глава 5, про косвенные переходы. Когда переход делается не по фиксированному адресу, а по адресу, который в регистре, или по адресу который лежит в какой-то ячейке памяти. Можно сделать финт ушами — и «спекулятивно» выполнить не тот код, который должен был бы выполниться. Насколько понимаю — переход по адресу, которого нет в icache занимает ВРЕМЯ и все это время выполняется то, что в этом кэше лежит, только потом это все отменяется, поэтому нам незаметно.
Но этот код, хоть и отменяется, но что-то подягивает в кэш. И дальше как обычно.

Суть одна — тем или иным способом заставляют cpu выполнить код пользователя спекулятивно, причем так, что потом он гарантирванно отменится. А в таком выполнении можно (было до того, как нашли уязвимость) безнаказанно «побегать в труселях по мечети»: все равно никто не узнает.
Такой же механизм. Только не читают запрещенный адрес напрямую. (Или как там они его читают в той уязвимости, которую вы перевели.)

Сначала много раз тренируют бренч предиктор, чтобы был заход внутрь if, потом внезапно подают туда адрес, из которого нужно красть значение, и при этом такой, чтобы мы не зашли внутрь if.
Внтури if — чтение памяти.
Бренч предиктор говорит: «скорей всего мы зайдем в if». Это предположение неверно, но пока это неизвестно — и поэтому cpu начинает исполнять то, что внутри if.
В результате выполнения кода, значение из адреса, с которого нельзя читать, попадает к кэш. Вообще, это — исключение. Но потом оказывается, что бренч предиктор ошибся, а раз ошибся, то и исключения нет, и мы как бы и не читали этот адрес.
Исключение отменяется — но остается побочный эффект: данные в кэше.

Фактически, уже это — некорректная работа. Я так понимаю, что если мы прочитаем этот адрес, то получим какое-то значение, и это значение будет не из нашего процесса, что некорректно.

Чтобы узнать, где подтянутое в кэш число, используется атака по времени. Читается все подряд — и замеряется время чтения. То, что было подтянуто в кэш, прочитается гораздо быстрей.

Все остальные бубнопляски в коде — обход других предикторов и оптимизаторов.

Мой AMD phenom x4 B40 уязвим на тесте. Но — тест читает свою же память. То есть, чистоты эксперимента — нет. Кернел спейс читать не пробовал(не знаю его адреса, надо разбираться как узнать, и как потом понять, что прочитал именно его). Может, завтра попробую вечером.

Со второй разновидностью атаки spectre не разбирался, но суть там та же. Неким способом заставить выполниться код, который что-то подтянет в кэш.
а почему исключение отрабатывает не сразу? Насколько понимаю, уже это — уязвимость.
Что-то я не пойму. Уязвимость нельзя закрыть обновлением микрокода — но будет патч, который уменьшит производительность. Надо патчить каждую программу(это из каментов) — но будет выпущено ядро с такой функцией. Это же все — взаимоисключающие утверждения.
Южмаш серьезно порезали еще при ссср, и по решению Москвы. И еще в то время был шок. Развал там не добавил особо.
Техническая возможность это сделать есть, но вопрос в том, что будет потом. Подобные случаи бывали и известны мне, не с Южмашем конечно. Расписывать, что происходит в этом случае — оффтоп, но просто можете знать, что ничем хорошим для руководства это не заканчивалось.
Тут следует еще сказать, что после того, как для руководства подобное начинание заканчивается плохо, туда назначают новое руководство, и деструктивная деятельность прекращается. Поэтому даже если вдруг завод будет делать это, все равно подобная деятельность продлится недолго.
Южмаш не будет обслуживать военные ракеты стране-агрессору. Это и вызвало финансовые трудности. Очевидно же.

Если эти трудности будут означать остановку морского старта — его принесут в жертву. Хотя подождите… В программе США, Россия, Украина, Норвегия — я правильно понял? Скорей поверю в то, что пожертвуют не морским стартом — а пожертвуют россией. Это если вообще будет спрос на этот старт. Такое действие очень хорошо ляжет на какой-нибудь очередной пакет санкций.

Через некоторое кол-во времени производственные площади постигнет примерно так же участь, которая постигла буран: сначала люди разбегутся, а потом рухнет крыша. Возможно, недостроенную ракету продадут немцам в музей. Все наработки будут полностью утрачены.

Время — штука сложная, с ней надо осторожно работать. Сразу скажу, что в код я не вникал, а зачем я это все спрашиваю — написано вконце.

1. Можно ли узнать, каким именно образом измерялось время выполнения функций? Какая гранулярность вашего таймера?

Не было ли миграции потока на другое ядро во время выполнения функции, делалось ли thread affinity?

На основании какого источника времени (tsc? hpet?) принималось решение о текущем моменте времени (cat /sys/devices/system/clocksource/clocksource0/current_clocksource)?
Если это tsc, то поддерживает ли проц функции:

constant_tsc — все tsc ядер работают на одной частоте (подробности можно найти в intel's Designer's vol3b). По сути, получается, когда этой фишки нет, то tsc бесполезен, т.к. разные ядра будут жить с разной скоростью.

nonstop_tsc — фишка, которая добавлена в микроархитектуре Nehalem и старше. Означает, что часы не приостанавливаются в ACPI P-,C-,T-состояниях (Cx-режимы сна, Px-режимы частоты/напряжения, Tx — режимы пропуска тактов). В intel's designer's vol3b эта фишка называется «Invariant TSC».

rdtscp (cat /proc/cpuinfo | grep flags) — наличие специальной инструкции для правильного чтения регистра tsc.

И правильно ли снимались показания счетчика времени (наличие rdtcsp в системе команд еще не означает, что мы этой командой пользуемся. rdtsc выполняется на общем конвеере команд, в то время как rdtcsp обеспечивает hb)?

2. работа с данными — штука, которая нагружает определенным образом подсистему памяти. Если меряешь время алгоритмов, которые перелопачивают массивы, то нужно мерять разные длины массивов. Потому, что из за эффектов с кэшом, решающую роль могут оказывать совсем не те эффекты, которые были при тестах с другим набором или размером данных.
Сложность так же вызывает то, что эффекты с кэшом сильно зависят от того, как именно в памяти лежат данные. Так, известно, что перемножение матриц 512х512 работает медленней, чем 513х513. Если не понимаешь, почему так — лучше сразу признать, что правильно мерять производительность ты не умеешь. Можно так же нарваться на коллизии адресов TLB страниц — и этим просадить производительность. Маппинг физического адреса в логический хранится в хардварной хэшмапе!

Это все что я насобирал, просто чтобы понимать, что задача не такая простая, как кажется на первый взгляд. Мне очевидно, что список подводных камней при измерении производительности, который я знаю, не является полным, и скорей всего я даже не обозначил 5% того, о чем нужно знать, когда это меряешь. В мире не так много людей, которые могут правильно все измерять, и правильно это сравнить. Мы с вами не входим в число этих людей. Поэтому, скорей всего, измеренные результаты не будут отражать именно то, что мы думали что измеряли. Особенно, если алгоритм выполнялся меньше нескольких секунд (и несколько прогонов алгоритма не всегда могут быть решением проблемы). Какие-то более сложные вещи, которые выполняются больше 1..2сек уже можно более-менее корректно сравнивать без учета большого кол-ва тонкостей и хитрых эффектов.

Но конкретно в нашем случае, скорей всего, если дать больше данных, то основное время выполнения съест подситема подтягивания данных из памяти в кэш. Она не зависит от языка — и времена сравняются.

Есть утилита perf. Можно ее погонять на разных тестах и сравнить показания счетчиков. Если счетчики будут сильно разными — это подозрение, что реализации алгоритмов не идентичны. Скорей всего, если приложить усилия, более медленный код можно как-то переписать, чтобы он был равен быстрому. Но это нужно «закапываться» в вопрос.
Необходимость защищать лодки проекта 613 от ядерного взрыва в ангаре — отпала.


Полностью отпала она только в 1989 году, а 61 год (ввод базы в эксплуатацию) — это еще даже до карибского кризиса. И вполне очевидно, что если ты размещаешь ракеты на Кубе — можно ждать ответки в Крыму.

Кроме этого. Лодкам как раз легко — они на боевом держурстве, и в случае чего могут дать ответку. О дальнейшей их судьбе уже никто не думает. Завалит вход, или не завалит — это уже десятое дело. Основная фишка базы под горой в мирное время — секретность, а не защита от ЯО. Защита от ЯО — это больше для персонала и оборудования. Кстати, вход заваливает только в некоторых сценариях, и при надобности, откопают его довольно быстро.

е этому и пришли — лодки должны жить в море и приходить в порт только изредка.


Это да. Согласен с этим. Но ведь они и так жили в море! С таким тезисом мы приходим не к тому, что устарела база, а к тому, что по дурости задумали и построили базу. Аналогия — если вы сейчас по глупости купите трактор, он вам ненужен, но некорректно на этом основании утверждать, что он морально устарел.

На самом деле, разумеется, нельзя спрогнозировать ход такого конфликта. Если бы я собирался захватить мир, одну такую базу в Крыму точно не считал бы лишней. А лучше две-три, так спокойней. Даже, если они не очень нужны сейчас.

Единственная причина, по которой ее называют устаревшей — оправдать провал. В чем именно провал — можно обсуждать, но то что он там есть — это очевидный факт.
Цивилизованные люди даже в лужу не выливают отходы жизнедеятельности. Но это не про русских, разумеется. Загадили балтику, загадили черное море, и хорошо, что не построили атомную станцию, потому что загадили бы и азовское. Загадили урал (и это даже не про историю с рутением-106), загадили арал.
Разумеется, лужой, ни то ни другое не являлось и не является. То чем оно является — это загаженное русскими море.

База эта, если рассуждать в концепции шовинистов, была нужна, и морально она не устарела — просто потому, что других баз на этом море нет. Просто потому, что слишком много подлодок 613, их надо где-то обслуживать. Просто потому, что нужно гарантированное возмездие, и (про это шовинисты не любят вспоминать) создание напряженности в регионе.
И еще потому, что советский народ, как социосистема, не создал не пытался создать, и даже не мог создать за остальные 30 лет никакой альтернативной базы в этом регионе.

И когда мне рассказывают про «устарела, все видно со спутников» — так и хочется спросить, а почему же база в Олавсверне не устарела до 2006 года для норвежцев и не устарела для россиян? Все же видно со спутников, а заходы в нее лодок контролируются эхолотами (вы же не будете это отрицать?).
Моральное устаревание определяется не по наличию ПЛ, которые не помещаются в ангар — а по необходимости.
Википеди говорит, что было 215 лодок проекта 613, и это только официальная цифра. Если мы говорим «ангар устарел» — это неявно подразумевает, что мы хотим отказаться от всех 215 лодок этого проекта сразу. Но их слишком много, и помоему очевидно, что мы не могли себе это позволить сделать в один момент. Это значит, что все эти лодки нужно где-то обслуживать.
А еще это значит, что бОльшие лодки не могут поместиться в подгорный ангар. Мы то и 1 ангар для «маленьких» лодок еле-еле сделали. А значит, большие лодки будут храниться где-то на открытых базах, а это значит, что их будет видно со спутников, и их проследить легче. И при ударе градом они не выживают, даже атомной бомбы ненадо.

Так что наоборот, база была очень ценна. «Устареть» там могла только начинка и вход из тоннеля. Но тогда назовите базу с более глубоким тоннелем (и обязательно в акватории ЧМ).
Это хорошо или плохо? Или просто инфа?
Там были еще совсем маленькие ПЛ, одно-или двухместные. Как назывались — не знаю. Для диверсий, разведывательные и тд. Где-то даже фото видел давно.
Такие базы строятся под конкретные задачи, под конкретные лодки, и конкретное их количество.

В Балаклаву поеду уже после деоккупации Крыма.
В Балаклаве не был. Так и Хрущев не был, наверняка :)

Вы не понимаете. Для подводной лодки с другими габаритами нужно другое море, даже океан. Верней наоборот: хочешь проплыть десятки тыс км — это потребует больше энергии, а значит больше объемов, значит лодка будет тяжелее, что потребует больше энергии. И получается своего рода замкнутый круг. А вы сравните ширину черного моря и атлантического, тихого океана. И глубину. В ЧМ плавать далеко некуда, значит обозначеный круг закручивается теперь в обратном направлении: можно обойтись лодками гораздо меньшего размера.

К берегам Америки плавали. Но в случае войны, по Турции удар наносить все равно чем-то надо, потому что это был было бы одно из направлений атаки. И лодки в этом сценарии были нужны, как ни крути. черноморские лодки. Через Босфор и средиземноморье на кубу никто на них плавать не собирался. Другие задачи, и лодки другого класса. И база для этих лодок.
Чтобы говорить о моральном устаревании, нужны примеры новых, или другая причина по которой считается, что устарела. Пускай даже, непостроенная база — но задуманная.
И я не могу придумать, чем 825 отличалась в худшую сторону от «эталона». Подводные ложки нужны? Нужны. Воевать с америкой даже сейчас хотят некоторые, что уж говорить по 60-70ые. Значит и база для подводных лодок нужна. Можно говорить лишь о том, что начинка этой базы была устаревшая — но начинку поменять всегда можно. Утверждать, что вся база устарела… Ну я не знаю. Разве что, если бы ссср захватил Турцию. Тогда база бы «устарела» из за месторасположения.

Это скорей всего попытка оправдать провал. Типа «не очень и хотелось», «санкции на пользу» и тд и тп
Ну, ракеты ведь тоже разными бывают. Но вобщем да, на 70ые вариант «ссср распадется и потом может случиться конфликт без межконтинентальных ракет» не мог быть придуман.
Но тут фишка вот в чем. В ссср считали, что США не знает ничего про базу подводных лодок в Севастополе. А сша знало про нее еще на этапе задумки. В недавно выложенных архивах про это было. Соответственно, в ссср не могли знать, был ли у сша список целей.
Насчет вечной мерзлоты — убедительно, согласен. станцию надо было строить где-то в радиусе 1000км.
Даже среди мест с инфраструктурой, Щелкино — очень плохой вариант. Выбрать это место мог только безумец.

Вы мыслите сегодняшними категориями.
Инфраструктура нужна да, ее в Щелкино построили, и в Чернобыле. И в любом другом месте построили б.

Кстати, напомните, какая страна была самой большой? Не уж то в самой большой стране ненашлось места, кроме как на острове с землетрясениями, грязевыми вулканами, и угрозой военного конфликта? Просто глобус раскручиваете — и тыкаете пальцем в произвольное место. Если вы попадаете в СССР, то вы с вероятностью 99% попадаете в место, где все 3 обозначенных фактора не сходятся одновременно. Будет 0 или 1. В редких случаях — 2.

Информация

В рейтинге
Не участвует
Зарегистрирован
Активность