เจาะลึกเว็บเบราว์เซอร์สมัยใหม่ (ตอนที่ 1)

มาริโกะ โคซากะ

สถาปัตยกรรม CPU, GPU, หน่วยความจำ และการประมวลผลแบบหลายด้าน

ในบล็อกที่แบ่งออกเป็น 4 ตอนนี้ เราจะมาดูภายในเบราว์เซอร์ Chrome ตั้งแต่สถาปัตยกรรมระดับสูงไปจนถึงข้อมูลจำเพาะของไปป์ไลน์การแสดงผล หากคุณเคยสงสัยว่าเบราว์เซอร์เปลี่ยนโค้ดของคุณให้เป็นเว็บไซต์ที่ใช้งานได้ดีอย่างไร หรือไม่แน่ใจว่าเหตุใดจึงแนะนำเทคนิคที่เฉพาะเจาะจงเพื่อปรับปรุงประสิทธิภาพ ชุดวิดีโอนี้คือคำตอบสำหรับคุณ

ในตอนที่ 1 ของซีรีส์นี้ เราจะมาดูคำศัพท์การประมวลผลหลักๆ และสถาปัตยกรรมแบบมัลติโปรเซสของ Chrome

หัวใจสำคัญของคอมพิวเตอร์คือ CPU และ GPU

เพื่อทำความเข้าใจสภาพแวดล้อมที่เบราว์เซอร์ทำงานอยู่ เราต้องเข้าใจบางส่วนของคอมพิวเตอร์ และหน้าที่ของส่วนเหล่านั้น

CPU

CPU
รูปที่ 1: CPU 4 Core ในฐานะพนักงานออฟฟิศที่กำลังจัดการงานแต่ละงานเมื่อมาถึง

ประเภทแรกคือ Central P สัดส่วน U nit หรือ CPU CPU ถือเป็น สมองของคอมพิวเตอร์ แกน CPU อย่างที่เห็นภาพในที่นี้ว่าเป็นพนักงานออฟฟิศ สามารถทำงานต่างๆ ได้หลายอย่างพร้อมกัน เครื่องมือนี้ดูแลได้ทุกอย่างตั้งแต่คณิตศาสตร์ไปจนถึงศิลปะ ทั้งยังรู้วิธีตอบกลับโทรศัพท์จากลูกค้าด้วย ที่ผ่านมา CPU ส่วนใหญ่เป็นชิปเดียว แกนประมวลผลก็เหมือนกับ CPU อีกตัวที่อยู่ในชิปเดียวกัน ในฮาร์ดแวร์สมัยใหม่ คุณมักจะได้รับแกนประมวลผลมากกว่า 1 แกน ซึ่งช่วยเพิ่มพลังในการประมวลผลให้กับโทรศัพท์และแล็ปท็อปของคุณ

GPU

GPU
รูปที่ 2: แกน GPU จำนวนมากที่มีเครื่องมือแนะนำให้จัดการงานที่จำกัด

อักขระที่ใช้ Unit - หรือ GPU คืออีกส่วนหนึ่งของคอมพิวเตอร์ GPU ต่างจาก CPU ตรงที่สามารถจัดการงานง่ายๆ แต่ใช้หลายแกนในเวลาเดียวกัน ตามชื่อเลย ตอนแรก พัฒนาขึ้นมาเพื่อรองรับกราฟิก "การใช้ GPU" หรือ "สนับสนุน GPU" เกี่ยวข้องกับการแสดงผลที่รวดเร็วและการโต้ตอบที่ราบรื่นในบริบทของกราฟิก ในช่วงไม่กี่ปีที่ผ่านมา การประมวลผลที่เร่งประสิทธิภาพด้วย GPU ทำให้การประมวลผลเพิ่มมากขึ้นบน GPU เพียงอย่างเดียว สามารถทำได้

เมื่อคุณเริ่มแอปพลิเคชันในคอมพิวเตอร์หรือโทรศัพท์ CPU และ GPU เป็นตัวขับเคลื่อนแอปพลิเคชัน โดยปกติ แอปพลิเคชันจะทำงานบน CPU และ GPU โดยใช้กลไกที่ระบบปฏิบัติการมีให้

