Akụkọ ihe mere eme na ndị injinia (akụkụ 1)

Akụkọ ihe mere eme na ndị injinia (akụkụ 1)

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

Allergy ụgbọ ala na vanilla ice cream

История для инженеров, которые понимают, что очевидное не всегда является решением, и что насколько бы факты ни казались неправдоподобными, это всё равно факты. В подразделение Pontiac Division корпорации General Motors поступила жалоба:

Nke a bụ nke ugboro abụọ m na-edegara gị akwụkwọ ozi, anaghị m ata gị ụta maka ịzaghị, n'ihi na ọ dị ka onye nzuzu. Ezinụlọ anyị nwere ọdịnala nke iri ice cream kwa abalị ma ha risịrị nri abalị. Ụdị ice cream na-agbanwe mgbe ọ bụla, na mgbe nri abalị gasịrị, ezinụlọ dum na-ahọrọ ice cream ịzụta, mgbe nke ahụ gasịrị, m na-aga ụlọ ahịa. Azụtara m Pontiac ọhụrụ na nso nso a ma kemgbe ahụ njem m iji nweta ice cream aghọwo nsogbu. Ị na-ahụ, oge ọ bụla m zụtara vanilla ice cream wee si na ụlọ ahịa lọta, ụgbọ ala agaghị ebido. Ọ bụrụ na m weta ice cream ọ bụla ọzọ, ụgbọ ala na-amalite n'enweghị nsogbu ọ bụla. Achọrọ m ịjụ ajụjụ siri ike, n'agbanyeghị otú ọ si dị nzuzu: "Gịnị bụ ihe gbasara Pontiac nke na-eme ka ọ ghara ịmalite mgbe m wetara vanilla ice cream, ma na-amalite ngwa ngwa mgbe m wetara ekpomeekpo ọzọ nke ice cream?" "

Dị ka ị nwere ike iche n'echiche, onyeisi oche nke ngalaba ahụ nwere obi abụọ banyere akwụkwọ ozi ahụ. Otú ọ dị, ọ bụrụ na e         gara m onye injinia ka ọ lee. O juru ya anya na otu nwoke bara ọgaranya, gụrụ akwụkwọ nke ọma bi n’ebe mara mma zutere ya. Ha kwekọrịtara na ha ga-ezute ozugbo ha risịrị nri abalị ka ha abụọ nwee ike ịga n’ụlọ ahịa ṅụọ ice cream. N'uhuruchi ahụ ọ bụ vanilla, ma mgbe ha laghachiri n'ụgbọ ala, ọ gaghị ebido.

Инженер приезжал ещё три вечера. В первый раз мороженое было шоколадным. Машина завелась. Во второй раз было клубничное мороженое. Машина завелась. На третий вечер он попросил взять ванильное. Машина не завелась.

N’ịtụgharị uche n’ụzọ ezi uche dị na ya, injinịa ahụ jụrụ ikwere na ụgbọ ala ahụ na-eme ihe nfụkasị ahụ na vanilla ice cream. N’ihi ya, ekwetara m onye nwe ụgbọ ala ahụ na ọ ga-anọgide na-eleta ya ruo mgbe ọ chọtara ihe ngwọta nye nsogbu ahụ. Na n'ụzọ, ọ malitere idetu ihe: o dere ozi niile, oge nke ụbọchị, ụdị mmanụ ụgbọala, oge mbata na nloghachi si ụlọ ahịa, wdg.

N'oge na-adịghị anya, injinia ahụ ghọtara na onye nwe ụgbọ ala ahụ na-eji obere oge zụta vanilla ice cream. Ihe kpatara ya bụ nhazi nke ngwongwo na ụlọ ahịa ahụ. Vanilla ice cream bụ nke kachasị ewu ewu ma debe ya na friza dị iche n'ihu ụlọ ahịa ahụ iji mee ka ọ dị mfe ịchọta. Na ụdị ndị ọzọ niile dị n'azụ ụlọ ahịa ahụ, ọ na-ewekwa oge karịa ịchọta ụdị dị iche iche na ịkwụ ụgwọ.

Ugbu a ajụjụ bụ maka injinia: gịnị kpatara na ụgbọ ala ahụ ebidoghị ma ọ bụrụ na obere oge agafeela kemgbe a gbanyụrụ engine ahụ? Ebe ọ bụ na nsogbu ahụ bụ oge, ọ bụghị vanilla ice cream, onye injinia chọtara azịza ya ngwa ngwa: ọ bụ mkpọchi gas. Ọ na-eme ná mgbede ọ bụla, ma mgbe onye nwe ụgbọ ala ahụ na-etinyekwu oge na-achọ ice cream, injin ahụ jisiri ike dajụọ nke ọma wee malite ngwa ngwa. Na mgbe nwoke ahụ zụtara vanilla ice cream, injin ahụ ka na-ekpo ọkụ nke ukwuu na mkpọchi gas enweghị oge ịgbaze.

Omume: Ọbụna nsogbu ndị ara kpam kpam na-adị adị mgbe ụfọdụ.

okuku Bandicoot

Переживать такое болезненно. Как программист, ты привыкаешь обвинять свой код в первую очередь, во вторую, в третью… и где-то в десятитысячную очередь обвиняешь компилятор. И ещё ниже по списку уже обвиняешь оборудование.

Nke a bụ akụkọ m gbasara ahụhụ ngwaike.

Maka egwuregwu Crash Bandicoot, edere m koodu maka ibu ma chekwaa na kaadị ebe nchekwa. Maka onye nrụpụta egwuregwu smug dị otú ahụ, ọ dị ka ịgagharị n'ogige ahụ: echere m na ọrụ ahụ ga-ewe ọtụtụ ụbọchị. Agbanyeghị, emechara m debugging koodu ahụ maka izu isii. Ka m na-aga, m na-edozi nsogbu ndị ọzọ, ma ụbọchị ole na ole, m na-alaghachi na koodu a ruo awa ole na ole. Ọ bụ ihe mgbu.

Mgbaàmà ahụ dị ka nke a: mgbe ị na-echekwa egwuregwu egwuregwu dị ugbu a ma nweta kaadị ebe nchekwa, ihe ọ bụla na-eme ka ọ dị mma mgbe niile ... Ma mgbe ụfọdụ, ịgụ ma ọ bụ dee oge ọrụ n'enweghị ihe kpatara ya. Ndekọ dị mkpirikpi na-emebikarị kaadị ebe nchekwa. Mgbe onye ọkpụkpọ na-agbalị ịzọpụta, ọ bụghị nanị na ọ na-adaba ịchekwa, ma na-ebibikwa map ahụ. Ajọ.

Mgbe obere oge gasịrị, onye na-emepụta anyị na Sony, Connie Bus, malitere ịtụ ụjọ. Anyị enweghị ike ibugharị egwuregwu ahụ na ahụhụ a, na izu isii ka e mesịrị, aghọtaghị m ihe na-akpata nsogbu ahụ. Site na Connie, anyị kpọtụụrụ ndị nrụpụta PS1 ndị ọzọ: ọ dị onye zutere ihe ọ bụla yiri ya? Mba. Ọ nweghị onye nwere nsogbu na kaadị ebe nchekwa.

Когда у тебя нет идей по отладке, то практически единственным подходом остаётся «разделять и властвовать»: убираешь всё больше и больше кода из ошибочной программы, пока не остаётся сравнительно небольшой фрагмент, при работе которого до сих пор возникает проблема. То есть отрезаешь от программы по куску, пока не остаётся та часть, что содержит баг.

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

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

Na nkenke, emere m ya. Ewepụrụ m ọtụtụ koodu ruo mgbe a hapụrụ m koodu mbụ nke na-ahazi usoro ahụ iji mee egwuregwu ahụ, malite ngwa ngwa nsụgharị, wdg. N'ezie, n'oge a, enweghị m ike ịmepụta menu nchekwa na ibu ibu, n'ihi na m ga-emepụta stub maka koodu eserese niile. Mana enwere m ike ịme ka ọ bụ onye ọrụ na-eji nchekwa (adịghị ahụ anya) ma buo ihuenyo wee rịọ ka ịchekwaa wee dee na kaadị ebe nchekwa.

