გადასვლა შიგთავსზე
LinuxAIAnthropic4 წთ

ტორვალდსმა Linux-ის ბირთვის ოპტიმიზაციისთვის Claude Code გამოიყენა. კოდმა წაკითხვა 23-ჯერ დააჩქარა, მაგრამ შემოწმება ვერ გაიარა

ლინუს ტორვალდსმა Linux-ის ბირთვზე მუშაობაში Claude Code ჩართო და შთამბეჭდავი შედეგი მიიღო: სინთეტიკურ ტესტში ქეშიდან წაკითხვის სიჩქარე თითქმის 23-ჯერ გაიზარდა. თუმცა, ცვლილებების შემოწმებისას დეველოპერებმა რბოლის მდგომარეობა (race condition) და მეხსიერების მართვასთან დაკავშირებული პრობლემები…

გაზიარება

ლინუს ტორვალდსმა Linux-ის ბირთვზე მუშაობაში Claude Code ჩართო და შთამბეჭდავი შედეგი მიიღო: სინთეტიკურ ტესტში ქეშიდან წაკითხვის სიჩქარე თითქმის 23-ჯერ გაიზარდა. თუმცა, ცვლილებების შემოწმებისას დეველოპერებმა რბოლის მდგომარეობა (race condition) და მეხსიერების მართვასთან დაკავშირებული პრობლემები აღმოაჩინეს. ამჟამად გადაწყვეტა იხვეწება, ეს ამბავი კი იმის თვალსაჩინო მაგალითი გახდა, თუ როგორ ართმევს თავს ხელოვნური ინტელექტი სისტემური პროგრამირების ამოცანებს.

პრობლემა, რომლის გადაჭრასაც ორ წელს ცდილობდნენ

ყველაფერი Linux-ის გვერდების ქეშის (page cache) მუშაობაში არსებული ვიწრო ადგილით დაიწყო. როდესაც რამდენიმე ნაკადი ერთსა და იმავე ფაილს ერთდროულად კითხულობს, ბირთვი მეხსიერების ბლოკზე ბმულების მრიცხველს — folio-ს იყენებს. ყოველი წაკითხვისას ამ მრიცხველის გაზრდა, შემდეგ კი შემცირებაა საჭირო.

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

ტორვალდსის Intel Core i7-8565U-იან ნოუთბუქზე რვა ნაკადით ტესტირებისას ბმულების მრიცხველის ოპერაციებზე მოდიფიცირებული ქეშის ხაზების ბირთვებს შორის გადაცემის (HITM) შემთხვევების 99,92% მოდიოდა.

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

როგორ ჩართეს ამოცანაში Claude Code

ოქტომბერში ტორვალდსმა გამოაქვეყნა ექსპერიმენტული განშტოება noref-filemap-read-with-llm რვა პატჩით Linux 7.3-rc6 ბირთვისთვის.

აღწერაში მან პირდაპირ მიუთითა, რომ Claude Code-მა მისი ხელმძღვანელობით მოამზადა კოდი, სატესტო პროგრამები, პრობლემების წინასწარი ანალიზი და დოკუმენტაციის შავი ვარიანტი. ამასთან, წარმადობის ყველა გაზომვა ტორვალდსმა დამოუკიდებლად ჩაატარა.

მოგვიანებით rcu-free-v3 განშტოებაში გამოჩნდა ათი პატჩისგან შემდგარი გადამუშავებული სერია.

გადაწყვეტის არსი იმაში მდგომარეობს, რომ ფაილების წაკითხვის ხშირად გამოყენებადი გზიდან ბმულების მრიცხველის ოპერაციები ამოიღონ. ამისთვის გამოიყენეს RCU (Read-Copy-Update) სინქრონიზაციის მექანიზმი, რომელიც მონაცემების ბლოკირებების გარეშე წაკითხვის საშუალებას იძლევა და მეხსიერების გათავისუფლებას უკვე დაწყებული ოპერაციების დასრულებამდე გადადებს.