ฮาร์ดแวร์ ระบบปฏิบัติการ แอปพลิเคชัน
ภาพที่ 3: สถาปัตยกรรมคอมพิวเตอร์ 3 ชั้น ฮาร์ดแวร์ของเครื่องที่ด้านล่าง ระบบปฏิบัติการตรงกลาง และแอปพลิเคชันอยู่ด้านบน

ดำเนินการโปรแกรมบนกระบวนการและเทรด

กระบวนการและชุดข้อความ
ภาพที่ 4: กระบวนการที่เป็นกรอบล้อมรอบ เส้นด้ายเป็นรูปปลาที่แหวกว่ายอยู่ภายในกระบวนการ

อีกแนวคิดหนึ่งที่ควรทำความเข้าใจก่อนเข้าสู่สถาปัตยกรรมของเบราว์เซอร์คือ Process และ Thread กระบวนการอาจเรียกว่าเป็นโปรแกรมดำเนินการของแอปพลิเคชัน เทรดคือชุดข้อความที่อยู่ในกระบวนการ และดำเนินการทุกส่วนในโปรแกรมของกระบวนการ

เมื่อแอปพลิเคชันเริ่มทำงาน ระบบจะสร้างกระบวนการขึ้น โปรแกรมอาจสร้างชุดข้อความเพื่อช่วยในการ ทำงาน แต่ไม่บังคับ ระบบปฏิบัติการจะมี "แผ่น" หน่วยความจำให้ใช้งาน และสถานะของแอปพลิเคชันทั้งหมดจะถูกเก็บไว้ในพื้นที่หน่วยความจำส่วนตัวนั้น เมื่อคุณปิดแอปพลิเคชัน กระบวนการจะหายไปและระบบปฏิบัติการจะเพิ่มหน่วยความจำ

กระบวนการและหน่วยความจำ
ภาพที่ 5: แผนภาพกระบวนการที่ใช้พื้นที่หน่วยความจำและการจัดเก็บข้อมูลแอปพลิเคชัน

กระบวนการหนึ่งสามารถขอให้ระบบปฏิบัติการเริ่มต้นกระบวนการอื่นเพื่อทำงานต่างๆ ได้ เมื่อเกิดปัญหานี้ขึ้น จะมีการจัดสรรหน่วยความจำส่วนต่างๆ สำหรับกระบวนการใหม่ หากมี 2 กระบวนการที่ต้องพูดคุยด้วย ก็สามารถทำได้โดยใช้การเข้าถึงระบบการสื่อสาร (IPC) แอปพลิเคชันจำนวนมากออกแบบมาให้ทำงานในลักษณะนี้ ดังนั้นหากกระบวนการของผู้ปฏิบัติงานไม่ตอบสนอง สามารถรีสตาร์ทเครื่องได้โดยไม่ต้องหยุดกระบวนการอื่นที่กำลังใช้งานส่วนต่างๆ ของแอปพลิเคชัน

กระบวนการของผู้ปฏิบัติงานและ IPC
ภาพที่ 6: แผนภาพของกระบวนการที่แยกจากกันซึ่งสื่อสารผ่าน IPC

สถาปัตยกรรมของเบราว์เซอร์

แล้วเว็บเบราว์เซอร์สร้างขึ้นโดยใช้กระบวนการและชุดข้อความได้อย่างไร ก็อาจเป็นกระบวนการหนึ่งที่มีเทรดที่หลากหลาย หรือหลายกระบวนการที่มีเทรดไม่กี่รายการสื่อสารกันผ่าน IPC

สถาปัตยกรรมเบราว์เซอร์
ภาพที่ 7: สถาปัตยกรรมของเบราว์เซอร์ต่างๆ ในกระบวนการ / แผนภาพเทรด

สิ่งสำคัญที่ควรทราบก็คือสถาปัตยกรรมที่แตกต่างกันเหล่านี้คือรายละเอียดการติดตั้งใช้งาน และไม่มีข้อกำหนดมาตรฐานในการสร้างเว็บเบราว์เซอร์ เบราว์เซอร์หนึ่งอาจต่างจากเบราว์เซอร์อื่นๆ อย่างสิ้นเชิง