В результате у меня остался небольшой фрагмент кода, с которым всё ещё возникала вышеупомянутая проблема — но до сих пор это происходило случайным образом! Чаще всего всё работало нормально, но изредка возникали сбои. Я убрал почти весь код игры, но баг всё ещё жил. Это озадачивало: оставшийся код на самом деле ничего не делал.

В какой-то момент, вероятно, в три утра, мне в голову пришла мысль. Операции чтения и записи (ввода-вывода) подразумевают точное время выполнения. Когда работаешь с жёстким диском, картой памяти или Bluetooth-модулем, низкоуровневый код, отвечающий за чтение и запись, делает это в соответствии с тактовыми импульсами.

С помощью часов устройство, которое не связано напрямую с процессором, синхронизируется с исполняемым в процессоре кодом. Часы определяют частоту бодов — скорость передачи данных. Если с таймингами возникает путаница, то также путается либо оборудование, либо ПО, либо они оба. И это очень плохо, потому что данные могут повредиться.

А вдруг что-то в нашем коде путает тайминги? Я проверил всё, что с этим связано, в коде тестовой программы, и заметил, что мы задали программируемому таймеру в PS1 частоту 1 кГц (1000 тактов в секунду). Это довольно много, по умолчанию при запуске приставки он работает с частотой 100 Гц. И большинство игр использует именно эту частоту.

Энди, разработчик игры, задал таймеру частоту 1 кГц чтобы движения вычислялись точнее. Энди склонен к чрезмерности, и если мы эмулируем гравитацию, то делаем это настолько точно, насколько возможно!

Но что если ускорение таймера как-то повлияло на общий тайминг программы, а значит и на часы, которые регулируют частоту бодов для карты памяти?

Я закомментировал код с таймером. Ошибка больше не повторялась. Но это не означает, что мы её исправили, ведь сбой возникал случайным образом. А вдруг мне просто повезло?

Через несколько дней я снова экспериментировал с тестовой программой. Баг не повторялся. Я вернулся к полной кодовой базе игры и изменил код сохранения и загрузки так, чтобы программируемый таймер сбрасывался в исходное значение (100 Гц) перед обращением к карте памяти, а затем снова возвращался к 1 кГц. Сбоев больше не возникало.

Ma gịnị mere nke a ji mee?

M laghachikwara na mmemme ule ọzọ. Agbalịrị m ịchọta ụfọdụ ụkpụrụ na ndapụta nke mperi yana ngụ oge 1 kHz. N'ikpeazụ, achọpụtara m na njehie ahụ na-eme mgbe mmadụ na-eji njikwa PS1 egwu egwu. Ebe ọ bụ na agaghị m eme nke a n'onwe m - gịnị kpatara m ga-eji chọọ onye njikwa mgbe ị na-anwale koodu nchekwa na ibu? - Adịghị m achọpụta na ndabere a. Mana otu ụbọchị, otu n'ime ndị na-ese ihe na-eche m ka m gụchaa ule - ikekwe m na-akọcha oge ahụ - ma jiri ụjọ tụọ onye njikwa ahụ n'aka ya. Enwere mperi. "Chere, gịnị?!" Ọfọn, mee ya ọzọ!"

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

Я пришёл к Конни и рассказал о своём открытии. Она передала информацию одному из инженеров, проектировавшему PS1. «Невозможно, — ответил он, — это не может быть аппаратной проблемой». Я попросил Конни устроить нам беседу.

Injinia kpọrọ m, anyị na-arụrịta ụka n'asụsụ Bekee ya gbajiri agbaji na Japanese m (oke) gbajiri agbaji. N'ikpeazụ m kwuru, "Ka m zipu mmemme ule akara 30 m ebe ịkwagharị onye njikwa na-akpata ahụhụ." O kwetara. Kwuru na ọ bụ igbu oge yana na ọ na-arụsi ọrụ ike na-arụ ọrụ ọhụrụ, mana ọ ga-enye aka n'ihi na anyị bụ onye nrụpụta dị mkpa maka Sony. Emechara m ihe omume ule m wee zigara ya ya.

На следующий вечер (мы были в Лос-Анджелесе, а он в Токио) он позвонил мне и смущённо извинился. Это была аппаратная проблема.

Amaghị m ihe bụ kpọmkwem ahụhụ ahụ, ma site n'ihe m nụrụ n'isi ụlọ ọrụ Sony, ọ bụrụ na ị na-edozi ngụ oge na uru zuru oke, ọ na-egbochi ihe ndị dị na motherboard na gburugburu kristal ngụ oge. Otu n'ime ha bụ onye na-ahụ maka ọnụego baud maka kaadị ebe nchekwa, nke na-edobekwa ọnụ ọgụgụ baud maka ndị na-ahụ maka ya. Abụghị m onye injinia, yabụ enwere m ike mebie ihe.

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

Ajọ ehi

Na 1980s, onye ndụmọdụ m Sergei dere software maka SM-1800, ihe mkpuchi Soviet nke PDP-11. Awụnyela microcomputer a n'ọdụ ụgbọ okporo ígwè dị nso na Sverdlovsk, bụ ebe dị mkpa njem njem na USSR. E mere usoro ọhụrụ ahụ iji na-ebugharị ụgbọ ala na ụgbọ okporo ígwè. Mana ọ nwere ahụhụ na-ewe iwe nke butere mkpọka na mkpọka enweghị usoro. Ọdịda na-abụkarị mgbe mmadụ gara n'ụlọ na mgbede. Mana n'agbanyeghị nyocha nke ọma n'echi ya, kọmpụta ahụ rụrụ ọrụ nke ọma na nyocha akwụkwọ ntuziaka na akpaaka. Nke a na-egosipụtakarị ọnọdụ agbụrụ ma ọ bụ ụfọdụ ahụhụ asọmpi ọzọ na-eme n'okpuru ọnọdụ ụfọdụ. N'ịbụ ndị ike gwụrụ na oku n'ime abalị, Sergei kpebiri ịbanye na ala ya, na nke mbụ, ghọta ihe ọnọdụ ndị dị na mbara igwe mere ka kọmputa ahụ daa.

Сначала он собрал статистику всех необъяснимых падений и построил график по датам и времени. Паттерн был очевиден. Понаблюдав ещё несколько дней, Сергей понял, что легко может спрогнозировать время будущих системных сбоев.

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

Ụlọ ọrụ ike nuklia Chernobyl gbawara na 1986, mbibi redio na-akpata mere ka ebe ndị gbara ya gburugburu ghara ibibi. Oke mpaghara dị n'ebe ugwu Ukraine, Belarus na ọdịda anyanwụ Russia emerụrụ. N'ịbụ ndị na-enyo enyo dị elu nke radieshon na ụgbọ ala ndị na-abata, Sergei mepụtara usoro iji nwalee echiche a. Amachibidoro ndị mmadụ ka ha nwee dosimeters, yabụ Sergei debara aha ya na ọtụtụ ndị agha n'ọdụ ụgbọ oloko. Mgbe ọtụtụ mmanya vodka gasịrị, o jisiri ike mee ka onye agha kwenye ka ọ tụọ ọkwa radieshon n'otu n'ime ụgbọ ala ndị a na-enyo enyo. Ọ tụgharịrị na ọkwa ahụ dị ọtụtụ ugboro karịa ụkpụrụ nkịtị.

Мало того, что скот сильно фонил радиацией, её уровень был настолько велик, что это приводило к случайному выпадению битов в памяти СМ-1800, которая стояла в здании рядом со станцией.

Enwere ụkọ nri na USSR, ndị ọchịchị kpebiri ịgwakọta anụ Chernobyl na anụ sitere na mpaghara ndị ọzọ nke mba ahụ. Nke a mere ka o kwe omume ibelata ọkwa redioaktivu n'ozuzu ya na-enweghị atụfu akụrụngwa bara uru. N'ịmụ banyere nke a, Sergei dejupụtara akwụkwọ maka mbata ozugbo. Na mkpọka kọmputa kwụsịrị n'onwe ha mgbe ọkwa radieshon belatara ka oge na-aga.