ახალი ალამი PG_rcu_free საშუალებას იძლევა გადაიდოს folio-ს გათავისუფლება მანამ, სანამ მისი გამოყენება მკითხველ ნაკადებს შეუძლიათ. ამის წყალობით, ბირთვს აღარ უწევს საერთო ბმულების მრიცხველის ყოველ ჯერზე შეცვლა.

23-ჯერ აჩქარება. მაგრამ არის ნიუანსი

პირველი შედეგები იმედისმომცემი ჩანდა. ტორვალდსის ნოუთბუქზე მცირე მონაცემთა ბლოკების რვა ნაკადით წაკითხვისას წარმადობა წამში დაახლოებით 10-დან 33 მილიონ ოპერაციამდე გაიზარდა.

64-ნაკადიან AMD Ryzen Threadripper-ზე გადამუშავებულმა ვერსიამ კიდევ უფრო შესამჩნევი ზრდა აჩვენა:

  • ცვლილებებამდე — 13,3 მლნ წაკითხვა წამში.
  • ცვლილებების შემდეგ — 304 მლნ წაკითხვა წამში.
  • პროცესორის ტაქტების რაოდენობა ერთ ოპერაციაზე დაახლოებით 20 000-დან 735-მდე შემცირდა.

ანუ თითქმის 23-ჯერადი აჩქარება.

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

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

შემოწმებისას რბოლის მდგომარეობა აღმოაჩინეს

პატჩების გამოქვეყნების შემდეგ განხილვაში ბირთვის სხვა დეველოპერებიც ჩაერთნენ.

მეთიუ უილკოკსმა ეჭვქვეშ დააყენა მეხსიერების მართვის ცალკეული გადაწყვეტილებები, მათ შორის ახალი ალმის, PG_rcu_free-ს გამოყენება.

ხოლო დეველოპერმა კირილ შუტემოვმა (Kiryl Shutsemau) filemap_read_rcu_batch() ფუნქციაში რბოლის მდგომარეობა აღმოაჩინა.

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

ტორვალდსმა ფაილის ზომის შემოწმების რიგითობის შეცვლა და folio-ს შემოწმებების ნაწილის გაერთიანება შესთავაზა. შუტემოვმა შესაბამისი ცვლილებები შეიტანა.

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

რა ბედი ეწევა პატჩებს

ტორვალდსმა კირილ შუტემოვს ცვლილებათა ამ სერიაზე შემდგომი მუშაობის საკუთარ თავზე აღება შესთავაზა.

19 ოქტომბერს შუტემოვმა 18 პატჩისგან შემდგარი გადამუშავებული ვარიანტი გამოაქვეყნა. მასში შენიშვნების ნაწილია გათვალისწინებული, დახვეწილია მეხსიერების მართვა და გაფართოებულია ბმულების მრიცხველის გარეშე წაკითხვის მხარდაჭერა.

ახალმა ტესტებმა ext4-ზე, XFS-სა და tmpfs-ზე ასევე აჩვენა წარმადობის შესამჩნევი ზრდა მცირე მონაცემთა ბლოკების პარალელური წაკითხვისას.

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

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

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

წყაროები: The New Stack, პატჩების განხილვა Linux-ის ბირთვის საფოსტო გზავნილების სიაში, Phoronix — გადამუშავებული ვერსიის შესახებ.

  • * *

ტორვალდსის პატჩების ისტორია აჩვენებს, რომ Claude Code-ს უკვე შეუძლია რთული საინჟინრო ამოცანების გადაჭრა, თუმცა შედეგების შემოწმების გარეშე ფონს გასვლა კვლავ შეუძლებელია. თუ გსურთ ეს ინსტრუმენტი საკუთარ სამუშაოში გამოსცადოთ, შემოუერთდით Otus-ის უფასო ვებინარს, სადაც გაარჩევთ, თუ როგორ უნდა მოახდინოთ AI აგენტის გაშვების ავტომატიზაცია და დაავალოთ მას ამოცანები განრიგის მიხედვით.

  • 11 ნოემბერი, 20:00. „AI აგენტი განრიგით: როგორ ვამუშაოთ Claude Code, სანამ სხვა საქმით ხართ დაკავებული“. დარეგისტრირდით