netch80: (Default)
[personal profile] netch80
Из Infiniband Architecture Specification:


When initially powered up or reset, the value of all counters contained in PortCounters on all ports of a node shall be set to zero. During operation, instead of overflowing, they shall stop at all ones. At any time, writing (Set) zero into a counter shall cause the counter to be reset to zero.


Это - остановка по достижению предела, сброс только в ноль, отсутствие атомарного чтения и сброса - сделано одинаково и для 32- и для 64-битных счётчиков, только предел разный.
Вопрос: кто может мне объяснить глубокий смысл такого решения?

Date: 2012-04-03 05:48 pm (UTC)
From: [identity profile] gul-kiev.livejournal.com
Могу предположить, что остановку на всех единицах сделали из соображений "лучше не знать, сколько потеряно байт, чем не быть уверенным, сколько кругов сделал счётчик". Иначе, зная периодичность съёма показаний счётчика, злоумышленник может сделать вид, что было всего пара байт, хотя на самом деле был целый круг. Если же будет остановка на всех единицах с известной периодичностью опроса, будет однозначно понятно, что слишком много, и нужно уменьшать цикл опроса. Например, электросчётчику в квартире логичнее останавливаться на всех единицах, чем мотать кругами.

Ну а отсутствие атомарного чтения и сброса (либо вычитания) - то, что лишает смысла всю затею. Наверное, чисто технические (аппаратные) трудности. Но без этого, конечно, лучше б уж по циклу крутились.

Хорошо, если это самая большая их лажа. :)

Date: 2012-04-03 07:32 pm (UTC)
From: [identity profile] netch80.livejournal.com
> Например, электросчётчику в квартире логичнее останавливаться на всех единицах, чем мотать кругами.

Практически известные мне счётчики делают таки круг через ноль. У меня дома был такой переход. Ну а против злоумышленников решение очевидно и известно всем, кто работает со счётчиками - снимать показания чаще, чем может быть полный круг (а лучше - чаще, чем 1/4 полного круга).
Кстати, старые счётчики имели только 4 цифры значений в кВт*ч, а переполнить 10 тысяч было ещё реально в средней квартире - всего-то сделать провода потолще и постоянные ~50A наберут это значение за месяц, а за два можно и на стандартных входных 25 ампер. Новые ставят не менее чем на 5, а то и на 6 цифр, и такой проблемы уже нет.
А с новыми технологиями и удалённым съёмом показаний - можно хоть раз в час снимать.

> Ну а отсутствие атомарного чтения и сброса (либо вычитания) - то, что лишает смысла всю затею.

Во-во, и это тоже. Если бы запись значения в счётчик вычитала его из показаний (или прибавляла - неважно, если записываемое полноразмерное), то можно было бы смириться тем, что реальный счётчик был бы где-то в софте, и ничего бы не терялось.

> Хорошо, если это самая большая их лажа. :)

Там чудес хватает. Но в целом технология полезная.

Date: 2012-04-04 09:50 am (UTC)
From: [identity profile] netch80.livejournal.com
Кстати, вместо останова счётчика можно было бы сделать однобитовый флаг события перехода счётчика через 0, который ставится железом на каждом переходе (независимо от того, что в нём было) и сбрасывается софтом по явному указанию.

Date: 2012-04-04 10:20 am (UTC)
From: [identity profile] gul-kiev.livejournal.com
Да, я тоже подумал про overflow flag.
Это полумера, т.к. всё равно не даст возможности быть уверенным в том, что всё хорошо и ничего не потеряли, но с ним было бы точно лучше, чем останавливаться на uint_max.
А наиболее правильным было бы иметь и overflow flag, и атомарность чтения/обнуления. Либо overflow flag плюс возможность вычитания. Тогда в софте можно было бы следить за тем, чтобы флаг не взводился, потому что если он взвёлся, уже ни в чём нельзя быть уверенным.

Date: 2012-04-06 04:05 pm (UTC)
ext_605364: geg MOPO4 (Default)
From: [identity profile] gegmopo4.livejournal.com
Такой флаг уже есть — старший бит счётчика. Вот что сбросить только его нельзя — это недоработка.

Profile

netch80: (Default)
netch80

January 2026

S M T W T F S
    1 23
45678910
11121314151617
18192021222324
25262728293031

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Jan. 14th, 2026 09:43 am
Powered by Dreamwidth Studios