สำหรับชุดข้อมูลบล็อกนี้ เราใช้สถาปัตยกรรมล่าสุดของ Chrome ดังที่อธิบายไว้ในรูปที่ 8

ด้านบนจะแสดงกระบวนการของเบราว์เซอร์ที่ทำงานร่วมกับกระบวนการอื่นๆ ที่ช่วยดูแลส่วนต่างๆ ของแอปพลิเคชัน สำหรับกระบวนการของโหมดแสดงภาพ จะมีการสร้างกระบวนการต่างๆ ขึ้นและกำหนดให้กับแต่ละแท็บ ก่อนหน้านี้ Chrome จะให้กระบวนการทำงานระหว่างแท็บแต่ละแท็บไปได้สักพัก แต่ตอนนี้ได้พยายามทำให้แต่ละแท็บมีกระบวนการของตนเอง ซึ่งรวมถึง iframe (ดูการแยกเว็บไซต์)

สถาปัตยกรรมเบราว์เซอร์
ภาพที่ 8: แผนภาพสถาปัตยกรรมการประมวลผลแบบหลายด้านของ Chrome ระบบจะแสดงเลเยอร์ต่างๆ ใต้กระบวนการแสดงผลเพื่อแสดงถึง Chrome ที่เรียกใช้กระบวนการของโหมดแสดงภาพหลายขั้นตอนสำหรับแต่ละแท็บ

กระบวนการในข้อใดจะควบคุมอะไร

ตารางต่อไปนี้อธิบายแต่ละกระบวนการของ Chrome และสิ่งที่ควบคุม

กระบวนการและสิ่งที่ควบคุม
เบราว์เซอร์ ควบคุมส่วน "chrome" ของแอปพลิเคชัน รวมถึงแถบที่อยู่ บุ๊กมาร์ก ปุ่มย้อนกลับ และปุ่มไปข้างหน้า
รวมถึงจัดการส่วนที่มองไม่เห็นของเว็บเบราว์เซอร์ เช่น คำขอเครือข่ายและการเข้าถึงไฟล์
โหมดแสดงภาพ ควบคุมทุกอย่างภายในแท็บที่มีเว็บไซต์แสดงอยู่
ปลั๊กอิน ควบคุมปลั๊กอินที่เว็บไซต์ใช้ เช่น Flash
GPU จัดการงาน GPU โดยแยกจากกระบวนการอื่น ระบบแยกออกเป็นกระบวนการที่แตกต่างกันเนื่องจาก GPU จัดการคำขอจากหลายแอปและแสดงในแพลตฟอร์มเดียวกัน
กระบวนการของ Chrome
ภาพที่ 9: กระบวนการต่างๆ ที่ชี้ไปยังส่วนต่างๆ ของ UI ของเบราว์เซอร์

นอกจากนี้ยังมีกระบวนการอื่นๆ เช่น กระบวนการขยายเวลาและกระบวนการยูทิลิตีอีก หากต้องการดูจำนวนกระบวนการที่ทำงานอยู่ใน Chrome ให้คลิกไอคอนเมนูตัวเลือก ที่มุมขวาบน เลือกเครื่องมือเพิ่มเติม แล้วเลือก "ตัวจัดการงาน" หน้าต่างที่มีรายการกระบวนการที่กำลังทำงาน และจำนวน CPU/หน่วยความจำที่ใช้

ประโยชน์ของสถาปัตยกรรมแบบหลายกระบวนการใน Chrome

ก่อนหน้านี้ฉันบอกไว้ว่า Chrome ใช้โปรเซสของโหมดแสดงภาพหลายขั้นตอน โดยทั่วไปแล้ว คุณจะจินตนาการว่าแต่ละแท็บมีกระบวนการแสดงผลของตัวเอง สมมติว่าคุณมีแท็บที่เปิดอยู่ 3 แท็บและแต่ละแท็บเรียกใช้โดยโปรเซสของโหมดแสดงภาพอิสระ

