สถาปัตยกรรม CPU, GPU, หน่วยความจำ และการประมวลผลแบบหลายด้าน
ในบล็อกที่แบ่งออกเป็น 4 ตอนนี้ เราจะมาดูภายในเบราว์เซอร์ Chrome ตั้งแต่สถาปัตยกรรมระดับสูงไปจนถึงข้อมูลจำเพาะของไปป์ไลน์การแสดงผล หากคุณเคยสงสัยว่าเบราว์เซอร์เปลี่ยนโค้ดของคุณให้เป็นเว็บไซต์ที่ใช้งานได้ดีอย่างไร หรือไม่แน่ใจว่าเหตุใดจึงแนะนำเทคนิคที่เฉพาะเจาะจงเพื่อปรับปรุงประสิทธิภาพ ชุดวิดีโอนี้คือคำตอบสำหรับคุณ
ในตอนที่ 1 ของซีรีส์นี้ เราจะมาดูคำศัพท์การประมวลผลหลักๆ และสถาปัตยกรรมแบบมัลติโปรเซสของ Chrome
หัวใจสำคัญของคอมพิวเตอร์คือ CPU และ GPU
เพื่อทำความเข้าใจสภาพแวดล้อมที่เบราว์เซอร์ทำงานอยู่ เราต้องเข้าใจบางส่วนของคอมพิวเตอร์ และหน้าที่ของส่วนเหล่านั้น
CPU
ประเภทแรกคือ Central P สัดส่วน U nit หรือ CPU CPU ถือเป็น สมองของคอมพิวเตอร์ แกน CPU อย่างที่เห็นภาพในที่นี้ว่าเป็นพนักงานออฟฟิศ สามารถทำงานต่างๆ ได้หลายอย่างพร้อมกัน เครื่องมือนี้ดูแลได้ทุกอย่างตั้งแต่คณิตศาสตร์ไปจนถึงศิลปะ ทั้งยังรู้วิธีตอบกลับโทรศัพท์จากลูกค้าด้วย ที่ผ่านมา CPU ส่วนใหญ่เป็นชิปเดียว แกนประมวลผลก็เหมือนกับ CPU อีกตัวที่อยู่ในชิปเดียวกัน ในฮาร์ดแวร์สมัยใหม่ คุณมักจะได้รับแกนประมวลผลมากกว่า 1 แกน ซึ่งช่วยเพิ่มพลังในการประมวลผลให้กับโทรศัพท์และแล็ปท็อปของคุณ
GPU
อักขระที่ใช้ Unit - หรือ GPU คืออีกส่วนหนึ่งของคอมพิวเตอร์ GPU ต่างจาก CPU ตรงที่สามารถจัดการงานง่ายๆ แต่ใช้หลายแกนในเวลาเดียวกัน ตามชื่อเลย ตอนแรก พัฒนาขึ้นมาเพื่อรองรับกราฟิก "การใช้ GPU" หรือ "สนับสนุน GPU" เกี่ยวข้องกับการแสดงผลที่รวดเร็วและการโต้ตอบที่ราบรื่นในบริบทของกราฟิก ในช่วงไม่กี่ปีที่ผ่านมา การประมวลผลที่เร่งประสิทธิภาพด้วย GPU ทำให้การประมวลผลเพิ่มมากขึ้นบน GPU เพียงอย่างเดียว สามารถทำได้
เมื่อคุณเริ่มแอปพลิเคชันในคอมพิวเตอร์หรือโทรศัพท์ CPU และ GPU เป็นตัวขับเคลื่อนแอปพลิเคชัน โดยปกติ แอปพลิเคชันจะทำงานบน CPU และ GPU โดยใช้กลไกที่ระบบปฏิบัติการมีให้
ดำเนินการโปรแกรมบนกระบวนการและเทรด
อีกแนวคิดหนึ่งที่ควรทำความเข้าใจก่อนเข้าสู่สถาปัตยกรรมของเบราว์เซอร์คือ Process และ Thread กระบวนการอาจเรียกว่าเป็นโปรแกรมดำเนินการของแอปพลิเคชัน เทรดคือชุดข้อความที่อยู่ในกระบวนการ และดำเนินการทุกส่วนในโปรแกรมของกระบวนการ
เมื่อแอปพลิเคชันเริ่มทำงาน ระบบจะสร้างกระบวนการขึ้น โปรแกรมอาจสร้างชุดข้อความเพื่อช่วยในการ ทำงาน แต่ไม่บังคับ ระบบปฏิบัติการจะมี "แผ่น" หน่วยความจำให้ใช้งาน และสถานะของแอปพลิเคชันทั้งหมดจะถูกเก็บไว้ในพื้นที่หน่วยความจำส่วนตัวนั้น เมื่อคุณปิดแอปพลิเคชัน กระบวนการจะหายไปและระบบปฏิบัติการจะเพิ่มหน่วยความจำ
กระบวนการหนึ่งสามารถขอให้ระบบปฏิบัติการเริ่มต้นกระบวนการอื่นเพื่อทำงานต่างๆ ได้ เมื่อเกิดปัญหานี้ขึ้น จะมีการจัดสรรหน่วยความจำส่วนต่างๆ สำหรับกระบวนการใหม่ หากมี 2 กระบวนการที่ต้องพูดคุยด้วย ก็สามารถทำได้โดยใช้การเข้าถึงระบบการสื่อสาร (IPC) แอปพลิเคชันจำนวนมากออกแบบมาให้ทำงานในลักษณะนี้ ดังนั้นหากกระบวนการของผู้ปฏิบัติงานไม่ตอบสนอง สามารถรีสตาร์ทเครื่องได้โดยไม่ต้องหยุดกระบวนการอื่นที่กำลังใช้งานส่วนต่างๆ ของแอปพลิเคชัน
สถาปัตยกรรมของเบราว์เซอร์
แล้วเว็บเบราว์เซอร์สร้างขึ้นโดยใช้กระบวนการและชุดข้อความได้อย่างไร ก็อาจเป็นกระบวนการหนึ่งที่มีเทรดที่หลากหลาย หรือหลายกระบวนการที่มีเทรดไม่กี่รายการสื่อสารกันผ่าน IPC
สิ่งสำคัญที่ควรทราบก็คือสถาปัตยกรรมที่แตกต่างกันเหล่านี้คือรายละเอียดการติดตั้งใช้งาน และไม่มีข้อกำหนดมาตรฐานในการสร้างเว็บเบราว์เซอร์ เบราว์เซอร์หนึ่งอาจต่างจากเบราว์เซอร์อื่นๆ อย่างสิ้นเชิง
สำหรับชุดข้อมูลบล็อกนี้ เราใช้สถาปัตยกรรมล่าสุดของ Chrome ดังที่อธิบายไว้ในรูปที่ 8
ด้านบนจะแสดงกระบวนการของเบราว์เซอร์ที่ทำงานร่วมกับกระบวนการอื่นๆ ที่ช่วยดูแลส่วนต่างๆ ของแอปพลิเคชัน สำหรับกระบวนการของโหมดแสดงภาพ จะมีการสร้างกระบวนการต่างๆ ขึ้นและกำหนดให้กับแต่ละแท็บ ก่อนหน้านี้ Chrome จะให้กระบวนการทำงานระหว่างแท็บแต่ละแท็บไปได้สักพัก แต่ตอนนี้ได้พยายามทำให้แต่ละแท็บมีกระบวนการของตนเอง ซึ่งรวมถึง iframe (ดูการแยกเว็บไซต์)
กระบวนการในข้อใดจะควบคุมอะไร
ตารางต่อไปนี้อธิบายแต่ละกระบวนการของ Chrome และสิ่งที่ควบคุม
กระบวนการและสิ่งที่ควบคุม | |
---|---|
เบราว์เซอร์ |
ควบคุมส่วน "chrome" ของแอปพลิเคชัน รวมถึงแถบที่อยู่ บุ๊กมาร์ก ปุ่มย้อนกลับ และปุ่มไปข้างหน้า รวมถึงจัดการส่วนที่มองไม่เห็นของเว็บเบราว์เซอร์ เช่น คำขอเครือข่ายและการเข้าถึงไฟล์ |
โหมดแสดงภาพ | ควบคุมทุกอย่างภายในแท็บที่มีเว็บไซต์แสดงอยู่ |
ปลั๊กอิน | ควบคุมปลั๊กอินที่เว็บไซต์ใช้ เช่น Flash |
GPU | จัดการงาน GPU โดยแยกจากกระบวนการอื่น ระบบแยกออกเป็นกระบวนการที่แตกต่างกันเนื่องจาก GPU จัดการคำขอจากหลายแอปและแสดงในแพลตฟอร์มเดียวกัน |
นอกจากนี้ยังมีกระบวนการอื่นๆ เช่น กระบวนการขยายเวลาและกระบวนการยูทิลิตีอีก หากต้องการดูจำนวนกระบวนการที่ทำงานอยู่ใน Chrome ให้คลิกไอคอนเมนูตัวเลือก
ที่มุมขวาบน เลือกเครื่องมือเพิ่มเติม แล้วเลือก "ตัวจัดการงาน" หน้าต่างที่มีรายการกระบวนการที่กำลังทำงาน และจำนวน CPU/หน่วยความจำที่ใช้ประโยชน์ของสถาปัตยกรรมแบบหลายกระบวนการใน Chrome
ก่อนหน้านี้ฉันบอกไว้ว่า Chrome ใช้โปรเซสของโหมดแสดงภาพหลายขั้นตอน โดยทั่วไปแล้ว คุณจะจินตนาการว่าแต่ละแท็บมีกระบวนการแสดงผลของตัวเอง สมมติว่าคุณมีแท็บที่เปิดอยู่ 3 แท็บและแต่ละแท็บเรียกใช้โดยโปรเซสของโหมดแสดงภาพอิสระ
หากมีแท็บใดแท็บหนึ่งไม่ตอบสนอง คุณสามารถปิดแท็บที่ไม่ตอบสนอง แล้วย้ายไปแท็บอื่นต่อได้ ถ้าแท็บทั้งหมดทำงานบนกระบวนการเดียว เมื่อแท็บหนึ่งไม่ตอบสนอง แท็บทั้งหมดจะไม่มีการตอบสนอง เศร้าจัง
ประโยชน์อีกข้อหนึ่งของการแบ่งงานของเบราว์เซอร์เป็นหลายๆ กระบวนการคือการรักษาความปลอดภัย และแซนด์บ็อกซ์ เนื่องจากระบบปฏิบัติการให้วิธีในการจำกัดสิทธิ์ของกระบวนการ เบราว์เซอร์จึงสามารถทำแซนด์บ็อกซ์กับบางกระบวนการจากคุณลักษณะบางอย่างได้ เช่น เบราว์เซอร์ Chrome จะจำกัดการเข้าถึงไฟล์ สำหรับกระบวนการที่จัดการอินพุตของผู้ใช้ตามอำเภอใจ เช่น กระบวนการของโหมดแสดงภาพ
เนื่องจากกระบวนการมีพื้นที่หน่วยความจำส่วนตัวของตัวเอง การประมวลผลจึงมักมีสำเนาของโครงสร้างพื้นฐานทั่วไป (เช่น V8 ซึ่งเป็นเครื่องมือ JavaScript ของ Chrome) ซึ่งหมายความว่าจะใช้หน่วยความจำมากขึ้น เนื่องจากแชร์ไม่ได้ในแบบที่เป็นอยู่หากเป็นชุดข้อความที่อยู่ในกระบวนการเดียวกัน เพื่อประหยัดหน่วยความจำ Chrome จึงจำกัดจำนวนกระบวนการที่สามารถสร้างได้ ขีดจำกัดจะแตกต่างกันไปขึ้นอยู่กับปริมาณหน่วยความจำและ CPU ของอุปกรณ์ แต่เมื่อ Chrome ถึงขีดจำกัด จะมีการเรียกใช้หลายแท็บจากเว็บไซต์เดียวกันในกระบวนการเดียว
ประหยัดหน่วยความจำมากขึ้น - การให้บริการใน Chrome
กระบวนการของเบราว์เซอร์ก็ใช้แนวทางเดียวกันนี้เช่นกัน Chrome กำลังอยู่ระหว่างการเปลี่ยนแปลงสถาปัตยกรรมเพื่อเรียกใช้แต่ละส่วนของโปรแกรมเบราว์เซอร์เป็นบริการ ซึ่งทำให้สามารถแยกโปรเซสต่างๆ ออกเป็นแต่ละโปรเซสได้ หรือรวมเข้าเป็นขั้นตอนเดียว
แนวคิดทั่วไปก็คือ เมื่อ Chrome ทำงานบนฮาร์ดแวร์ที่ทรงประสิทธิภาพ อาจมีการแบ่งบริการออกเป็นหลายกระบวนการซึ่งมีความเสถียรมากกว่า แต่ถ้าอยู่บนอุปกรณ์ที่มีทรัพยากรจำกัด Chrome จะรวมบริการต่างๆ เข้าไว้ในกระบวนการเดียวซึ่งช่วยประหยัดหน่วยความจำ ก่อนการเปลี่ยนแปลงนี้มีการใช้วิธีรวมกระบวนการที่คล้ายคลึงกัน เพื่อลดการใช้หน่วยความจำบนแพลตฟอร์มอย่าง Android
กระบวนการแสดงผลต่อเฟรม - การแยกเว็บไซต์
การแยกเว็บไซต์เป็นฟีเจอร์ที่เพิ่งเปิดตัวใน Chrome ซึ่งเรียกใช้กระบวนการแสดงผลแยกกันสำหรับ iframe แบบข้ามเว็บไซต์แต่ละรายการ เราได้พูดถึงกระบวนการของโหมดแสดงภาพ 1 กระบวนการต่อโมเดลแท็บซึ่งอนุญาตให้ iframe แบบข้ามเว็บไซต์ทำงานในกระบวนการของโหมดแสดงภาพเดียวที่มีการแชร์พื้นที่หน่วยความจำระหว่างเว็บไซต์ต่างๆ การเรียกใช้ a.com และ b.com ในกระบวนการแสดงผลเดียวกันอาจดูไม่มีปัญหา นโยบายต้นทางเดียวกันเป็นรูปแบบความปลอดภัยหลักของเว็บ ช่วยให้มั่นใจได้ว่าเว็บไซต์หนึ่งจะไม่สามารถเข้าถึงข้อมูลจากเว็บไซต์อื่นๆ โดยไม่ได้รับความยินยอม การข้ามนโยบายนี้ถือเป็นเป้าหมายหลักของการโจมตีด้านความปลอดภัย การแยกกระบวนการเป็นวิธีที่มีประสิทธิภาพที่สุดในการแยกเว็บไซต์ ด้วย Meltdown และ Spectre เห็นได้ชัดขึ้นว่าเราต้องแยกเว็บไซต์โดยใช้กระบวนการ เมื่อเปิดใช้การแยกเว็บไซต์ในเดสก์ท็อปโดยค่าเริ่มต้นตั้งแต่ Chrome 67 แต่ละ iframe แบบข้ามเว็บไซต์ในแท็บจะได้รับกระบวนการแสดงผลแยกต่างหาก
การเปิดใช้งานการแยกเว็บไซต์เป็นความพยายามทางวิศวกรรมที่เกิดขึ้นมาหลายปีแล้ว การแยกเว็บไซต์ไม่ง่ายเท่ากับการกำหนดกระบวนการแสดงผลที่แตกต่างกัน แต่จะเปลี่ยนวิธีที่ iframe สื่อสารกัน การเปิดเครื่องมือสำหรับนักพัฒนาเว็บบนหน้าเว็บที่มี iframe ทำงานบนกระบวนการต่างๆ ทำให้เครื่องมือสำหรับนักพัฒนาซอฟต์แวร์ต้องใช้การทำงานเบื้องหลังเพื่อทำให้หน้าดูราบรื่น แม้แต่การเรียกใช้ Ctrl+F แบบง่ายๆ เพื่อหาคำในหน้าเว็บก็เท่ากับการค้นหาผ่านกระบวนการแสดงผลที่ต่างกัน คุณจะเห็นเหตุผลที่วิศวกรเบราว์เซอร์ พูดถึงการเปิดตัวการแยกเว็บไซต์ซึ่งถือเป็นก้าวสำคัญ!
สรุป
ในโพสต์นี้ เราได้พูดถึงมุมมองระดับสูงของสถาปัตยกรรมเบราว์เซอร์ และประโยชน์ของสถาปัตยกรรมแบบหลายกระบวนการ นอกจากนี้ เรายังพูดถึงการให้บริการและการแยกเว็บไซต์ใน Chrome ที่มีความเกี่ยวข้องอย่างลึกซึ้งกับสถาปัตยกรรมแบบหลายกระบวนการ ในโพสต์ถัดไป เราจะเริ่มเจาะลึกถึงสิ่งที่เกิดขึ้นระหว่างกระบวนการและชุดข้อความเหล่านี้เพื่อแสดงเว็บไซต์
คุณชอบโพสต์นี้ไหม หากคุณมีคำถามหรือคำแนะนำสำหรับโพสต์ในอนาคต เรายินดีรับฟังคุณที่ @kosamari บน Twitter