Site na ọkpọkọ

N'otu oge, Movietech Solutions mepụtara ngwanrọ maka sinima, nke emebere maka ndekọ ego, ire tiketi na njikwa izugbe. Ụdị DOS nke ngwa flagship na-ewu ewu nke ukwuu n'etiti ụdọ ihe nkiri ntanaka na nke etiti na North America. Ya mere, ọ bụghị ihe ijuanya na mgbe a mara ọkwa ụdị Windows 95, jikọtara ya na ihuenyo mmetụ kacha ọhụrụ na kiosks ọrụ onwe onye, ​​​​ma kwadokwa ụdị ọrụ mgbasa ozi ọ bụla, ngwa ngwa ọ ghọrọ ewu ewu. Ọtụtụ mgbe mmelite na-aga n'enweghị nsogbu. Ndị ọrụ IT mpaghara rụnyere akụrụngwa ọhụrụ, data kwagara, yana azụmaahịa gara n'ihu. Ewezuga mgbe ọ na-adịghị. Mgbe nke a mere, ụlọ ọrụ ahụ ga-eziga James, nke a na-akpọ "The Cleaner."

Ọ bụ ezie na aha otutu ahụ na-egosi ụdị ọjọọ, onye na-ehicha ihe bụ nanị ngwakọta nke onye nkụzi, installer na jack-of-all-trades. James ga-anọ ụbọchị ole na ole na saịtị onye ahịa na-ejikọta ihe niile ọnụ, wee nọrọ ụbọchị ole na ole ọzọ ịkụziri ndị ọrụ otu esi eji usoro ọhụrụ ahụ, dozie nsogbu ngwaike ọ bụla bilitere na n'ezie na-enyere ngwanrọ ahụ aka site na nwata.

Поэтому не удивительно, что в это суматошное время Джеймс пришёл утром в офис, и не успел дойти до своего стола, как его встретил руководитель, наполненный кофеином сверх обычного.

— Боюсь, тебе нужно как можно скорее отправиться в Аннаполис в Новой Шотландии. У них легла вся система, и после ночи совместной работы с их инженерами мы не можем понять, что произошло. Похоже, на сервере отказала сеть. Но только после того, как система проработала несколько минут.

— Они не вернулись к старой системе? — совершенно серьёзно ответил Джеймс, хотя мысленно он вытаращил глаза от удивления.

— Именно: у их айтишника «изменились приоритеты» и он решил уйти с их старым сервером. Джеймс, они установили систему на шести площадках и только что заплатили за премиальную поддержку, а их бизнес сейчас ведётся как в 1950-х.

James gbatịkwara ntakịrị.

- Nke ahụ bụ okwu ọzọ. Ọ dị mma, ka anyị bido.

Mgbe ọ rutere Annapolis, ihe mbụ o mere bụ ịchọta ụlọ ihe nkiri mbụ nke onye ahịa nwere nsogbu. Na map e sere na ọdụ ụgbọ elu, ihe niile dị mma, mana mpaghara dị n'akụkụ adreesị a chọrọ na-enyo enyo. Ọ bụghị ghetto, ma na-echetara ihe nkiri noir. Ka James na-adọba ụgbọala n'akụkụ ọnụ ụzọ ime obodo, otu nwaanyị akwụna bịakwutere ya. N'iburu nha Annapolis, o yikarịrị ka ọ bụ naanị ya n'obodo ahụ dum. Ọdịdị ya ozugbo wetara n'uche onye a ma ama nke nyere mmekọahụ maka ego na nnukwu ihuenyo. Mba, ọ bụghị banyere Julia Roberts, kama banyere Jon Voight [zoro aka na ihe nkiri ahụ "Midnight Cowboy" - ihe ruru. uzo].

Отправив проститутку восвояси, Джеймс отправился к кинотеатру. Окрестности стали получше, но всё равно создавалось впечатление захудалости. Не то чтобы Джеймс слишком беспокоился. Он уже бывал в убогих местах. А это была Канада, в которой даже грабители достаточно вежливы, чтобы сказать «спасибо» после того, как отобрали ваш бумажник.

Боковой вход в кинотеатр находился в промозглой аллее. Джеймс подошёл к двери и постучал. Вскоре она заскрипела и приоткрылась.

-Ị bụ onye na-ehicha ihe? - oké olu siri n'ime.

- Ee, ọ bụ m ... Abịara m idozi ihe niile.

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

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

Jems kpọrọ Mak ma gwa ya ọnọdụ ahụ. Ọ bụghị ihe siri ike iche n'echiche na James nwere ike ịchọ ịrapara n'ahụ ma hụ ma ihe ọ bụla a na-atụghị anya ya emee. Ọ gbadara na steepụ wee malite ịjụ ndị ọrụ ahụ ihe merenụ. O doro anya na sistemụ ahụ akwụsịla ịrụ ọrụ. Ha gbanyụrụ ya ma gbanye, ihe niile na-arụ ọrụ. Ma mgbe nkeji 10 gachara, usoro ahụ dara.

Как раз в этот момент произошло нечто подобное. Внезапно система для продажи билетов начала выдавать ошибки. Сотрудники вздохнули и сгребли бумажные билеты, а Джеймс поспешил в серверную. С сервером всё выглядело хорошо.

Mgbe ahụ, otu n'ime ndị ọrụ batara.

- Sistemu na-arụ ọrụ ọzọ.

Джеймс был озадачен, ведь он ничего не сделал. Точнее, ничего такого, что заставило бы систему работать. Он разлогинился, взял телефон и позвонил в службу поддержки своей компании. Вскоре в серверную вошёл тот же сотрудник.

- Usoro dị ala.

Джеймс взглянул на сервер. На экране танцевал интересный и знакомый узор из разноцветных форм — хаотично извивающиеся и переплетающиеся трубы. Все мы когда-то видели этот скринсейвер. Он был прекрасно отрисован и буквально гипнотизировал.


Джеймс нажал кнопку и узор исчез. Он поторопился к билетной кассе и по пути встретил возвращавшегося к нему сотрудника.

- Sistemu na-arụ ọrụ ọzọ.

Если можно мысленно сделать фейспалм, то именно это Джеймс и сделал. Скринсейвер. Он использует OpenGL. И поэтому во время работы потребляет все ресурсы серверного процессора. В результате каждое обращение к серверу завершается по таймауту.

Джеймс вернулся в серверную, залогинился и заменил скринсейвер с прекрасными трубами на пустой экран. То есть вместо скринсейвера, поглощающего 100 % ресурсов процессора, поставил другой, не потребляющий ресурсы. Затем подождал 10 минут, чтобы проверить свою догадку.

Когда Джеймс приехал в следующий кинотеатр, он задумался о том, как объяснить своему руководителю, что он только что пролетел 800 км, чтобы отключить скринсейвер.

Ọkụkụ n'oge ụfọdụ akụkụ nke ọnwa

Akụkọ mere eme. Otu ụbọchị, ahụhụ software bilitere nke dabere na oge ọnwa. Enwere obere usoro a na-ejikarị eme ihe na mmemme MIT dị iche iche iji gbakọọ nso nso nke ọnwa n'ezie. GLS wuru usoro a n'ime mmemme LISP nke, mgbe ị na-ede faịlụ, ga-ewepụta ahịrị nwere akara oge ihe fọrọ nke nta ka ọ bụrụ mkpụrụedemede 80 ogologo. Ọ dị obere na ahịrị mbụ nke ozi ga-emecha dị ogologo wee duga n'ahịrị na-esote. Ma mgbe mmemme ahụ mechara gụọ faịlụ a, ọ bụrụ ọnụ. Ogologo ahịrị nke mbụ dabere na kpọmkwem ụbọchị na oge, yana ogologo oge nkọwapụta nke oge a na-ebipụta akara oge. Ya bụ, ahụhụ ahụ dabere n'ụzọ nkịtị na oge ọnwa!

