コラム
» 2008年07月01日 00時00分 UPDATE

Tales from the Cube:ハードが包み隠したソフトのバグ

[Pierre Renaud,EDN]

 これは、筆者ともう1人の同僚がある緊急課題に直面したときの話である。問題となっていたのは、電話交換機の冗長システムに致命的な動作不良が出たというものだった。切り替えが正常に行えないというのだ。会社の幹部たちからは、その交換機に関連する各部門に対し、問題を調査するようにとの指示が飛んだ。

 少し調査した結果、その問題は、メモリーボードに最新のDRAMを搭載した装置でのみ起きているということがわかった。そのため、この問題にかかわった者全員が、原因は新たなDRAMチップのロット不良にあると考えた。というのも、古いメモリーボードを使用した装置はすでに何年間も運用されていたが、この種の問題が起きたことはなかったからだ。筆者の上司は、ハードウエア担当である筆者とソフトウエア担当である同僚にペアを組ませ、装置の不具合を診断するよう命じた。

edn0807tales.gif

 筆者らは、まず旧メモリーボードを使用していた装置をマスター側と予備側の両方に用い、その状態であれば切り替え動作が正しく行われることを確認することにした。数回の試行の結果、コマンドコンソールから出された指令に対し、正確に切り替えが行われることが確認できた。続いて、予備側の装置のメモリーボードを問題となっていた最新のDRAMを搭載したものに替えて同様の操作を行った。その結果、切り替えが失敗するようになった。マスター側が予備側への切り替えを拒否したのである。

 原因として考えられるのは何なのか。同僚の考えは、マスター側が予備側のデータテーブルに不具合を見つけ、何らかの問題が発生していると判定して切り替えを拒否した可能性が高いというものだった。そこで、DRAMからダンプしたデータをチェックしてみることにした。その結果、確かにデータが破損しているように見えたが、1つ明確になったのは、ポインタに問題が生じているということだった。正常なメモリーカードではアドレスFFFF0000が読み出されるケースで、不具合のあるメモリーカードでは、ポインタがFF00FF00を読み出していたのだ。この症状は、DRAMが起動したときに初期化が正しく行われていないために起きているもののように思われた。この時点で、ソフトウエア担当の同僚は、「ソフトウエアは最初に製品化されたときから常に正常に動作してきた。問題があるのはハードウエアだ」と断定した。

 ここで、筆者は、不具合が起きているメモリーカードのポインタをマニュアル操作で設定し、その後に再起動して動作確認することを提案した。その結果、この場合も、初期化が失敗しているのと同様の症状を示すことがわかった。この時点でも、同僚はハードウエアの不良だと主張していたが、筆者は「確かに、君は間違っていないはずだ」と同僚をなだめつつ、「問題の起きていないボードで同じことをやってみよう」と提案した。彼の反応は「なぜだ?」というものであり、「正しい値が得られるのはわかりきったことなのに」と続けた。しかし、このとき筆者には1つの予感があったので、「とにかく試してみよう」と彼に促した。実際に試してみた結果は、彼にとっては驚くべきものだった。古いボードで再起動を行っても、ポインタは正常に初期化されなかったのだ。この結果を受け、彼はブート用のコードを見直すこととした。そして、古いバージョンのDRAMではたまたま数年間も顕在化しなかったバグを見つけたのであった。

 この結果を上司に報告したが、彼はわれわれ2人の話を信用しなかった。その挙句にわれわれをこの問題の調査担当から外した。当然、何の評価も得られず、その後は、まるで問題など起きていなかったかのような状態になった。会社の上層部が、問題の質を考慮して、この一件のもみ消しを図ったようだった。しかし、われわれ2人にとって、原因を見つけたときの感激は忘れることのできないものとなった。

Copyright© 2017 ITmedia, Inc. All Rights Reserved.

RSSフィード

EDN 海外ネットワーク

All material on this site Copyright © 2005 - 2017 ITmedia Inc. All rights reserved.
This site contains articles under license from UBM Electronics, a division of United Business Media LLC.