Oxide-ის გუნდი საკუთარი სერვერული თაროების დაპროექტებისას ისეთ სისტემას ქმნის, სადაც ფიზიკური ჩარევა მინიმუმამდეა დაყვანილი. თუმცა, ახალი თაობის Cosmo სერვერების ტესტირებისას, ინჟინრებმა უცნაური პრობლემა შენიშნეს: სერვის-პროცესორი (SP) სისტემატურად ითიშებოდა ქსელიდან.

გამოცანის ამოხსნა

სერვის-პროცესორის გათიშვა რთული დიაგნოსტიკური პროცესია, რადგან ქსელური კავშირის გარეშე ინჟინრებს სისტემის შიდა მდგომარეობაზე წვდომა ეზღუდებათ. ძირითადი სიმპტომები მკაფიო იყო:

  • AMD-ის მთავარი პროცესორი მუშაობდა, რაც ნიშნავდა, რომ კვება სისტემას ჰქონდა.
  • სერვის-პროცესორი ქსელში აქტივობას არ აფიქსირებდა.
  • გამაგრილებელი ვენტილატორები მაქსიმალური დატვირთვით მუშაობდნენ, რაც ავარიული რეჟიმის ნიშანია.

გუნდმა თავდაპირველად ეჭვი პროგრამულ ხარვეზზე, კერძოდ, ამოცანების პრიორიტეტულობის კონფლიქტზე მიიტანა. Hubris-ის ოპერაციულ სისტემაში, რომელიც Oxide-ის მიერ არის შექმნილი, შესაძლოა რომელიმე პროცესს მთელი რესურსი წაეღო, თუმცა დიაგნოსტიკამ ეს ვერსია არ დაადასტურა.

ტექნიკური ჩიხი და FPGA

ინჟინრებმა გამოიყენეს SWD დებიუგერები, რათა პროცესორის მუშაობაში ღრმად შეეხედათ. აღმოჩნდა, რომ პრობლემა დაკავშირებული იყო FPGA-სთან, რომელიც სისტემის ფლეშ-მეხსიერებას მართავს. STM32H7 პროცესორის მიერ FPGA-სთან კომუნიკაციისას, ავტობუსის (bus) პასუხის მოლოდინში სისტემა „იყინებოდა“.

გადამწყვეტი აღმოჩნდა გაზომილი ჩატვირთვის (measured boot) ტესტირება. როდესაც სისტემა ჩატვირთვისას რამდენჯერმე გადაიტვირთებოდა, პრობლემა 10-20 წუთში ვლინდებოდა, რაც დიაგნოსტიკას აჩქარებდა.

დასკვნა

საბოლოოდ, პრობლემის ფესვი პროცესორის არაპროგნოზირებად მეხსიერების წვდომაში აღმოჩნდა. თანამედროვე პროცესორები ქეშ-მეხსიერებიდან მონაცემებს ავტომატურად იღებენ, რაც ზოგჯერ ისეთ მისამართებზე წვდომას იწვევს, რასაც პროგრამისტი ვერ აკონტროლებს. ეს ქმედებები კი, FPGA-სთან კომუნიკაციისას, სისტემის გათიშვას იწვევდა.