Mbipụta akwụkwọ mbụ Faịlụ Jargon (Steele-1983) содержало образец такой строки, приводившей к описанному багу, однако наборщик «исправил» её. С тех пор это описывают как «баг фазы Луны».

Otú ọ dị, kpachara anya na echiche. Afọ ole na ole gara aga, ndị injinia sitere na CERN (European Center for Nuclear Research) zutere njehie na nnwale emere na Large Electron-Positron Collider. Ebe ọ bụ na kọmputa na-arụsi ọrụ ike nke ukwuu data ngwaọrụ a na-emepụta tupu ya egosi ndị ọkà mmụta sayensị ihe si na ya pụta, ọtụtụ ndị na-eche na ngwanro ahụ na-enwe mmetụta n'ụzọ ụfọdụ n'oge ọnwa. Ọtụtụ ndị injinia na-achọsi ike ghọtara eziokwu ahụ. Njehie ahụ bilitere n'ihi ntakịrị mgbanwe na geometry nke mgbanaka ogologo 27 km n'ihi nrụrụ nke Ụwa n'oge nkwụsị nke ọnwa! Akụkọ a abanyela n'akụkọ ọdịnala physics dị ka "Newton's Revenge on Particle Physics" na ihe atụ nke njikọ dị n'etiti iwu kachasị mfe na nke ochie nke physics na echiche sayensị kachasị elu.

Ịwụsa ụlọ mposi na-akwụsị ụgbọ oloko

Ihe kacha mma ngwaike m nụtụrụla bụ n'ụgbọ okporo ígwè dị oke ọsọ na France. Ahụhụ ahụ butere breeki mberede nke ụgbọ oloko ahụ, mana naanị ma ọ bụrụ na enwere ndị njem nọ n'ụgbọ ahụ. N'ọnọdụ ọ bụla dị otú ahụ, a na-ewepụ ụgbọ oloko ahụ, nyochaa, ma ọ dịghị ihe a chọtara. Mgbe ahụ, e zighachiri ya n'ahịrị ahụ, ọ dara ozugbo wee kwụsị.

Во время одной из проверок инженер, ехавший в поезде, пошёл в туалет. Вскоре он смыл за собой, БУМ! Аварийная остановка.

Injinia kpọtụụrụ onye ọkwọ ụgbọ ala wee jụọ:

— Gịnị ka ị na-eme tupu a breeki?

- Ọfọn, m ji nwayọọ nwayọọ na-agbada ...

Это было странно, потому что при обычном курсировании поезд притормаживает на спусках десятки раз. Состав отправился дальше, и на следующем спуске машинист предупредил:

- M ga-eji nwayọọ nwayọọ.

Ọ dịghị ihe mere.

— Что ты делал при последнем торможении? — спросил машинист.

- Ee, m nọ n'ụlọ mposi ...

- Ọfọn, gaa n'ụlọ mposi mee ihe ị mere mgbe anyị gbadara ọzọ!

Инженер отправился в туалет, и когда машинист предупредил: «Я торможу», он спустил воду. Конечно же, поезд тут же остановился.

Теперь они могли воспроизвести проблему и нужно было найти причину.

Mgbe nkeji abụọ gachara, ha chọpụtara na eriri igwe breeki remote control (ụgbọ okporo ígwè ahụ nwere otu injin na nsọtụ nke ọ bụla) kwụsịrị na mgbidi nke kabinet eletrik ma dina na relay nke na-achịkwa ụlọ mposi plọg solenoid ... Mgbe agbagharị agbagharị. agbanwuru, ọ mepụtara nnyonye anya na eriri breeki, na nchedo sistemu megide ọdịda gụnyere naanị breeki mberede.

Ọnụ ụzọ nke kpọrọ FORTRAN asị

Несколько месяцев назад мы заметили, что сетевые подключения к сети на материке [дело было на Гавайях] становились очень-очень медленными. Это могло длиться 10-15 минут, а затем неожиданно возникало снова. Спустя некоторое время мой коллега пожаловался мне, что подключения к сети на материке n'ozuzu не работают. У него был какой-то код на FORTRAN, который нужно было скопировать на машину на материке, но это не получалось, потому что «сеть не держалась достаточно долго, чтобы завершилась загрузка по FTP».

Ee, ọ tụgharịrị na ọdịda netwọk mere mgbe onye ọrụ ibe nwara FTP faịlụ nwere koodu isi iyi na FORTRAN gaa na igwe dị na ala ala. Anyị gbalịrị idebe faịlụ ahụ: mgbe ahụ, e depụtaghachiri ya nke ọma (mana igwe a na-atụ anya ya enweghị onye na-ebupụta ihe, ya mere, edozighị nsogbu ahụ). N'ikpeazụ, anyị 'kewaa' koodu FORTRAN n'ime obere iberibe wee ziga ha otu n'otu oge. E depụtaghachiri ọtụtụ iberibe iberibe ahụ n'enweghị nsogbu, mana iberibe ole na ole agafeghị, ma ọ bụ gafee ọtụtụ mgbalị.

Mgbe anyị tụlere amaokwu ndị ahụ nwere nsogbu, anyị chọpụtara na ha nwere ihe jikọrọ ya: ha niile nwere ihe mgbochi okwu malitere wee mechie na ahịrị nwere isi obodo C (dị ka onye ọrụ ibe họọrọ ikwu okwu na FORTRAN). Anyị zigaara ndị ọkachamara netwọkụ na mpaghara ala ma rịọ maka enyemaka. N'ezie, ha chọrọ ịhụ sample nke faịlụ anyị na-enweghị ike ibufe site FTP...ma akwụkwọ ozi anyị eruteghị ha. N'ikpeazụ, anyị bịara na dị mfe kọwaa, как выглядят непересылаемые файлы. Это сработало 🙂 [Осмелюсь ли я добавить сюда пример одного из проблемных комментариев на FORTRAN? Наверное, не стоит!]

N'ikpeazụ anyị jisiri ike chọpụta ya. A rụnyere ọnụ ụzọ ámá ọhụrụ n'oge na-adịbeghị anya n'etiti akụkụ ụlọ akwụkwọ anyị na netwọk nke ala. O nwere nnukwu ihe isi ike ibufe ngwugwu nwere obere mkpụrụedemede C ugboro ugboro! Naanị ole na ole n'ime ngwugwu ndị a nwere ike iburu akụrụngwa ọnụ ụzọ ámá ma gbochie ọtụtụ ngwugwu ndị ọzọ ịbanye. Anyị kpesara onye na-emepụta ọnụ ụzọ ámá...ma ha zara: “Oh, ee, ị na-eche ahụhụ C ugboro ugboro ihu! Anyị amaraworị banyere ya.” Anyị mechara dozie nsogbu ahụ site n'ịzụta ọnụ ụzọ ọhụrụ site n'aka onye nrụpụta ọzọ (na nchekwa nke mbụ, enweghị ike ịnyefe mmemme FORTRAN nwere ike ịbụ uru maka ụfọdụ!).

Oge siri ike

Afọ ole na ole gara aga, ka m na-arụ ọrụ n'ịmepụta usoro ETL na Perl iji belata ọnụ ahịa nke ule ụlọ ọgwụ nke 40, ọ dị m mkpa ịhazi ihe dị ka ụbọchị 000. Abụọ n'ime ha agafeghị ule ahụ. Nke a enyeghị m nsogbu nke ukwuu n'ihi na ewepụtara ụbọchị ndị a site na data ndị ahịa nyere nke na-abụkarị, ka anyị ga-asị, ihe ijuanya. Ma mgbe m lere data mbụ ahụ, ọ bịara bụrụ na ụbọchị ndị a bụ Jenụwarị 1, 2011 na Jenụwarị 1, 2007. Echere m na ahụhụ ahụ dị na mmemme ahụ m deburu, mana o mechara bụrụ afọ 30. ochie. Nke a nwere ike ịdị ka ihe omimi nye ndị na-amaghị usoro gburugburu ebe obibi ngwanro. N'ihi mkpebi ụlọ ọrụ ọzọ mere ogologo oge iji nweta ego, onye ahịa m kwụrụ m ụgwọ idozi ahụhụ nke otu ụlọ ọrụ webatara na mberede na nke ọzọ na ebumnuche. Ka ị ghọta ihe m na-ekwu, ọ dị m mkpa ikwu maka ụlọ ọrụ gbakwunyere njirimara nke mechara bụrụ ahụhụ, yana ihe omume ole na ole ndị ọzọ na-adọrọ mmasị bụ ndị nyere aka na ahụhụ dị omimi m doziri.