หากมีแท็บใดแท็บหนึ่งไม่ตอบสนอง คุณสามารถปิดแท็บที่ไม่ตอบสนอง แล้วย้ายไปแท็บอื่นต่อได้ ถ้าแท็บทั้งหมดทำงานบนกระบวนการเดียว เมื่อแท็บหนึ่งไม่ตอบสนอง แท็บทั้งหมดจะไม่มีการตอบสนอง เศร้าจัง

โหมดแสดงภาพหลายตัวสำหรับแท็บ
รูปที่ 10: แผนภาพแสดงกระบวนการหลายรายการที่เรียกใช้แต่ละแท็บ

ประโยชน์อีกข้อหนึ่งของการแบ่งงานของเบราว์เซอร์เป็นหลายๆ กระบวนการคือการรักษาความปลอดภัย และแซนด์บ็อกซ์ เนื่องจากระบบปฏิบัติการให้วิธีในการจำกัดสิทธิ์ของกระบวนการ เบราว์เซอร์จึงสามารถทำแซนด์บ็อกซ์กับบางกระบวนการจากคุณลักษณะบางอย่างได้ เช่น เบราว์เซอร์ Chrome จะจำกัดการเข้าถึงไฟล์ สำหรับกระบวนการที่จัดการอินพุตของผู้ใช้ตามอำเภอใจ เช่น กระบวนการของโหมดแสดงภาพ

เนื่องจากกระบวนการมีพื้นที่หน่วยความจำส่วนตัวของตัวเอง การประมวลผลจึงมักมีสำเนาของโครงสร้างพื้นฐานทั่วไป (เช่น V8 ซึ่งเป็นเครื่องมือ JavaScript ของ Chrome) ซึ่งหมายความว่าจะใช้หน่วยความจำมากขึ้น เนื่องจากแชร์ไม่ได้ในแบบที่เป็นอยู่หากเป็นชุดข้อความที่อยู่ในกระบวนการเดียวกัน เพื่อประหยัดหน่วยความจำ Chrome จึงจำกัดจำนวนกระบวนการที่สามารถสร้างได้ ขีดจำกัดจะแตกต่างกันไปขึ้นอยู่กับปริมาณหน่วยความจำและ CPU ของอุปกรณ์ แต่เมื่อ Chrome ถึงขีดจำกัด จะมีการเรียกใช้หลายแท็บจากเว็บไซต์เดียวกันในกระบวนการเดียว

ประหยัดหน่วยความจำมากขึ้น - การให้บริการใน Chrome

กระบวนการของเบราว์เซอร์ก็ใช้แนวทางเดียวกันนี้เช่นกัน Chrome กำลังอยู่ระหว่างการเปลี่ยนแปลงสถาปัตยกรรมเพื่อเรียกใช้แต่ละส่วนของโปรแกรมเบราว์เซอร์เป็นบริการ ซึ่งทำให้สามารถแยกโปรเซสต่างๆ ออกเป็นแต่ละโปรเซสได้ หรือรวมเข้าเป็นขั้นตอนเดียว

แนวคิดทั่วไปก็คือ เมื่อ Chrome ทำงานบนฮาร์ดแวร์ที่ทรงประสิทธิภาพ อาจมีการแบ่งบริการออกเป็นหลายกระบวนการซึ่งมีความเสถียรมากกว่า แต่ถ้าอยู่บนอุปกรณ์ที่มีทรัพยากรจำกัด Chrome จะรวมบริการต่างๆ เข้าไว้ในกระบวนการเดียวซึ่งช่วยประหยัดหน่วยความจำ ก่อนการเปลี่ยนแปลงนี้มีการใช้วิธีรวมกระบวนการที่คล้ายคลึงกัน เพื่อลดการใช้หน่วยความจำบนแพลตฟอร์มอย่าง Android

การให้บริการของ Chrome
รูปที่ 11: แผนภาพการให้บริการของ Chrome ที่ย้ายบริการต่างๆ ไปสู่หลายๆ กระบวนการและเป็นกระบวนการของเบราว์เซอร์เดียว

กระบวนการแสดงผลต่อเฟรม - การแยกเว็บไซต์

