Великий сермяжный счётчик
Apr. 3rd, 2012 03:08 pmИз 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-битных счётчиков, только предел разный.
Вопрос: кто может мне объяснить глубокий смысл такого решения?
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-битных счётчиков, только предел разный.
Вопрос: кто может мне объяснить глубокий смысл такого решения?
no subject
Date: 2012-04-04 09:50 am (UTC)no subject
Date: 2012-04-04 10:20 am (UTC)Это полумера, т.к. всё равно не даст возможности быть уверенным в том, что всё хорошо и ничего не потеряли, но с ним было бы точно лучше, чем останавливаться на uint_max.
А наиболее правильным было бы иметь и overflow flag, и атомарность чтения/обнуления. Либо overflow flag плюс возможность вычитания. Тогда в софте можно было бы следить за тем, чтобы флаг не взводился, потому что если он взвёлся, уже ни в чём нельзя быть уверенным.
no subject
Date: 2012-04-06 04:05 pm (UTC)