N’oge ochie, kọmpụta Apple ga-ewepụta ụbọchị n’otu oge na Jenụwarị 1, 1904. Ihe kpatara ya dị mfe: ọ na-eji "elekere sistemu" nwere batrị iji debe ụbọchị na oge. Kedu ihe mere mgbe batrị ahụ nwụrụ? Kọmputa malitere iji ọnụọgụ sekọnd were akara ụbọchị ahụ kemgbe mmalite nke oge. Site n'oge ochie, anyị pụtara nrụtụ aka mbụ ụbọchị, na maka Macintoshes ọ bụ January 1, 1904. Ma mgbe batrị nwụsịrị, ugbu a ụbọchị a tọgharịa na nke kpọmkwem. Ma gịnị mere nke a ji mee?

Na mbụ, Apple na-eji 32 ibe n'ibe iji chekwaa ọnụọgụgụ nke sekọnd kemgbe ụbọchị mbụ. Otu bit nwere ike ịchekwa otu n'ime ụkpụrụ abụọ - 1 ma ọ bụ 0. Iberibe abụọ nwere ike ịchekwa otu n'ime ụkpụrụ anọ: 00, 01, 10, 11. Atọ atọ - otu uru n'ime asatọ: 000, 001, 010, 011, 100 , 101, 110, 111, wdg. Na 32 nwere ike ịchekwa otu n'ime ụkpụrụ 232, ya bụ, 4 sekọnd. Maka ụbọchị Apple, nke a ruru ihe dị ka afọ 294, yabụ Mac ndị okenye enweghị ike ijikwa ụbọchị mgbe 967 gachara. Ma ọ bụrụ na batrị sistemụ ahụ anwụọ, a na-emegharị ụbọchị ahụ ka ọ bụrụ 296 sekọnd kemgbe mmalite nke oge ahụ, ma ị ga-eji aka gị dozie ụbọchị ahụ oge ọ bụla ịgbanyere kọmputa (ma ọ bụ ruo mgbe ịzụrụ batrị ọhụrụ).

Agbanyeghị, mkpebi Apple mere ịchekwa ụbọchị dịka sekọnd kemgbe oge pụtara na anyị enweghị ike ịhazi ụbọchị tupu oge ahụ, nke nwere nsonaazụ dị ukwuu, dịka anyị ga-ahụ. Apple webatara atụmatụ, ọ bụghị ahụhụ. Tinyere ihe ndị ọzọ, nke a pụtara na sistemụ arụmọrụ Macintosh anaghị egbochi "nchịta puku afọ" (nke enweghị ike ikwu maka ọtụtụ ngwa Mac ndị nwere usoro ụbọchị nke ha iji gbochie mgbochi).

Gaba n'ihu. Anyị na-eji Lotus 1-2-3, "ngwa egbu egbu" nke IBM nyere aka ịmalite mgbanwe PC, ọ bụ ezie na kọmputa Apple nwere VisiCalc, nke mere ka kọmputa nkeonwe nwee ọganihu. N'ikwu eziokwu, ọ bụrụ na 1-2-3 apụtabeghị, PC agaraghị ewepụ, na akụkọ ihe mere eme nke kọmputa nkeonwe nwere ike ịmalite n'ụzọ dị iche. Lotus 1-2-3 mesoro 1900 ezighi ezi dị ka afọ itule. Mgbe Microsoft wepụtara akwụkwọ akụkọ mbụ ya, Multiplan, ọ weghaara obere òkè nke ahịa ahụ. Ma mgbe ha malitere ọrụ Excel, ha kpebiri na ọ bụghị naanị na ha ga-eṅomi atụmatụ aha ahịrị na kọlụm site na Lotus 1-2-3, kamakwa iji hụ na ndakọrịta ahụhụ site na ịkpachara anya na-emeso 1900 dị ka afọ ịwụ elu. Nsogbu a ka dịkwa taa. Ya mere na 1-2-3 ọ bụ ahụhụ, ma na Excel ọ bụ mkpebi siri ike iji hụ na ndị ọrụ 1-2-3 niile nwere ike ibubata tebụl ha n'ime Excel na-enweghị ịgbanwe data, ọ bụrụgodị na ọ dị njọ.

Ma enwere nsogbu ọzọ. Nke mbụ, Microsoft wepụtara Excel maka Macintosh, nke na-amataghị ụbọchị tupu January 1, 1904. Na na Excel, January 1, 1900 weere na mmalite nke oge. Ya mere, ndị mmepe ahụ mere mgbanwe nke mere na mmemme ha ghọtara ụdị oge na-echekwa data n'ime onwe ya dịka oge a chọrọ. Microsoft dere ọbụna akụkọ nkọwa gbasara nke a. Mkpebi a butere ahụhụ m.

Sistemu ETL m nwetara akwụkwọ akụkọ Excel sitere n'aka ndị ahịa emebere na Windows, mana enwere ike imepụta ya na Mac. Ya mere, mmalite nke oge dị na tebụl nwere ike ịbụ January 1, 1900, ma ọ bụ January 1, 1904. Kedu ka esi achọpụta? Ụdị faịlụ Excel na-egosi ozi dị mkpa, mana parser m ji mee ihe egosighị ya (ugbu a ọ na-eme), ma chee na ị maara oge maka otu tebụl. O nwere ike ịbụ na m ga-etinyekwu oge n'ịghọta usoro ọnụọgụ abụọ nke Excel na iziga patch na onye na-ede akwụkwọ parser, mana enwere m ọtụtụ ihe ọzọ m ga-eme maka onye ahịa, ya mere, edere m ngwa ngwa heuristic iji chọpụta oge. Ọ dị mfe.

Na Excel, ụbọchị July 5, 1998 nwere ike ịnọchite anya na usoro "07-05-98" (usoro America na-abaghị uru), "Jul 5, 98", "July 5, 1998", "5-Jul-98" ma ọ bụ usoro ọzọ na-abaghị uru (n'ụzọ dị ịtụnanya, otu n'ime ụdị nke Excel m enyeghị bụ ISO 8601). Otú ọ dị, n'ime tebụl ahụ, a na-echekwa ụbọchị a na-emeghị ka ọ bụrụ "35981" maka oge-1900 ma ọ bụ "34519" maka oge-1904 (ọnụọgụ ahụ na-anọchi anya ọnụọgụ ụbọchị kemgbe oge ahụ). M na-eji obere nzacha dị mfe wepụ afọ ahụ n'ime ụbọchị a haziri, wee were parser Excel wepụ afọ ahụ n'ime ụbọchị enweghị usoro. Ọ bụrụ na ma ụkpụrụ dị iche na 4 afọ, m maara na m na-eji a usoro na epoch-1904.

Kedu ihe kpatara na ejighi m akara ụbọchị ahazi? N'ihi na July 5, 1998 nwere ike ịhazi dị ka "July, 98" na ụbọchị nke ọnwa furu efu. Anyị nwetara tebụl site n'aka ọtụtụ ụlọ ọrụ na-emepụta ha n'ọtụtụ ụzọ dị iche iche na ọ dịịrị anyị (na nke a, m) iji chọpụta ụbọchị. Na mgbakwunye, ọ bụrụ na Excel enweta ya nke ọma, yabụ anyị kwesịrị!

