Mikle Likhachev
Почему модемы виснут ?
Хочется внести некоторую ясность в этот вопрос -- почему они виснут ?
А все - проще простого: да в _точности_ из-за того же, из-за чего виснут и сами
машины, а именно:
1. Ошибки в программе (а в модеме - процессор и программа)
2. Сбои в работе аппаратуры (а модем - весьма сложная штука)
3. Кривое железо (фирма солидная, поэтому виснет не каждый пятый, как 386-е
платы производства Тайваня, а только каждый пятидесятый)
4. Помехи, наводки, задранная частота на шине и пр. _внешние_ факторы.
Когда мы только начинали заниматься темой апгрейдов, мы были неприятно
удивлены, что примерно каждый тридцатый пользователь жаловался, что после
апгрейда модем иногда стал виснуть. Времени на то, чтобы найти ошибку в
прошивке, было угрохано просто немеряно. А результат - нулевой. Точнее,
отрицательный результат - это тоже результат, и вот его-то и хочется немного
пояснить. Вот что удалось выяснить в результате почти полугодовых наблюдений и
длительных исследований:
1. В модемах USRrobotics были, есть и будут ошибки, которые не были выявлены
фирмой на этапе тестирования, так как проявляются черезвычайно редко, и только в
специфических условиях. Hапример, есть явный баг в протоколе V.42, в результате
которого модемы виснут _после_ коннекта. Выгядит это так: все приняли, все
передали, и тут-то и завис. Мы этот баг искали месяца два, и так и не нашли. Его
проявление весьма редкое, и зависит от погоды, качества связи, количества
перепосылок блоков и расположения кода в прошивке. Фирма USR и по сей день
пытается его отловить, регулярно меняя этот модуль, но все без толку.
2. Запись _в ПЗУ_, если "повезло", приводит к немедленному зависанию, что
объясняется багом в аппаратуре, и, как вы понимаете, принципиально неустранимо.
Интересно, что на ПЗУ даже не разведена нога записи, так что баг скрыт где-то
внутри заказного кристалла. А пишут они туда по ошибке, мы это подправили только
недавно, поскольку раньше "не везло", а после очередной перекомпиляции вдруг
стали виснуть прошивки у половины бетатестеров. Очевидно, что оригинальные
прошивки по-прежнему туда пишут.
3. Если "повезло", и в регистре, в котором со стороны DSP выставляется код
функции, с самого начала стоит код инициализации Touch Tone, ни одна
роботиковская прошивка вообще не запустится, поскольку первая же инициализация
DSP вызовет установку битов готовности, по которым запустится подпрограмма
обслуживания Touch Tone, которая, в свою очередь, вновь переинициализирует DSP,
и так - вечно. Иными словами, каждый 256-ой модем, если учесть вероятность
распределения бит в байте, летит в урну еще на самой фирме USR. Очевидно также,
что малейшиеи зменения температуры, напряжения питания и т.п. приводят к
проявлению этого бага и в прошедших техконтроль модемах. Сколько еще таких
багов, не замеченных нами, понятия не имею. Думаю, что это не последний.
Состояние же регистров заказного кристалла не обнуляется по ресету аппаратно.
4. В модем встроен деглюкатор, который каждые полторы секунды сбрасывает весь
модем, если в него ничего не пишут. То есть, если программа зациклилась, то
модем будет автоматически перезапущен. Так вот, этот деглюкатор сам - глючный, и
если он сработал в момент заднего фронта сигнала записи, то модем намертво
виснет, до выключения питания.
5. В некоторые, непонятные для нас промежутки времени, модем впадает в такой
режим, когда из битовых портов читается мусор, в результате чего есть ненулевая
вероятность немедленного и без причин разрыва связи с произвольными и бредовыми
кодами, в основном - Loop Loss disconnect. Hе лечится.
6. В последнее время сплошь и рядом Роботиксы делают так: модемы, присланные на
гарантийный ремонт, ремонтируют, наклеивают новый серийный номер, запечатывают в
коробку и ... продают как новые!!! Если вы купили модем, якобы новый, но при
этом на нем не две наклейки, а одна или три, если он - аж 93-го года выпуска,
или начало 94-го (с кроваткой), если на нем видны следы пайки, а часто - такого
качества пайки, что невольно думаешь, где же они таких негров с кривыми руками
нашли ? -- то это и есть типичный пример новой коммерческой политики USR. По
статистике, таких модемов процентов 5-10 от общего числа.
7. Если модем запускается через раз, сбоит, виснет в зависимости от температуры,
или работает не во всех машинах, то это - глючный кварц. Через мои руки прошло
уже штук двадцать таких.
К сожалению, это далеко не полный список причин зависания модемов USR, у меня
просто не хватит терпения изложить здесь все, на что я насмотрелся за последние
полгода, так как через мои руки прошла не одна сотня модемов.
Hо не все так страшно, как может показаться -- вероятность напороться на глючный
экземпляр весьма невелика - где-то один из 30-50. Скажем, дело с мультикартами
или материнскими платами обстоит существенно хуже.
Возникает вопрос: а почему же бывает так, что до апгрейда не вис, а после
апгрейда - виснет ? Ответ простой: то, что висло изначально, просто не ушло за
пределы завода USR, а полетело в мусорное ведро. А мы-то не можем проводить
отбраковку, мы-то должны вернуть 100% взятых на апгрейд модемов! Кроме того,
примерно с той же вероятностью бывает и противоположное - до апгрейда вис, а
после - нет. Hо ведь про это никто не говорит, это принимают как должное,
радуясь, что теперь все Ok. По опыту, вероятность таких проблем где-то 1 шт. на
50 экземпляров.
|