การแยกเว็บไซต์เป็นฟีเจอร์ที่เพิ่งเปิดตัวใน Chrome ซึ่งเรียกใช้กระบวนการแสดงผลแยกกันสำหรับ iframe แบบข้ามเว็บไซต์แต่ละรายการ เราได้พูดถึงกระบวนการของโหมดแสดงภาพ 1 กระบวนการต่อโมเดลแท็บซึ่งอนุญาตให้ iframe แบบข้ามเว็บไซต์ทำงานในกระบวนการของโหมดแสดงภาพเดียวที่มีการแชร์พื้นที่หน่วยความจำระหว่างเว็บไซต์ต่างๆ การเรียกใช้ a.com และ b.com ในกระบวนการแสดงผลเดียวกันอาจดูไม่มีปัญหา นโยบายต้นทางเดียวกันเป็นรูปแบบความปลอดภัยหลักของเว็บ ช่วยให้มั่นใจได้ว่าเว็บไซต์หนึ่งจะไม่สามารถเข้าถึงข้อมูลจากเว็บไซต์อื่นๆ โดยไม่ได้รับความยินยอม การข้ามนโยบายนี้ถือเป็นเป้าหมายหลักของการโจมตีด้านความปลอดภัย การแยกกระบวนการเป็นวิธีที่มีประสิทธิภาพที่สุดในการแยกเว็บไซต์ ด้วย Meltdown และ Spectre เห็นได้ชัดขึ้นว่าเราต้องแยกเว็บไซต์โดยใช้กระบวนการ เมื่อเปิดใช้การแยกเว็บไซต์ในเดสก์ท็อปโดยค่าเริ่มต้นตั้งแต่ Chrome 67 แต่ละ iframe แบบข้ามเว็บไซต์ในแท็บจะได้รับกระบวนการแสดงผลแยกต่างหาก

การแยกเว็บไซต์
รูปที่ 12: แผนภาพการแยกเว็บไซต์ กระบวนการแสดงผลหลายแบบที่ชี้ไปยัง iframe ภายในเว็บไซต์

การเปิดใช้งานการแยกเว็บไซต์เป็นความพยายามทางวิศวกรรมที่เกิดขึ้นมาหลายปีแล้ว การแยกเว็บไซต์ไม่ง่ายเท่ากับการกำหนดกระบวนการแสดงผลที่แตกต่างกัน แต่จะเปลี่ยนวิธีที่ iframe สื่อสารกัน การเปิดเครื่องมือสำหรับนักพัฒนาเว็บบนหน้าเว็บที่มี iframe ทำงานบนกระบวนการต่างๆ ทำให้เครื่องมือสำหรับนักพัฒนาซอฟต์แวร์ต้องใช้การทำงานเบื้องหลังเพื่อทำให้หน้าดูราบรื่น แม้แต่การเรียกใช้ Ctrl+F แบบง่ายๆ เพื่อหาคำในหน้าเว็บก็เท่ากับการค้นหาผ่านกระบวนการแสดงผลที่ต่างกัน คุณจะเห็นเหตุผลที่วิศวกรเบราว์เซอร์ พูดถึงการเปิดตัวการแยกเว็บไซต์ซึ่งถือเป็นก้าวสำคัญ!

สรุป

ในโพสต์นี้ เราได้พูดถึงมุมมองระดับสูงของสถาปัตยกรรมเบราว์เซอร์ และประโยชน์ของสถาปัตยกรรมแบบหลายกระบวนการ นอกจากนี้ เรายังพูดถึงการให้บริการและการแยกเว็บไซต์ใน Chrome ที่มีความเกี่ยวข้องอย่างลึกซึ้งกับสถาปัตยกรรมแบบหลายกระบวนการ ในโพสต์ถัดไป เราจะเริ่มเจาะลึกถึงสิ่งที่เกิดขึ้นระหว่างกระบวนการและชุดข้อความเหล่านี้เพื่อแสดงเว็บไซต์

คุณชอบโพสต์นี้ไหม หากคุณมีคำถามหรือคำแนะนำสำหรับโพสต์ในอนาคต เรายินดีรับฟังคุณที่ @kosamari บน Twitter

ถัดไป: สิ่งที่เกิดขึ้นในการนำทาง