N'otu oge ahụ m zutere 39082. Ka m chetara gị na Lotus 1-2-3 weere 1900 dị ka afọ ọwụli, na nke a na-ekwughachi ugboro ugboro na Excel. Ebe ọ bụ na nke a gbakwụnyere otu ụbọchị n'afọ 1900, ọtụtụ ọrụ ngụkọ ụbọchị nwere ike ịdị njọ maka otu ụbọchị ahụ. Ya bụ, 39082 nwere ike ịbụ Jenụwarị 1, 2011 (na Mac) ma ọ bụ Disemba 31, 2006 (na Windows). Ọ bụrụ na "afọ parser" m wepụrụ afọ 2011 site na uru ahaziri ahazi, mgbe ahụ ihe niile dị mma. Mana ebe ọ bụ na onye nyocha Excel amaghị ihe epoch a na-eji, ọ dabara na epoch-1900, na-alaghachi n'afọ 2006. Ngwa m hụrụ na ihe dị iche bụ afọ 5, were ya dị ka njehie, debanyere ya ma weghachi uru na-enweghị usoro.

Iji nweta gburugburu nke a, edere m nke a (pseudocode):

diff = formatted_year - parsed_year
if 0 == diff
    assume 1900 date system
if 4 == diff
    assume 1904 date system
if 5 == diff and month is December and day is 31
    assume 1904 date system

Ma emesịa tụgharịrị ụbọchị 40 niile nke ọma.

N'etiti nnukwu ọrụ ebipụta

В начале 1980-х мой отец работал в Storage Technology, в не существующем ныне подразделении, которое создавало ленточные накопители и пневматические системы для высокоскоростной подачи лент.

Они так переделывали накопители, чтобы те могли иметь один центральный привод «А», соединённый с семью приводами «Б», а маленькая ОС в оперативной памяти, управлявшая приводом «А», могла делегировать операции чтения и записи по всем приводам «Б».

При каждом запуске привода «А» нужно было вставлять дискету в периферийный дисковод, подключённый к «А», чтобы загрузить в его память операционную систему. Она была крайне примитивной: вычислительная мощность обеспечивалась 8-битным микроконтроллером.

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

Otu onye ahịa nwere nsogbu. N'etiti ọrụ mbipụta, otu ụgbọala "A" nwere ike ịkwụsị ịrụ ọrụ, na-eme ka ọrụ ahụ dum kwụsị. Iji weghachi ọrụ draịva ahụ, ndị ọrụ kwesịrị ịmalitegharị ihe niile. Ma ọ bụrụ na nke a mere n'etiti ọrụ awa isii, mgbe ahụ, nnukwu ego nke oge kọmputa dị oké ọnụ ahịa furu efu na oge nke ọrụ ahụ dum na-akụghasị.

Из Storage Technologies отправили техников. Но несмотря на все попытки, они не смогли воспроизвести баг в тестовых условиях: похоже, сбой возникал посреди больших заданий на печать. Проблема была не в оборудовании, они заменили всё, что могли: оперативную память, микроконтроллер, дисковод, все мыслимые части ленточного привода — проблема сохранялась.

Тогда техники позвонили в штаб-квартиру и позвали Эксперта.

Ọkachamara ahụ jidere oche na otu iko kọfị, nọdụ n'ọnụ ụlọ kọmputa - n'oge ahụ, e nwere ọnụ ụlọ ndị a raara nye kọmputa - ma na-ekiri ka ndị ọrụ na-akwụ ụgwọ nnukwu ọrụ obibi. Ọkachamara ahụ nọ na-eche ọdịda ga-eme - ma o mere. Onye ọ bụla lere anya na ọkachamara ahụ, mana ọ maghị ihe kpatara nke a ji mee. N’ihi ya, o nyere iwu ka a kwụghachi ọrụ ahụ n’ahịrị ọzọ, ndị ọrụ na ndị ọrụ nka nile laghachiri n’ọrụ.

Эксперт опять сел в кресло и стал ждать сбоя. Прошло около шести часов, и сбой произошёл. У Эксперта опять не было идей, не считая того, что всё случилось в заполненном людьми помещении. Он приказал перезапустить задание, снова сел и стал ждать.

К третьему сбою Эксперт кое-что заметил. Сбой происходил тогда, когда персонал менял ленты в постороннем приводе. Более того, сбой возникал, как только один из сотрудников проходил через определённую плитку на полу.

Фальшпол был сделан из алюминиевых плиток, уложенных на высоте 6—8 дюймов. Под фальшполом проходили многочисленные провода от компьютеров, чтобы кто-нибудь случайно не наступил на важный кабель. Плитки были уложены очень плотно, чтобы под фальшпол не попадал мусор.

Эксперт понял, что одна из плиток была деформирована. Когда сотрудник наступал на её угол, плитка тёрлась краями о соседние плитки. С ними тёрлись и пластмассовые детали, соединявшие плитки, из-за чего возникали статические микроразряды, создававшие радиочастотные помехи.

Сегодня оперативная память гораздо лучше защищена от радиочастотных помех. Но в те годы это было не так. Эксперт понял, что эти помехи нарушали работу памяти, а с ней и работу операционной системы. Он позвонил в службу сопровождения, заказал новую плитку, сам её установил, и проблема исчезла.

Ọ bụ oke mmiri!

История произошла в серверной комнате, на четвёртом или пятом этаже офиса в Портсмуте (кажется), в районе доков.

Однажды упал Unix-сервер с основной базой данных. Его перезагружали, но он радостно продолжал раз за разом падать. Решили позвать кого-нибудь из службы поддержки.

Чувак из поддержки… кажется, его звали Марк, но это не важно… вряд ли я с ним знаком. Это не важно, правда. Остановимся на «Марке», хорошо? Отлично.

Ya mere, awa ole na ole ka e mesịrị Mark bịarutere (ọ bụghị ebe dị anya site na Leeds ruo Portsmouth, ị maara), gbanye ihe nkesa na ihe niile na-arụ ọrụ n'enweghị nsogbu. Nkwado ọjọọ a na-ahụkarị, onye ahịa na-ewe iwe maka ya. Mark na-elele faịlụ ndekọ ma ọ hụghị ihe ọ bụla na-adịghị mma. Ya mere, Mark na-alaghachi na ụgbọ oloko (ma ọ bụ ụdị ụgbọ njem ọ bụla ọ rutere, ọ nwere ike ịbụ ehi dara ngwọrọ maka ihe niile m maara ... agbanyeghị, ọ dịghị mkpa, ọ dị mma?) wee laghachi na Leeds, na-efunahụ ya. ụbọchị.

Тем же вечером сервер падает снова. История та же… сервер не поднимается. Марк удалённо пытается помочь, но клиент не может запустить сервер.

Опять поезд, автобус, лимонное безе или ещё какая-то херня, и Марк опять в Портсмуте. Глянь-ка, сервер загружается без проблем! Чудо. Марк несколько часов проверяет, что с операционкой или ПО всё в порядке, и отправляется в Лидс.

Примерно в середине дня сервер падает (полегче!). На этот раз кажется разумным привлечь людей из аппаратной поддержки, чтобы они заменили сервер. Но нет, примерно через 10 часов он тоже падает.

Ситуация повторялась несколько дней. Сервер работает, примерно через 10 часов падает и не запускается в течение следующих 2 часов. Они проверили охлаждение, утечки памяти, они проверили всё, но ничего не нашли. Затем сбои прекратились.

Неделя прошла беззаботно… все были счастливы. Счастливы, пока всё не началось опять. Картина та же. 10 часов работы, 2—3 часа простоя…

А потом кто-то (кажется, мне говорили, что этот человек не имел отношения к ИТ) сказал:

"Ọ bụ ebili mmiri!"

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

"Ọ kwụsịrị ịrụ ọrụ na mmiri mmiri."

Казалось бы, это совершенно чуждая концепция для сотрудников ИТ-поддержки, которые вряд ли читают «ежегодник приливов», сидя за кофе. Они объяснили, что это никак не может быть связано с приливом, потому что сервер работал неделю без сбоев.

"N'izu gara aga oke mmiri dị obere, mana n'izu a ọ dị elu."

Obere okwu okwu maka ndị na-enweghị ikike ụgbọ mmiri. Tides na-adabere na okirikiri ọnwa. Na ka ụwa na-agbagharị, kwa awa 12,5, ndọda ndọda nke anyanwụ na ọnwa na-emepụta ebili mmiri. Na mmalite nke okirikiri elekere 12,5 enwere oke mmiri, n'etiti okirikiri ahụ enwere ebb, na njedebe enwere oke mmiri ọzọ. Mana ka mgbawa ọnwa na-agbanwe, otu ahụ ka ọdịiche dị n'etiti oke mmiri na oke mmiri na-agbanwe. Mgbe ọnwa dị n'etiti anyanwụ na ụwa ma ọ bụ n'akụkụ nke ọzọ nke ụwa (ọnwa zuru ezu ma ọ bụ enweghị ọnwa), anyị na-enweta tides Syzygyn - oke tides kachasị elu na oke mmiri dị ala. N'ọkara ọnwa anyị na-enweta tides quadrature - tides kacha ala. Ọdịiche dị n'etiti oke abụọ ahụ na-ebelata nke ukwuu. Oge okirikiri nke ọnwa na-adị ụbọchị 28: syzygian - quadrature - syzygian - quadrature.

Mgbe a kọwara ndị ọrụ nkà na ụzụ ihe bụ́ isi nke ndị agha mmiri, ha chere ozugbo na ha kwesịrị ịkpọ ndị uwe ojii. Na ezi uche. Mana ọ tụgharịrị na nwoke ahụ ziri ezi. Izu abụọ tupu mgbe ahụ, onye na-emebi ihe kpara mkpagharị n'ebe na-adịghị anya site n'ọfịs ahụ. Mgbe ọ bụla ebili mmiri na-ebuli ya elu, oghere radar nke ụgbọ mmiri ahụ kwụsịrị n'ogo nke ụlọ ụlọ ihe nkesa. Na radar (ma ọ bụ ngwá ọrụ electronic, ma ọ bụ ihe egwuregwu ụmụaka ndị ọzọ) kpalitere ọgba aghara na kọmputa.

Ọrụ ụgbọ elu maka rọketi

Enyere m ọrụ ibubata nnukwu (ihe dị ka ahịrị 400 puku ahịrị) njikwa igba egbe roket na sistemụ nleba anya na ụdị sistemụ arụmọrụ ọhụrụ, ndị nchịkọta na asụsụ. Kpọmkwem, site na Solaris 2.5.1 ruo Solaris 7, na site na Verdix Ada Development System (VADS), nke edere na Ada 83, na usoro Rational Apex Ada, nke edere na Ada 95. VADS zụrụ site na Rational, na ngwaahịa ya bụ. adịkwaghị adị, ọ bụ ezie na Rational nwara imejuputa ụdị ngwungwu VADS ga-adaba adaba iji mee ka mgbanwe gaa na mkpokọta Apex.

Mmadụ atọ nyeere m aka ka achịkọta koodu ahụ nke ọma. O were izu abụọ. Ma mgbe ahụ, m na-arụ ọrụ n'onwe m iji mee ka usoro ahụ rụọ ọrụ. Na nkenke, ọ bụ ụkpụrụ kachasị njọ na mmejuputa usoro ngwanrọ nke m zutere, ya mere ọ were ọnwa abụọ ọzọ iji wuchaa ọdụ ụgbọ mmiri ahụ. Edebere usoro ahụ maka ule, nke were ọtụtụ ọnwa ọzọ. M ozugbo mezie ahụhụ ndị a chọtara n'oge ule, ma ọnụ ọgụgụ ha na-ebelata ngwa ngwa (koodu koodu bụ usoro mmepụta ihe, ya mere ọrụ ya na-arụ ọrụ nke ọma, naanị m ga-ewepụ ahụhụ ndị bilitere n'oge mmegharị na nchịkọta ọhụrụ). N'ikpeazụ, mgbe ihe niile na-arụ ọrụ dị ka o kwesịrị, e zigara m n'ọrụ ọzọ.

Na Friday tupu Ekele, ekwentị kụrụ.

Ekwesịrị ịnwale igba egbe rọketi n'ime ihe dị ka izu atọ, na n'oge ule ụlọ nyocha nke ngụkọ, egbochiri usoro iwu. Na ndụ n'ezie, nke a ga-agbapụ ule ahụ, ma ọ bụrụ na nkwụsị ahụ mere n'ime sekọnd ole na ole nke ịmalite engine ahụ, ọtụtụ omume na-apụghị ịgbagha agbagha ga-eme na usoro inyeaka, nke ga-achọ ogologo oge - dị oke ọnụ - njikere nke rọketi. Ọ garaghị ebido, mana ọtụtụ mmadụ gaara ewe iwe nke ukwuu maka mfu oge na nnukwu ego, nnukwu ego. Ekwela ka onye ọ bụla gwa gị na Ngalaba Nchebe na-emefu ego n'echeghị echiche - ahụtụbeghị m onye njikwa nkwekọrịta nke na-etinyeghị mmefu ego mbụ ma ọ bụ nke abụọ, na-esote usoro nhazi.

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

Na nlebara anya na m dị ka onye ported usoro.

Как и в большинстве систем, для которых критически важна безопасность, здесь журналировалось множество параметров, так что удалось довольно легко определить несколько строк кода, исполненных перед зависанием системы. И конечно же, в них не было абсолютно ничего необычного, те же самые выражения успешно исполнялись буквально тысячи раз в ходе того же прогона.

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

Поскольку в журналах не было ничего интересного, решили попытаться воспроизвести проблему в местной лаборатории. Это была непростая задача, поскольку событие возникало примерно один раз на 1000 прогонов. Одной из предполагаемых причин было то, что вызов разработанной поставщиком мьютекс-функции (часть пакета миграции VADS) Unlock edugaghị na mkpọghe. Eriri nhazi nke na-akpọ ọrụ ahụ na-ahazi ozi obi, bụ nke na-abịarute n'ụdị nkeji ọ bụla. Anyị welitere ugboro ruo 10 Hz, ya bụ, ugboro 10 kwa sekọnd, wee malite ịgba ọsọ. Ihe dị ka otu awa ka e mesịrị, usoro ahụ kpọchiri onwe ya. N'ime ndekọ ahụ, anyị hụrụ na usoro nke ozi edere bụ otu ihe n'oge ule dara ada. Anyị mere ọtụtụ ọsọ ọzọ, a na-egbochi usoro ahụ mgbe niile 45-90 nkeji mgbe mmalite, na oge ọ bụla log ahụ nwere otu ụzọ ahụ. N'agbanyeghị na anyị na-eji teknụzụ na-agba ọsọ koodu dị iche iche - ugboro ozi dị iche - omume nke sistemụ ahụ bụ otu, yabụ anyị nwere obi ike na ọnọdụ ibu a na-akpata otu nsogbu ahụ.

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

Nke a mmejuputa iwu nke usoro na-eji Ada ọrụ usoro, na-eji ya na-enweghị atụ na-adịghị mma. Ihe aga-eme bụ ihe arụrụ n'otu oge dị elu na Ada, ihe dị ka eri nke ogbugbu, naanị arụnyere n'ime asụsụ n'onwe ya. Mgbe ọrụ abụọ chọrọ ịkparịta ụka, ha "na-edozi nrụgharị", gbanwee data dị mkpa, wee kwụsị ọrụ ahụ wee laghachi na ogbugbu onwe ha. Agbanyeghị, etinyere usoro ahụ n'ụzọ dị iche. Mgbe ọrụ e lekwasịrị anya na-emegharị, a na-emegharị ọrụ ahụ e lekwasịrị anya na ọrụ ọzọ, nke a na-emegharị ya na ọrụ nke atọ, na ihe ndị ọzọ ruo mgbe nhazi ụfọdụ gasịrị. Mgbe nke a gasịrị, a rụchara ọrụ ndị a niile na ọrụ ọ bụla ga-alaghachi na mmezu ya. Ya bụ, anyị na-emeso usoro oku ọrụ kachasị ọnụ n'ụwa, nke kwụsịrị usoro "multitasking" niile ka ọ na-edozi akụkụ nke data ntinye. Na tupu nke a edugaghị na nsogbu naanị n'ihi na throughput bụ nnọọ ala.

Akọwara m usoro ọrụ a n'ihi na mgbe a rịọrọ ma ọ bụ na-atụ anya imecha, "mgbanwe ọrụ" nwere ike ime. Ya bụ, processor nwere ike ịmalite nhazi ọrụ ọzọ nke dị njikere igbu ya. Ọ na-apụta na mgbe otu ọrụ dị njikere ịmaliteghachi ọrụ ọzọ, ọrụ dị iche iche nwere ike ịmalite ime ya, na-emecha nchịkwa na-alaghachi na nke mbụ. Na ihe omume ndị ọzọ nwere ike ime nke na-eme ka ọrụ ahụ gbanwee; Otu ihe omume dị otú ahụ bụ oku na-arụ ọrụ sistemu, dị ka ibipụta ma ọ bụ ime mutex.

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

Также при изучении журнала выяснилось, что, несмотря на зависание обработки heartbeat-сообщений, которое блокировало все операции ввода-вывода процесса и не давало выполнять другие обработки, прочие независимые задачи продолжали исполняться. То есть работа блокировалась не целиком, только (критическая) цепочка задач.

Nke a bụ ihe ngosi achọrọ iji nyochaa okwu mgbochi ahụ.

Я сделал Ada-пакет, который содержал задачу, перечисляемый тип и глобальную переменную этого типа. Перечисляемые литералы были привязаны к конкретным выражениям проблемной последовательности (например, Incrementing_Buffer_Index, Locking_Mutex, Mutex_Unlocked), wee tinye okwu ọrụ n'ime ya nke kenyere ngụkọ kwekọrọ na mgbanwe zuru ụwa ọnụ. Ebe ọ bụ na koodu ihe nke ihe a niile na-echekwa ebe nchekwa mgbe niile, ngbanwe ọrụ n'ihi ogbugbu ya enweghị atụ. Anyị na-enyo enyo nke okwu ndị nwere ike ịgbanwe ọrụ ahụ, ebe ọ bụ na nkwụsị ahụ mere na njedebe kama ịlaghachi mgbe ị na-atụgharị ọrụ ahụ azụ (n'ihi ọtụtụ ihe).

Ọrụ nsochi ahụ na-agba ọsọ na akaghị wee na-enyocha ya kwa oge iji hụ ma uru nke mgbanwe ụwa agbanweela. Na mgbanwe ọ bụla, echekwara uru ya na faịlụ. Mgbe ahụ obere nchere na nlele ọhụrụ. Edere m mgbanwe ahụ na faịlụ ahụ n'ihi na arụrụ ọrụ ahụ naanị mgbe usoro ahụ họọrọ ya maka igbu ya mgbe ị na-agbanye ọrụ na mpaghara nsogbu. Ihe ọ bụla mere na ọrụ a agaghị emetụta ọrụ ndị ọzọ egbochiri ejikọtaghị ya.

A na-atụ anya na mgbe usoro ahụ rutere n'ókè nke ịmepụta koodu nsogbu ahụ, a ga-emegharị mgbanwe ụwa mgbe ọ na-aga na okwu ọ bụla ọzọ. Mgbe ahụ, ihe ga-eme nke na-eme ka ọrụ ahụ gbanwee, na ebe ọ bụ na oge igbu ya (10 Hz) dị ala karịa nke ọrụ nlekota oru, onye nlekota nwere ike ijide uru nke mgbanwe ụwa wee dee ya. N'ọnọdụ nkịtị, enwere m ike ịnweta usoro ugboro ugboro nke ntinye aha: ụkpụrụ ikpeazụ nke mgbanwe n'oge mgbanwe ọrụ. Mgbe a na-ekowe, mgbanwe zuru ụwa ọnụ ekwesịghịzi ịgbanwe, na uru ikpeazụ edere ga-egosi nke okwu na-emezughị.

Запустил код с отслеживанием. Он завис. А мониторинг сработал как по маслу.

В журнале оказалась ожидаемая последовательность, которая прерывалась значением, указывающим, что был вызван мьютекс Unlock, na ọrụ agwụbeghị - dị ka ọ dị na puku kwuru puku oku gara aga.

Инженеры из Apex в это время лихорадочно анализировали свой код и нашли в мьютексе место, где, теоретически, могла возникать блокировка. Но её вероятность была очень мала, поскольку к блокировке могла привести лишь определённая последовательность событий, происходящих в определённое время. Закон Мёрфи, парни, это закон Мёрфи.

Чтобы защитить нужный фрагмент кода, я заменил вызовы мьютекс-функций (построенных на основе мьютекс-функциональности ОС) маленьким нативным мьютекс-пакетом Ada, чтобы с его помощью управлять доступом мьютексов к этому фрагменту.

Вставил в код и запустил тест. Семь часов спустя код продолжал работать.

Мой код передали в Rational, там его скомпилировали, дизассемблировали и проверили, что в нём не используется тот же подход, который применялся в проблемных мьютекс-функциях.

Это была самая многолюдная проверка кода в моей карьере 🙂 В комнате со мной было около десяти инженеров и менеджеров, ещё десяток людей подключились по конференц-звонку — и все они исследовали около 20 строк кода.

Код прошёл проверку, собрали новые исполняемые файлы и передали на формальное регрессионное тестирование. Пару недель спустя испытания обратного отсчёта прошли успешно, и ракета взлетела.

Ọ dị mma, nke ahụ dị mma ma dịkwa mma, mana gịnị bụ isi okwu a?

Это была совершенно отвратительная проблема. Сотни тысяч строк кода, параллельное исполнение, свыше десятка взаимодействующих процессов, плохая архитектура и плохая реализация, интерфейсы для встроенных системы и миллионы потраченных долларов. Никакого давления, верно.

Ọ bụghị naanị m na-arụ ọrụ na nsogbu a, n'agbanyeghị na m nọ na-ahụ anya ka m na-eme njem ụgbọ mmiri. Ma n'agbanyeghị na m mere ya, nke ahụ apụtaghị na m ghọtara niile ọtụtụ narị puku ahịrị nke koodu, ma ọ bụ ọbụna skimmed ha. Ndị injinia nọ na mba ahụ nyochara koodu ahụ na akwụkwọ ndekọ aha, mana mgbe ha gwara m echiche ha gbasara ihe kpatara ọdịda ahụ, ọ were m naanị ọkara nkeji iji gbaghaa ha. Na mgbe a gwara m ka m nyochaa echiche, m ga-enyefe ya onye ọzọ, n'ihi na o doro m anya na ndị injinia a na-aga n'ụzọ na-ezighị ezi. Ọ dị mpako? Ee, nke a bụ eziokwu, mana ajụrụ m echiche na arịrịọ maka ihe ọzọ.

Я понимал природу проблемы. Я не знал точно, где она возникает и почему, но я знал, что именно происходит.

N'ime afọ ndị gafeworonụ, achịkọtala m ọtụtụ ihe ọmụma na ahụmahụ. Abụ m otu n’ime ndị ọsụ ụzọ iji Ada wee ghọta uru na ọghọm ya. Amaara m ka ụlọ akwụkwọ ọhụhụ nke Ada si ejikwa ọrụ ma na-emekọ ihe n'otu oge. Ma aghọtara m mmemme dị ala na ọkwa nke ebe nchekwa, ndekọ na mgbakọ. N'ikwu ya n'ụzọ ọzọ, enwere m ihe ọmụma miri emi n'ọhịa m. Ejikwara m ha chọpụta ihe kpatara nsogbu ahụ. Ọ bụghị naanị na m na-arụ ọrụ gburugburu ahụhụ ahụ, aghọtara m ka m ga-esi chọta ya na gburugburu oge ịgba ọsọ na-enwe mmetụta siri ike.

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

Для решения действительно трудных проблем вам нужно быть не просто программистом. Вам нужно понимать «судьбу» кода, как он взаимодействует со своим окружением и как работает само окружение.

Ma mgbe ahụ, ị ​​ga-enwe izu ezumike nke gị mebiri emebi.

Ka ga-aga n'ihu.

isi: www.habr.com

Tinye a comment