Cache
หน่วยความจำในระบบคอมพิวเตอร์ หน่วยความจำในระบบคอมพิวเตอร์มีการจัดโครงสร้างเป็นลำดับชั้นดังนี้ รีจิสเตอร์ภายในโปรเซสเซอร์ : ระดับชั้นสูงสุด (อยู่ใกล้โปรเซสเซอร์มากที่สุด) หน่วยความจำ cache หนึ่งหรือสองระดับ ซึ่งถ้ามีหลายระดับมักจะเรียกว่า cache ระดับ L1, L2, … หน่วยความหลัก : มักสร้างมาจาก DRAM(Dynamic Random Access Memory) โดยทั่วไปตำแหน่งการอ้างอิงข้อมูลในหน่วยความจำหลักโดยโปรเซสเซอร์นั้น มักจะเป็นตำแหน่งเดิม ดังนั้นหน่วยความจำ cache มักจะคัดลอกข้อมูลในหน่วยความจำหลักที่เคยถูกอ้างอิงไปแล้วเอาไว้ ซึ่งถ้าการทำงานของ cache ได้รับการออกแบบเป็นอย่างดีแล้ว เวลาส่วนใหญ่โปรเซสเซอร์ก็จะเรียกใช้ข้อมูลที่อยู่ใน cache เป็นส่วนมาก
คุณลักษณะของระบบหน่วยความจำ ความซับซ้อนของระบบหน่วยความจำสามารถทำให้เข้าใจได้ง่ายขึ้น ด้วยการอธิบายคุณลักษณะที่สำคัญของระบบหน่วยความจำ ดังตารางด้านล่าง Location Performance Processor Access time Internal (main) Cycle time External (secondary) Transfer rate Capacity Physical Type Word size Semiconductor Number of words Magnetic Unit of Transfer Optical Word Magneto-optical Block Physical Characteristics Access Method Volatile/nonvolatile Sequential Erasable/nonerasable Direct Organization Random Associative
คุณลักษณะของระบบหน่วยความจำ Location(สถานที่) : หมายความถึงสถานที่ที่หน่วยความจำอยู่ นั่นคืออยู่ภายในหรือภายนอกเครื่องคอมพิวเตอร์ internal memory หมายถึงหน่วยความจำหลัก(main memory), cache นอกจากนี้ก็ยังมี register ซึ่งอยู่ภายในโปรเซสเซอร์ ส่วน external memory คือหน่วยความจำภายนอก เช่น ดิสก์, เทป Capacity(ความจุ) : สำหรับหน่วยความจำภายใน ความจุจะใช้หน่วยเป็น byte หรือ word โดยปกติ 1 word มีขนาด 8, 16, 32 bit ส่วนหน่วยความจำภายนอกนิยมแสดงความจุในหน่วยของ byte Unit of transfer(หน่วยในการถ่ายข้อมูล) : สำหรับหน่วยความจำภายใน หน่วยในการถ่ายข้อมูลเท่ากับ จำนวนสายสัญญาณข้อมูลเข้าสู่และออกจากหน่วยความจำ โดยปกติจะมีขนาดเท่ากับความยาวของ word แต่อาจจะมีขนาดใหญ่กว่าก็ได้เช่น 64,128,256 บิต
คุณลักษณะของระบบหน่วยความจำ Access method(วิธีการเข้าถึงหน่วยความจำ) มีรายละเอียดดังนี้ Sequential access: การเข้าถึงหน่วยความจำแบบเรียงลำดับ ใช้สำหรับ หน่วยความจำที่มีโครงสร้างประกอบด้วยหน่วยต่าง ๆ ซึ่งเรียกว่า record การเข้าไปอ่านหรือบันทึกข้อมูลจะต้องกระทำเรียงตามลำดับ ข้อมูลเกี่ยวกับตำแหน่งที่อยู่ถูกนำมาใช้ในการแยกตำแหน่งแต่ละ record ออกจากกัน และช่วยในการกระบวนการอ่านข้อมูล ตัวอย่างการเข้าถึงหน่วยความจำแบบนี้ได้แก่ เทปแม่เหล็ก Direct access: การเข้าถึงหน่วยความจำแบบตรง กระบวนการนี้สามารถเปลี่ยนตำแหน่งที่อยู่ในปัจจุบันไปเป็นตำแหน่งที่ต้องการ โดยข้ามระเบียนข้อมูลที่อยู่ระหว่างกลางไป ตัวอย่างได้แก่ ดิสก์
คุณลักษณะของระบบหน่วยความจำ Random access: การเข้าถึงหน่วยความจำแบบไม่มีลำดับ แต่ละตำแหน่งในหน่วยความจำจะต้องมีกลไกในการกำหนดตำแหน่งเฉพาะที่ไม่มีการซ้ำกัน ระยะเวลาที่ใช้ในการเข้าถึงแต่ละหน่วยนั้นเป็นอิสระจากลำดับการเข้าถึงหน่วยความจำที่เกิดขึ้นก่อนหน้านี้ และใช้ระยะเวลาเท่ากันเสมอ ดังนั้นจึงสามารถเลือกตำแหน่งใดๆ ในหน่วยความจำได้โดยไม่ต้องเรียงลำดับใด และสามารถเข้าถึงตำแหน่งนั้นได้โดยตรง ตัวอย่างคือ หน่วยความจำหลัก(main memory) Associative: หรือความเกี่ยวข้อง จัดว่าเป็นการเข้าถึงหน่วยความจำแบบ random access อย่างหนึ่งที่มีการเปรียบเทียบข้อมูลบิตจำนวนหนึ่ง(ที่กำหนดตำแหน่งไว้ล่วงหน้า) กับ word ที่เป็นตัวเลือกจำนวนหนึ่ง (กำหนดไว้ล่วงหน้าเช่นกัน) เพื่อค้นหาตำแหน่งที่สอดคล้องกัน ดังนั้น word ที่ได้รับจึงเกิดขึ้นจากการค้นหาข้อมูลใน word แทนที่จะเป็นตำแหน่งของ word นั้น ๆ การทำงานอื่นมีลักษณะแบบเดียวกับ random access คือเวลาที่ใช้ในการเข้าถึงข้อมูลนั้นคงที่และไม่ขึ้นอยู่กับการเข้าถึงข้อมูลในครั้งก่อนหน้า ตัวอย่างคือ หน่วยความจำ cache
คุณลักษณะของระบบหน่วยความจำ Performance: ประสิทธิภาพ ซึ่งแบ่งการวัดเป็นสามเรื่อง ดังนี้ Access time (latency): สำหรับหน่วยความจำแบบ random access memory ระยะเวลาในการเข้าถึงหน่วยความจำ หมายถึง ระเวลาที่ใช้ในการอ่านหรือบันทึกข้อมูลคือ ระยะเวลานับตั้งแต่ที่ตำแหน่งข้อมูลได้ถูกส่งมาถึงหน่วยความจำ จนกระทั่งข้อมูลได้ถูกบันทึก สำหรับหน่วยความจำแบบอื่นที่ไม่ใช่ random access memory จะหมายถึง ระยะเวลาที่เคลื่อนย้ายกลไกในการอ่านหรือบันทึกข้อมูลไปยังตำแหน่งข้อมูลที่ต้องการ Memory cycle time: ใช้กับหน่วยความจำแบบ random access memory ระยะเวลาวงรอบหน่วยความจำประกอบด้วย ระยะเวลาในการเข้าถึงหน่วยความจำ (access time) รวมกับระยะเวลาอื่น ๆ ที่จำเป็นต้องใช้ จนถึงเวลาที่จะเกิดการอ่านหรือบันทึกข้อมูลในครั้งต่อไป ระยะเวลาอื่นที่ต้องใช้เช่น ระยะเวลาที่รอให้สัญญาณต่าง ๆ เข้าสู่สถานะเสถียร และระยะเวลาที่ต้องรอให้สัญญาณเดิมหายไป(สายสัญญาณเข้าสู่สถานะว่าง หรือ idle)
คุณลักษณะของระบบหน่วยความจำ Transfer rate: อัตราการถ่ายเทข้อมูล หมายถึง อัตราที่ข้อมูลถูกถ่ายทอดเข้าสู่หรือออกจากหน่วยความจำ สำหรับหน่วยความจำแบบ random access memory ระยะเวลานี้เท่ากับ 1/cycle time สำหรับหน่วยความจำแบบอื่นระยะเวลานี้จะเท่ากับ TN = TA + (N/R) TN = ระยะเวลาโดยเฉลี่ยในการอ่านหรือบันทึกข้อมูล N บิต TA = ระยะเวลาเข้าถึงข้อมูลโดยเฉลี่ย N = จำนวนบิตข้อมูล R = อัตราการถ่ายเทข้อมูล มีหน่วยเป็นบิตต่อวินาที
คุณลักษณะของระบบหน่วยความจำ Physical type: หน่วยความจำอาจแบ่งออกตามลักษณะทางกายภายได้แก่ หน่วยความจำเซมิคอนดักเตอร์(semiconductor), หน่วยความจำแบบผิวฉาบด้วยสารแม่เหล็ก(magnetic surface memory) ซึ่งใช้ดิสก์และเทปมาเป็นหน่วยความจำ, การใช้อุปกรณ์ optic และ magneto-optic มาเป็นหน่วยความจำ Physical characteristic: คุณสมบัติทางกายภาพของอุปกรณ์บันทึกข้อมูลนั้นมีความสำคัญต่อการใช้งานอย่างมาก ในหน่วยความจำที่เป็นแบบไม่ถาวร(volatile) นั้นจะสูญเสียข้อมูลที่บันทึกอยู่ในทันทีที่ถูกตัดพลังงานไฟฟ้า ส่วนหน่วยความจำแบบถาวร(non-volatile) จะสามารถบันทึกข้อมูลไว้ได้ตลอดเวลา หน่วยความจำแบบผิวฉาบสารแม่เหล็กเป็นตัวอย่างของ non-volatile ส่วนเซมิคอนดักเตอร์นั้นเป็นได้ทั้ง volatile และ non-volatile ขึ้นอยู่กับวัตถุประสงค์ในตอนผลิต
โครงสร้างลำดับชั้นของหน่วยความจำ เงื่อนไขสำคัญของการออกแบบหน่วยความจำ คือ ราคา ปริมาณ และเวลาการเข้าถึงหน่วยความจำ ซึ่งเงื่อนไขทั้งสามประการนี้มีความสัมพันธ์กัน ดังนี้ การเพิ่มความเร็วในการเข้าถึงข้อมูล จะทำให้หน่วยความจำมีราคาสูงขึ้น ปริมาณหน่วยความจำเพิ่มขึ้น จะทำให้ราคาต่อหน่วยลดลง ปริมาณหน่วยความจำเพิ่มขึ้น จะทำให้เสียเวลาในการเข้าถึงข้อมูลในหน่วยความจำมากขึ้น หนทางในการแก้ปัญหาความซับซ้อนนี้ สามารถทำได้โดยการใช้เทคโนโลยีหน่วยความจำหลายแบบมาผสมกันเป็นโครงสร้างลำดับชั้นของหน่วยความจำ ดังโครงสร้างดังรูปหน้าถัดไป เมื่อพิจารณาหน่วยความจำที่อยู่ในระดับบนลงล่างจะพบว่า (a) มีราคาต่อบิตต่ำลง (b) มีปริมาณมากขึ้น (c) ใช้เวลาในการเข้าถึงข้อมูลนานขึ้น (d) มีการติดต่อกับโปรเซสเซอร์ลดลง
โครงสร้างลำดับชั้นของหน่วยความจำ จากรูปโครงสร้างจะเห็นได้ว่า หน่วยความจำราคาแพงซึ่งมีความเร็วสูงในระดับบนจะถูกแทนที่ด้วยหน่วยความจำราคาถูก ปริมาณมาก และทำงานได้ช้าลงในระดับล่าง กุญแจสำคัญของความสำเร็จของโครงสร้างลำดับชั้นนี้คือ คุณสมบัติในข้อ (d) นั่นคือการลดการติดต่อกับหน่วยความจำในระดับล่างให้เหลือน้อยที่สุด
โครงสร้างลำดับชั้นของหน่วยความจำ ประสิทธิภาพของหน่วยความจำ 2 ระดับ
โครงสร้างลำดับชั้นของหน่วยความจำ สมมติว่าโปรเซสเซอร์สามารถอ้างอิงถึงหน่วยความจำสองระดับ ระดับที่ 1 ประกอบด้วยหน่วยความจำจำนวน 1000 words ซึ่งมีระยะเวลาในการเข้าถึงข้อมูล 0.01 ไมโครวินาที หน่วยความจำระดับที่ 2 ประกอบด้วยหน่วยความจำจำนวน 100000 words ซึ่งมีระยะเวลาในการเข้าถึงข้อมูล 0.1 ไมโครวินาที ถ้าโปรเซสเซอร์ต้องการข้อมูล 1 word จากหน่วยความจำในระดับที่ 1 ก็สามารถทำได้ทันที แต่ถ้าข้อมูลนั้นอยู่ในหน่วยความจำระดับที่ 2 ข้อมูลนั้นจะต้องถูกคัดลอกไปไว้ที่หน่วยความจำระดับที่ 1 ก่อน จากนั้นโปรเซสเซอร์จึงจะนำข้อมูลไปใช้ได้ จากกราฟแสดงให้เห็นถึงความสัมพันธ์ของเหตุการณ์ที่สมมุติขึ้นมานี้ ในรูปเป็นระยะเวลาโดยเฉลี่ยของการเข้าถึงหน่วยความจำ (average access time) ในรูปฟังก์ชันของอัตราการอ้างอิงข้อมูลในหน่วยความจำระดับที่ 1 (hit ratio) โดยที่
โครงสร้างลำดับชั้นของหน่วยความจำ H = สัดส่วนของการอ้างอิงหน่วยความจำ ที่สามารถพบข้อมูลที่ต้องการใน หน่วยความจำระดับที่ 1 T1 = ระยะเวลาในการเข้าถึงข้อมูลที่หน่วยความจำระดับที่ 1 T2 = ระยะเวลาในการเข้าถึงข้อมูลที่หน่วยความจำระดับที่ 2 จะเห็นได้ว่าถ้าการอ้างอิงหน่วยความจำในระดับที่ 1 มีเปอร์เซ็นต์สูงขึ้น ค่าเฉลี่ยโดยรวมของระยะเวลาในการอ้างอิงหน่วยความจำ จะมีค่าใกล้เคียงกับระยะเวลาที่ใช้ในการอ้างอิงหน่วยความจำระดับที่ 1 จากตัวอย่างที่สมมติขึ้น ถ้า 95% ของการอ้างอิงทั้งหมด เกิดขึ้นในหน่วยความจำระดับที่ 1 แล้ว ค่าเฉลี่ยของระยะเวลาในการอ้างอิงข้อมูลจะเป็น (0.95)(0.01s) + (0.05)(0.1 s+0.01s) = 0.0095+0.0055 = 0.015 s
โครงสร้างลำดับชั้นของหน่วยความจำ ในตัวอย่างข้างต้น ค่าเฉลี่ยในการเข้าถึงหน่วยความจำมีค่าใกล้เคียงกับ 0.01 s มากกว่า 0.1 s ตามที่ต้องการ การใช้หน่วยความจำสองระดับ ช่วยลดระยะเวลาในการเข้าถึงหน่วยความจำได้ ในทางพื้นฐานเมื่อเงื่อนไข (a) ถึง (d) เป็นจริง การทำเทคโนโลยีต่าง ๆ มาประยุกต์ใช้จะทำให้เกิดความหลากหลายที่จะทำให้เงื่อนไข (a) ถึง (c) เป็นจริง ส่วนเงื่อนไข (d) นั้นมักจะเป็นจริงได้โดยอัตโนมัติ ความสัมพันธ์นี้ สามารถนำไปใช้ได้กับระบบที่มีหน่วยความจำหลายระดับ หน่วยความจำที่ทำงานเร็วที่สุด มีขนาดเล็กที่สุด และมีราคาแพงที่สุดก็คือ รีจิสเตอร์ ซึ่งอยู่ในตัวโปรเซสเซอร์ โดยทั่วไปโปรเซสเซอร์จะมีรีจิสเตอร์ประมาณ 20-30 ตัว ในขณะที่บางเครื่องอาจมีมากนับร้อยตัวก็ได้
โครงสร้างลำดับชั้นของหน่วยความจำ เลื่อนลงมาสองระดับจะเป็นหน่วยความจำหลัก(main memory) ซึ่งเป็นหน่วยความจำที่ถูกนำมาใช้งานทั่วไปในเครื่องคอมพิวเตอร์ ข้อมูลแต่ละตำแหน่งในหน่วยความจำหลักจะมี address เฉพาะเป็นของตัวเอง หน่วยความจำหลักมักจะเชื่อมต่อเข้ากับหน่วยความจำขนาดเล็ก ที่มีความเร็วสูงกว่ามากเรียกว่า หน่วยความจำ cache หน่วยความจำ cache มักจะเป็นส่วนที่ถูกซ่อนเอาไว้จากผู้เขียนโปรแกรม หรือแม้กระทั่งตัวโปรเซสเซอร์เอง คือจะทำงานโดยอัตโนมัติ แต่จะสั่งการให้ทำงานตามที่ต้องการโดยตรงไม่ได้ หน่วยความจำ cache ทำหน้าที่เป็นเสมือน buffer เล็ก ๆ ระหว่างหน่วยความจำหลักกับรีจิสเตอร์ในโปรเซสเซอร์ ซึ่งมีวัตถุประสงค์เพื่อเพิ่มประสิทธิภาพการทำงานของหน่วยความจำหลักโดยตรง
ลักษณะพื้นฐานของหน่วยความจำ Cache โดยปกติหน่วยความจำ cache จะเก็บสำเนาของข้อมูลบางส่วนในหน่วยความจำหลักเอาไว้ เมื่อโปรเซสเซอร์ต้องการอ่านข้อมูลจำนวนหนึ่ง word ในหน่วยความจำ ข้อมูลส่วนนั้นจะถูกตรวจสอบว่ามีอยู่ใน cache หรือไม่ ถ้ามีอยู่ก็จะนำข้อมูลใน cache ไปใช้ ถ้าไม่มีก็จะเกิดการคัดลอกสำเนาข้อมูลหนึ่งบล็อก จากหน่วยความจำหลักมายัง cache แล้วจึงนำ word ที่ต้องการส่งต่อไปให้โปรเซสเซอร์ในภายหลัง
ลักษณะพื้นฐานของหน่วยความจำ Cache
ลักษณะพื้นฐานของหน่วยความจำ Cache เนื่องจากปรากฏการณ์การอ้างอิงในพื้นที่เดียวกัน (locality of reference) จะทำให้การอ้างอิงข้อมูลในหน่วยความจำครั้งต่อๆไป เป็นการอ้างอิงที่เดิม หรือที่ตำแหน่งใกล้เคียงจุดเดิม ดังนั้นการคัดลอกข้อมูลหนึ่งบล็อกจากหน่วยความจำหลักมายัง cache จะสามารถถูกนำมาใช้งานได้ในระยะหนึ่ง ก่อนที่จะมีการคัดลอกข้อมูลในครั้งต่อไป รูปด้านล่างแสดงโครงสร้างของหน่วยความจำ cache และหน่วยความจำหลัก หน่วยความจำหลักประกอบด้วย ที่เก็บข้อมูลจำนวน 2n words ที่สามารถถูกอ้างอิงได้ โดยที่แต่ละ word จะมีหลายเลขที่อยู่เป็นเลขฐานสองจำนวน n-bit เป็นหมายเลขเฉพาะของตัวเอง
ลักษณะพื้นฐานของหน่วยความจำ Cache และหน่วยความจำหลัก
ลักษณะพื้นฐานของหน่วยความจำ Cache กล่าวอีกนัยหนึ่ง คือ หน่วยความจำหลักประกอบด้วยบล็อกที่เก็บข้อมูลขนาด K-word จำนวนหนึ่งนั่นคือมีจำนวนบล็อก(M) เท่ากับ M = 2n/K บล็อกนั่นเอง ส่วน cache นั้นประกอบด้วยช่องสัญญาณจำนวน C ช่องโดยที่แต่ละช่องมีขนาด K words และจำนวนช่องสายสัญญาณนั้น น้อยกว่าจำนวนบล็อกในหน่วยความจำหลักเป็นอย่างมา (C < M) ในเวลาใดก็ตามข้อมูลจำนวนหลายบล็อกจากหน่วยความจำหลัก จะถูกคัดลอกสำเนามาเก็บไว้ที่ช่องสัญญาณใน cache ถ้าข้อมูลใน word ของบล็อกหนึ่งถูกเรียกใช้โดยโปรเซสเซอร์ ข้อมูลทั้งบล็อกนั้นจะถูกถ่ายโอนมาไว้ที่ cache เนื่องจากหน่วยความจำหลักมีจำนวนบล็อกมากกว่าช่องสัญญาณใน cache ช่องสัญญาณแต่ละช่องจึงไม่ได้กำหนดไว้สำหรับบล็อกใด ทำให้ช่องสัญญาณแต่ละช่องต้องมีป้ายบอกว่าข้อมูลมาจากบล็อกใด
ลักษณะพื้นฐานของหน่วยความจำ Cache รูป (a) แสดงขั้นตอนในกระบวนการอ่านข้อมูล โปรเซสเซอร์สร้างตำแหน่งที่อยู่ของข้อมูลที่ต้องการอ่าน เรียกว่า RA ถ้าข้อมูล word นั้นมีอยู่ใน cache อยู่แล้ว ก็จะถูกนำส่งโปรเซสเซอร์ทำการประมวลผลต่อไป มิฉะนั้นบล็อกในหน่วยความจำหลักที่มีข้อมูล word นี้อยู่ก็จะถูกคัดลอกสำเนาเข้ามาใส่ไว้ใน cache และถูกนำส่งโปรเซสเซอร์ต่อไป จากรูปแสงให้เห็นขั้นตอนต่าง ๆ ที่เกิดขึ้น เป็นโครงสร้างของส่วนประกอบภายใน รูป (b) เป็นโครงสร้างที่ใช้กับ cache ที่มีใช้งานทั่วไป ในโครงสร้างนี้ cache เชื่อมต่อกับโปรเซสเซอร์ผ่านสาย data bus, address bus, control bus สาย data bus และ สาย address bus จะเชื่อมต่อเข้ากับบัฟเฟอร์ ซึ่งเชื่อมต่อเข้ากับสายบัสหลักของระบบที่นำไปสู่หน่วยความจำหลัก
ลักษณะพื้นฐานของหน่วยความจำ Cache การอ่านข้อมูลจากหน่วยความจำ cache
ลักษณะพื้นฐานของหน่วยความจำ Cache
ลักษณะพื้นฐานของหน่วยความจำ Cache เมื่อสามารถค้นพบข้อมูลที่ต้องการใน cache (cache hits) บัฟเฟอร์สำหรับข้อมูลและตำแหน่งข้อมูลจะถูกสั่งไม่ให้ทำงาน(disable) และการสื่อสารจะเกิดขึ้นระหว่างโปรเซสเซอร์กับ cache โดยไม่มีการใช้บัสหลักด้วย แต่ถ้าไม่สามารถหาข้อมูลใน cache ได้(cache miss) ตำแหน่งข้อมูลที่ต้องการจะถูกส่งเข้าไปในบัสหลัก ข้อมูลในหน่วยความจำหลักจะถูกส่งมาที่บัฟเฟอร์ และจากบัฟเฟอร์ส่งไปยังโปรเซสเซอร์และส่งเข้าไปเก็บไว้ใน cache ในบางโครงสร้าง cache จะถูกวางคั่นกลางไว้ระหว่างโปรเซสเซอร์ และหน่วยความจำหลัก ซึ่งจะวางทับ data bus, address bus, control bus ไว้ทั้งหมด ดังนั้นเมื่อเกิดกรณี cache miss ข้อมูลจากหน่วยความจำหลักจะถูกส่งมาที่ cache ก่อน แล้วจึงถูกส่งต่อไปยังโปรเซสเซอร์ในลำดับหลัง
องค์ประกอบในการออกแบบ Cache ต้องมีขนาดเล็กเพียงพอที่จะทำให้ราคาเฉลี่ยต่อบิตนั้นใกล้เคียงกับราคาของหน่วยความจำหลัก และต้องมีขนาดใหญ่เพียงพอ เพื่อให้ค่าเฉลี่ยของเวลาในการเข้าถึงข้อมูลใกล้เคียงกับระยะเวลาในการเข้าถึงข้อมูลของ cache ขนาดที่ใหญ่ขึ้นของ cache จะไปเพิ่มจำนวนของ gates ที่เกี่ยวข้องกับการค้นหาตำแหน่งข้อมูลใน cache ผลที่เกิดขึ้นทำให้ cache มีขนาดใหญ่ขึ้น ซึ่งจะทำให้ cache ทำงานได้ช้าลง เนื้อที่บนแผงวงจรก็เป็นส่วนหนึ่งที่บังคับขนาดของ cache ให้มีขนาดที่จำกัด ขนาดของ cache บนคอมพิวเตอร์ชนิดต่าง ๆ จึงต้องสัมพันธ์กับการใช้งานกับโปรเซสเซอร์ชนิดต่าง ๆ ด้วย
ขนาดของ cache ในโปรเซสเซอร์ชนิดต่าง ๆ Processor Type Year L1 cache L2 cache L3 cache IBM 360/85 Mainframe 1968 16 to 32 KB N PDP-11/70 Minicomputer 1975 1 KB VAX 11/780 1978 16 KB IBM 3033 64 KB IBM 3090 1985 128 to 256 KB Intel 80486 PC 1989 8 KB Pentium 1993 256 to 512 KB PowerPC G4 PC/Server 1999 32 KB 256 KB to 1 MB 2 MB Itanium 2001 96 KB 4 MB
องค์ประกอบในการออกแบบ Cache Cache Size Write Policy Mapping Function Write through Direct Write back Associative Set associative Line Size Replacement Algorithm Number of caches Least recently used (LRU) Single or two level First in first out (FIFO) Unified or split Least frequently used (LFU) Random
Mapping Function เนื่องจาก cache มีช่องสัญญาณน้อยกว่าจำนวนบล็อกในหน่วยความจำ จึงจำเป็นต้องมีอัลกอริทึม สำหรับการกำหนดตำแหน่งหน่วยความจำของแต่ละบล็อกไปยังช่องสัญญาณใน cache เรียกว่า Mapping นอกจากนี้ยังต้องมีวิธีการสำหรับการตรวจสอบว่าบล็อกใดที่ยังคงถูกเก็บไว้ในช่องสัญญาณ cache วิธีการกำหนดตำแหน่งหน่วยความจำไว้ในช่องสัญญาณ cache หรือ Mapping จะเป็นสิ่งที่บอกให้ทราบถึงวิธีการวางโครงสร้างภายใน cache ซึ่งนิยมใช้สามวิธีคือ Direct mapping Associative mapping Set associative mapping
Mapping Function เพื่อเป็นการเปรียบเทียบการทำงานของโครงสร้างทั้งสามแบบจึงกำหนด ตัวอย่างดังนี้ ขนาดของ cache เป็น 64 Kbytes การถ่ายเทข้อมูลระหว่างหน่วยความจำหลักกับ cache กระทำครั้งละหนึ่งบล็อก ซึ่งมีขนาด 4 bytes หมายความว่า จำนวนช่องสัญญาณใน cache นั้นเท่ากับ 16K ช่อง (16K x 4 = 64 Kbytes) หน่วยความจำหลักมีขนาด 16 Mbytes ซึ่งใช้วิธีการกำหนดตำแหน่งข้อมูลโดยใช้เลขฐานสองขนาด 24 บิต (224 = 16M) ดังนั้นเพื่อการกำหนดตำแหน่งบล็อกข้อมูลไปยัง cache จึงถือว่าหน่วยความจำหลักมีขนาด 16M บล็อก บล็อกละ 4 bytes
Direct Mapping การจัดโครงสร้างภายใน cache แบบที่ง่ายที่สุดเป็นแบบ Direct mapping ซึ่งจะกำหนดตำแหน่งของแต่ละบล็อกไว้ที่ตำแหน่งช่องสัญญาณ cache ที่เดิมเสมอ ไม่มีการเปลี่ยนแปลง รูป direct mapping แสดงกลไกการทำงานทั่วไป ซึ่งสามารถอธิบายด้วยรูปแบบฟังก์ชันทางคณิตศาสตร์ ดังนี้ i = j modulo m เมื่อ i คือ หมายเลขช่องสัญญาณ cache j คือ หมายเลขบล็อก m คือ จำนวนช่องสัญญาณของ cache
Direct Mapping โครงสร้างหน่วยความจำ cache แบบ direct-mapping
Direct Mapping การคำนวณให้พิจารณาว่า ตำแหน่งของข้อมูลในหน่วยความจำประกอบขึ้นด้วย 3 ส่วน บิตด้านขวามือสุด (เริ่มจากบิตที่มีค่าน้อยสุด) จำนวน w บิต ใช้ในการการอ้างอิง word แต่ละ word ที่อยู่ภายในบล็อกหนึ่ง ที่เหลืออีกจำนวน s บิต หมายถึงตำแหน่งหรือหมายเลขของบล็อกจากจำนวนทั้งหมด 2s บล็อก หน่วยความจำ cache จะแบ่งข้อมูล s บิตนี้ออกเป็นสองส่วน คือ เป็นบิตที่ใช้บอกหมายเลขช่องสัญญาณ cache จำนวน r บิต (แสดงว่ามีจำนวนช่องสัญญาณทั้งสิ้น 2r ช่อง) และที่เหลืออีก s - r บิต ใช้เป็น tag หรือป้ายบอกตำแหน่งการใช้งานของบล็อกนั้น (อยู่ใน cache หรือไม่) ดังนั้น
Direct Mapping ความยาวของหมายเลขที่อยู่ = (s + w) บิต ปริมาณหน่วยความจำที่สามารถอ้างอิงได้ทั้งหมด = 2s+w words หรือ bytes จำนวนบล็อกทั้งหมด = 2w words หรือ bytes จำนวนบล็อกในหน่วยความจำหลัก = บล็อก จำนวนช่องสัญญาณ cache = 2r = m ช่อง ขนาดของป้ายบอกตำแหน่ง = (s – r) บิต
หมายเลขช่องสัญญาณ Cache หมายเลขบล็อกในหน่วยความจำหลัก Direct Mapping ผลของการกำหนดความสัมพันธ์ของตำแหน่งข้อมูลในหน่วยความจำหลักกับช่องสัญญาณ cache เป็นดังนี้ การนำตัวเลขบางส่วนของหมายเลขที่อยู่มาใช้เป็นหมายเลขช่องสัญญาณ cache ทำให้เกิดการแปลงตำแหน่งแต่ละบล็อกในหน่วยความจำหลักมายัง cache เป็นค่าเฉพาะที่ไม่ซ้ำกัน เมื่อมีการอ่านข้อมูลจากบล็อกในหน่วยความจำหลักมาไว้ที่ cache ตามตำแหน่งที่กำหนด ก็จะต้องเปลี่ยนค่าของป้ายบอกตำแหน่งของข้อมูลให้สอดคล้องกันด้วย เพื่อจะได้สามารถแยกความแตกต่างออกจากบล็อกที่ยังไม่เกิดการอ่านได้ ข้อมูล s-r บิตแรกจะถูกนำมาใช้เป็นป้ายบอกตำแหน่งข้อมูลนี้ หมายเลขช่องสัญญาณ Cache หมายเลขบล็อกในหน่วยความจำหลัก 0, m, 2m, …, 2s - m 1 1, m +1, 2m +1, …, 2s – m + 1 . m - 1 m – 1, 2m -1, 3m – 1, …, 2s - 1
Direct Mapping ตัวอย่างโครงสร้างหน่วยความจำ cache แบบ direct-mapping
หมายเลขช่องสัญญาณ cache หมายเลขที่อยู่เริ่มต้นของบล็อก Direct Mapping รูปด้านบนแสดงตัวอย่างการใช้วิธี direct mapping ซึ่งกำหนดให้ m = 16K = 214 และ i = j mod 214 การแปลงที่อยู่จะได้ผลลัพธ์ดังนี้ สังเกตว่า จะไม่มีบล็อกใด ๆ ที่ถูกแปลงที่อยู่เป็นหมายเลขช่องสัญญาณ cache เดียวกันแล้วมีหมายเลขป้ายบอกตำแหน่งเหมือนกันเลย เช่น บล็อกที่เริ่มต้นด้วยหมายเลขที่อยู่ 000000, 010000, …, FF0000 จะมีค่าของป้ายเลขบอกตำแหน่งเป็น 00, 01, …, FF ตามลำดับ หมายเลขช่องสัญญาณ cache หมายเลขที่อยู่เริ่มต้นของบล็อก 000000, 010000, …, FF0000 1 000004, 010004, …, FF0004 ……………… ………………… 214 - 1 00FFFC, 01FFFC, …, FFFFFC
Direct Mapping สังเกตว่าจะไม่มีบล็อกใด ๆ ที่ถูกแปลงที่อยู่เป็นหมายเลขช่องสัญญาณ cache เดียวกัน แล้วมีหมายเลขบอกตำแหน่งป้ายเหมือนกันเลย เช่น บล็อกที่เริ่มต้นด้วยหมายเลขที่อยู่ 000000, 010000, …, FF0000 จะมีค่าของป้ายบอกตำแหน่งเป็น 00, 01, …, FF ตามลำดับ กระบวนการอ่านข้อมูลจากหน่วยความจำหลักทำงาน ดังนี้ ข้อมูลตำแหน่งที่อยู่ขนาด 24 บิต ถูกส่งมาที่ระบบหน่วยความจำ cache ข้อมูลช่องสัญญาณ cache ขนาด 14 บิต (line number) ถูกนำไปใช้ในการค้นหาตำแหน่งช่องสัญญาณ cache ต่อไป ข้อมูลป้ายบอกตำแหน่ง 8 บิตแรก (tag) จะถูกนำไปเปรียบเทียบกับหมายเลขของป้ายบอกตำแหน่งที่เก็บอยู่ในตำแหน่งช่องสัญญาณ cache ที่พบนั้น ซึ่งถ้าตรงกันก็แสดงว่าข้อมูลบล็อกที่ต้องการนั้นอยู่ใน cache จึงนำข้อมูลสองบิตสุดท้าย (word) มาใช้เลือกข้อมูล (หนึ่งใน 4 ไบท์) ในบล็อกนั้น
Direct Mapping แต่ถ้าข้อมูลป้ายบอกตำแหน่งมีค่าไม่เท่ากัน แสดงว่าข้อมูลในบล็อกนั้น ยังไม่ถูกคัดลอกสำเนาจากหน่วยความจำหลักมาเก็บไว้ใน cache ก็จะนำข้อมูลป้ายบอกตำแหน่งรวมทั้งข้อมูลช่องสัญญาณ cache จำนวน 22 บิตมารวมกัน กลายเป็นตำแหน่งบล็อกข้อมูลในหน่วยความจำหลัก แล้วคัดลอกสำเนามาเก็บไว้ใน cache หมายเลขที่อยู่จริง ๆ ในหน่วยความจำหลักนั้นมาจากข้อมูล 22 บิต และต่อท้ายด้วย 00 ทำให้กลายเป็นหมายเลขที่อยู่เริ่มต้นของข้อมูลในแต่บล็อกขนาด 24 บิต ที่เก็บอยู่ในหน่วยความจำหลัก ข้อดีของ Direct mapping คือ เป็นวิธีที่ง่ายสร้างขึ้นมาใช้งานโดยใช้ต้นทุนต่ำ ส่วนข้อเสียคือ การเปลี่ยนตำแหน่งบล็อกข้อมูลจากหน่วยความจำหลักมาที่ cache นั้นเป็นการกำหนดตำแหน่งคงที่ ดังนั้นถ้าในโปรแกรมเกิดมีการอ้างอิงถึงข้อมูลจากสองบล็อกหรือมากกว่า ข้อมูลทั้งสองบล็อกนั้นจะต้องสลับเปลี่ยนกันถูกคัดลอกเข้ามาไว้ใน cache ที่ตำแหน่งเดียวกันเสมอ ทั้ง ๆ ที่ cache ส่วนอื่นอาจไม่มีข้อมูลอยู่เลยก็ได้ ปรากฏการณ์แบบนี้เรียกว่า “trashing”
Associative Mapping วิธีนี้แก้ปัญหาของ Direct mapping โดยการยินยอมให้หน่วยความจำแต่ละบล็อก สามารถูกอ่านเข้ามาใน cache ช่องใดก็ได้ ในกรณีนี้การแปลงตำแหน่งที่อยู่จะแบ่งออกเป็นเพียงสองส่วนคือ ป้ายบอกตำแหน่ง (tag) และ ตำแหน่งของ word ป้ายบอกตำแหน่งใช้ในการบอกหมายเลขบล็อกของหน่วยความจำหลัก การตรวจสอบว่าบล็อกนั้นอยู่ใน cache หรือไม่ ยังคงใช้วิธีเดิม คือ การเปรียบเทียบค่าของป้ายบอกตำแหน่งที่มากับข้อมูล กับค่าของป้ายบอกตำแหน่งที่เก็บอยู่ใน cache รูปด้านล่างแสดงการทำงานของ Associative mapping สังเกตว่าไม่มีส่วนใดของตำแหน่งที่อยู่ข้อมูลเป็นส่วนที่บอกตำแหน่งใน cache (line number) ดังนั้นจึงไม่มีการตรวจสอบหมายเลขช่องสัญญาณใน cache
Associative Mapping โครงสร้างหน่วยความจำ cache แบบ fully associative
Associative Mapping ค่าต่าง ๆ ในรูปแสดงได้ดังนี้ ความยาวของหมายเลขตำแหน่งที่อยู่ (address length) = (s+w) บิต จำนวน word (หรือ byte) ในหน่วยความจำหลัก = 2s+w words ขนาดของบล็อก = 2w words (หรือ byte) จำนวนบล็อกในหน่วยความจำหลัก = จำนวนช่องสัญญาณใน cache = ไม่มีการกำหนดตายตัว ขนาดของป้ายบอกตำแหน่ง = s บิต
Associative Mapping รูปด้านล่างแสดงการใช้ Associative Mapping ที่อยู่ในหน่วยความจำหลัก(memory address) ประกอบขึ้นจาก ป้ายบอกตำแหน่งขนาด 22 บิต และเลขบอกตำแหน่งไบต์ขนาด 2 บิต รวมเป็น 24 บิต ป้ายบอกตำแหน่งทั้ง 22 บิต (เริ่มจากบิตซ้ายสุด) จะต้องใช้ในการเก็บข้อมูลบล็อกละ 32 บิต สำหรับแต่ละช่องสัญญาณใน cache เช่น Memory address 0001 0110 0011 0011 1001 1100 (binary 24 bits) 1 6 3 3 9 C (hexadecimal) Tag(leftmost 22 bits) 00 0101 1000 1100 1110 0111 (binary 22 bits) 0 5 8 C E 7 (hexadecimal) นั่นคือที่อยู่ที่อ้างอิงในหน่วยความจำหลัก 16339C จะมีหมายเลข tag เป็น 058CE7 ข้อเสีย ของวิธีนี้คือ ความซับซ้อนที่เกิดขึ้นในระหว่างการตรวจสอบป้ายบอกตำแหน่งข้อมูลใน cache ที่จะต้องทำการตรวจสอบพร้อมกันทุกตำแหน่ง
Associative Mapping โครงสร้างหน่วยความจำ cache แบบ associative
Set Associative Mapping เป็นวิธีการผสมที่ได้นำข้อดีของทั้งแบบ direct และ associative มาใช้ ในขณะที่พยายามลดข้อด้อยให้มีผลกระทบน้อยลง ในกรณีนี้ หน่วยความจำ cache จะถูกแบ่งออกเป็นเซ็ตจำนวน v เซ็ต แต่ละเซ็ตประกอบด้วยช่องสัญญาณจำนวน k ช่อง สรุปความสัมพันธ์ได้ ดังนี้ m = v x k i = j modulo v เมื่อ i = หมายเลขเซ็ตใน cache j = หมายเลขบล็อกในหน่วยความจำหลัก m = จำนวนช่องสัญญาณใน chche
Set Associative Mapping ความสัมพันธ์ด้านบนนั้น เรียกเป็นชื่อเฉพาะว่า “k-way set associative mapping” วิธีการนี้จะแปลงที่อยู่ของบล็อก Bj ให้ไปอยู่ในช่องสัญญาณใดก็ได้ในเซ็ต i ของหน่วยความจำ cache โครงสร้างของหมายเลขที่อยู่ประกอบด้วยสามส่วนคือ ป้ายบอกตำแหน่ง(tag), หมายเลขเซ็ต และตำแหน่งใน word หมายเลขเซ็ตมีขนาด d บิต (v = 2d set) ใช้ในการกำหนดเซ็ตที่ต้องใช้ใน cache ส่วนป้ายบอกตำแหน่งขนาด s บิต และข้อมูลในเซ็ต จะนำมาใช้บอกตำแหน่งบล็อกข้อมูลในหน่วยความจำ รูปด้านล่างแสดงการทำงานของ set associative กรณีพิเศษกรณีหนึ่งเรียกว่า fully associative mapping มีขนาดของป้ายบอกตำแหน่งมาก จนต้องทำการเปรียบเทียบกับทุกช่องสัญญาณใน cache
Set Associative Mapping โครงสร้างหน่วยความจำ cache แบบ k-way set associative
Set Associative Mapping แต่ k-way set associative จะมีขนาดของป้ายบอกตำแหน่งที่เล็กกว่ามาก ซึ่งจะทำการเปรียบเทียบช่องสัญญาณเพียง k ช่องในเซ็ตหนึ่ง ๆ เท่านั้น สรุปความสัมพันธ์ได้ดังนี้ ความยาวของตำแหน่งข้อมูล (address length) = s + w บิต ขนาดหน่วยความจำทั้งหมด = 2s+w words หรือ bytes ขนาดของบล็อก = 2w words or bytes จำนวนบล็อกในหน่วยความจำหลัก = บล็อก จำนวนช่องสัญญาณในแต่ละเซ็ต = k จำนวนเซ็ต = 2d = v เซ็ต จำนวนช่องสัญญาณทั้งหมดใน cache = kv = k x 2d ขนาดของป้ายบอกตำแหน่ง = (s – d) บิต
Set Associative Mapping รูปด้านล่างแสดงตัวอย่างการทำงานของ set associative ที่แต่ละเซ็ตประกอบด้วย 2 ช่องสัญญาณ(2-way set associative) หมายเลขเซ็ตขนาด 13 บิตใช้ระบุหมายเลขเซ็ต และหมายเลขบล็อกในหน่วยความจำหลัก ดังนั้นบล็อกหมายเลข 000000,008000, …, FF8000 ของหน่วยความจำหลักจะถูกแปลงให้ไปอยู่ในเซ็ต 0 ใน cache แต่ละบล็อกสามารถถูกอ่านเข้าไปเก็บไว้ในช่องสัญญาณใดของเซ็ต 0 ก็ได้ แต่จะไม่สามารถเก็บไว้ที่ช่องสัญญาณเดียวกันในเซ็ตเดียวกันได้ จากนั้นค่าของป้ายบอกตำแหน่ง ที่ตำแหน่งข้อมูลที่ถูกอ้างอิงจะถูกนำมาเปรียบเทียบกับค่าของป้ายบอกตำแหน่งที่เก็บอยู่ใน cache พร้อมกันทั้งสองช่องสัญญาณ เพื่อค้นหาบล็อกข้อมูลที่ต้องการ
Set Associative Mapping ตัวอย่างโครงสร้างหน่วยความจำ cache แบบ 2-way set associative
Set Associative Mapping ในกรณีที่ v=m และ k=1 จะทำให้วิธีนี้กลายเป็น direct mapping และถ้า v=1 และ k=m ก็จะกลายเป็นวิธี associative mapping การกำหนดให้แต่ละเซ็ตมีสองช่องสัญญาณ(v=m/2 และ k=2) เป็นวิธีการที่นิยมใช้กันโดยทั่วไป ซึ่งสามารถเพิ่มประสิทธิภาพของอัตราการค้นพบข้อมูลใน cache ได้ดีกว่าวิธี direct mapping และถ้าการกำหนดให้แต่ละเซ็ตมีสี่ช่องสัญญาณ (v=m/4 และ k=4) ซึ่งเรียกว่า 4-way set associative ก็จะเพิ่มประสิทธิภาพให้ดียิ่งขึ้นไปอีก โดยที่มีค่าใช้จ่ายเพิ่มขึ้นเพียงเล็กน้อย แต่ถ้าเพิ่มจำนวนช่องสัญญาณต่อเซ็นให้สูงกว่านี้แล้ว ประสิทธิภาพที่ได้รับจะเพิ่มขึ้นเพียงเล็กน้อยเท่านั้น ซึ่งไม่คุ้มค่ากับค่าใช้จ่ายที่เพิ่มสูงขึ้น
Replacement Algorithm เมื่อข้อมูลบล็อกใหม่ถูกอ่านขึ้นมาจากหน่วยความจำ หนึ่งในบล็อกเดิมที่ถูกอ่านเข้ามาไว้ใน cache จะต้องถูกแทนที่ด้วยบล็อกใหม่ สำหรับ direct mapping จะมีช่องสัญญาณเพียงช่องเดียวเท่านั้นที่จะเป็นที่อยู่ใน cache สำหรับข้อมูลแต่ละบล็อก จึงไม่จำเป็นต้องคิดหาวิธีการแทนที่ใด ๆ สำหรับ associative และ set associative จะต้องนำวิธีการสำหรับการแทนที่ (replacement) มาใช้งาน เพื่อตอบสนองความรวดเร็วในการทำงาน วิธีการดังกล่าวจะต้องถูกสร้างขึ้นด้วยฮาร์ดแวร์ วิธีการที่นิยมนำมาใช้กันโดยทั่วไปมี 4 วิธี วิธีที่นิยมกันมากที่สุด คือ Least recently used; LRU
Replacement Algorithm LRU (Least recently used) : จะนำบล็อกใหม่มาแทนที่บล็อกเก่าที่ถูกเก็บไว้ใน cache เป็นเวลานานที่สุด โดยที่มีการนำไปใช้งานน้อยที่สุด สำหรับ 2-way set associative สามารถสร้างขึ้นมาใช้งานได้ง่ายมาก แต่ละช่องสัญญาณในเซ็ตจะมีบิตพิเศษเรียกว่า USE บิต เมื่อมีการอ้างอิงถึงช่องสัญญาณหนึ่งก็จะเปลี่ยนค่า USE ให้เป็น “1” และ กำหนดให้ USE บิตของอีกช่องสัญญาณให้เป็น “0” เมื่อต้องการนำข้อมูลบล็อกใหม่เข้ามาในเซ็ตนั้น ก็จะเลือกให้ช่องสัญญาณที่มีค่า USE เป็น “0” ทั้งนี้แนวความคิดนี้ คาดว่าข้อมูลที่ถูกอ้างอิงถึงในลำดับหลัง มีโอกาสที่จะถูกอ้างอิงมากกว่าข้อมูลที่ไม่ถูกอ้างอิงมาเป็นเวลานานกว่า
Replacement Algorithm FIFO (First-in-First-out) : จะทดแทนบล็อกที่ถูกอ่านขึ้นมานานมากที่สุด LFU (Lease frequently used) : จะทำการทดแทนบล็อกที่ถูกอ้างอิงเป็นจำนวนครั้งน้อยที่สุด การสร้างขึ้นมาใช้งานจำเป็นจะต้องมีตัวนับการใช้งานข้อมูลแต่ละช่องสัญญาณ เพื่อหาช่องสัญญาณที่มีการนำมาใช้งานน้อยที่สุด Random : ทำโดยสุ่มหมายเลขช่องสัญญาณขึ้นมาในแต่ละครั้งที่มีความต้องการเกิดขึ้น ผลจากการสร้างระบบจำลองทดสอบการทำงานพบว่า วิธีสุ่มนี้มีประสิทธิภาพด้อยกว่าวิธีการที่นำข้อมูลเกี่ยวกับกานใช้งานมาพิจารณา
Write Policy ก่อนที่บล็อกข้อมูลใน cache จะถูกแทนที่ด้วยข้อมูลบล็อกใหม่ จำเป็นจะต้องตรวจสอบว่าข้อมูลในบล็อกนั้นถูกแก้ไขเปลี่ยนแปลงไปบ้างแล้วหรือไม่ ถ้าไม่มีการแก้ไขเกิดขึ้นก็สามารถบันทึกข้อมูลบล็อกใหม่แทนที่ได้เลย แต่ถ้ามีการแก้ไขข้อมูลจะต้องมีการบันทึกข้อมูล (write operation) เกิดขึ้นอย่างน้อยหนึ่งครั้งกับข้อมูลนั้น ทำให้จะต้องมีการปรับปรุงข้อมูลในหน่วยความจำหลักให้เหมือนกับข้อมูลใน cache Write policy มีอยู่หลายวิธี ยกตัวอย่างเช่น Write through Write back
Write Policy Write through : เป็นวิธีที่ง่ายที่สุดในการบันทึกข้อมูลลงหน่วยความจำในทันที ทุกครั้งที่มีการบันทึกข้อมูลลงใน cache ก็จะถูกบังคับให้เกิดการบันทึกลงในหน่วยความจำหลักในทันที เพื่อเป็นการรับประกันว่า ข้อมูลทั้งที่อยู่ในหน่วยความจำหลักและที่อยู่ในทุกส่วนของ cache นั้นมีค่าเท่ากับเสมอ ข้อเสียของวิธีนี้ คือ เป็นวิธีที่ทำให้เกิดการส่งข้อมูลผ่านบัส โดยเฉพาะส่วนที่เชื่อมต่อกับหน่วยความจำหลักเป็นอย่างมาก ซึ่งอาจทำให้เกิดเป็นจุดปัญหาคอขวดของระบบขึ้นมาได้
Write Policy Write back : เป็นการบันทึกข้อมูลในภายหลัง ซึ่งช่วยลดจำนวนครั้งในการบันทึกข้อมูลลงหน่วยความจำหลักให้เหลือน้อยที่สุด วิธีนี้จะปล่อยให้มีการปรับปรุงแก้ไขข้อมูลเกิดขึ้นใน cache เท่านั้น ซึ่งจะไปกำหนดค่าของบิตพิเศษเรียกว่า UPDATE บิต เมื่อมีการแก้ไขเกิดขึ้นจริง ถ้าข้อมูลในบล็อกนั้นจะต้องถูกแทนที่ด้วยข้อมูลบล็อกใหม่ ระบบก็จะตรวจสอบ UPDATE บิต และจะทำการบันทึกข้อมูลลงในหน่วยความจำหลัก ก็ต่อเมื่อบิตนี้มีค่าเปลี่ยนแปลงไปจากเดิมเท่านั้น
Line Size ขนาดของบล็อกใน cache (line size) : เมื่อเกิดการอ่านข้อมูลมาจากหน่วยความจำหลัก และใส่เข้าไปใน cache นั้น นอกเหนือจาก word mต้องการแล้วยังได้รับข้อมูลอื่นที่อยู่ติดกับ word นั้น ๆ มาด้วยอีกจำนวนหนึ่ง ถ้าบล็อกมีขนาดใหญ่ขึ้นอัตราการพบข้อมูลใน cache จะเพิ่มขึ้นเป็นระยะเวลาหนึ่ง เนื่องจากกฎการอ้างอิงพื้นที่ใกล้เคียง (locality of reference) ซึ่งกล่าวว่าการอ้างอิงข้อมูลในครั้งต่อๆ ไปจะอ้างอิงข้อมูลเดิมหรือข้อมูลที่อยู่ใกล้เคียงกับที่เดิม ดังนั้นบล็อกที่มีขนาดใหญ่ขึ้นจึงสามารถนำข้อมูลที่เป็นประโยชน์เข้ามาสู่ cache ได้มากขึ้น อย่างไรก็ตามถ้าบล็อกมีขนาดใหญ่ขึ้นเรื่อย ๆ โอกาสที่จะพบข้อมูลที่ต้องการใน cache จะลดลง ถ้าบล็อกมีขนาดใหญ่ขึ้นไปอีก โอกาสที่จะใช้ข้อมูลในบล็อกใหม่ที่พึ่งจะอ่านขึ้นมานั้น กลับน้อยกว่าโอกาสที่จะใช้ข้อมูลจากบล็อกเก่าที่ถูกแทนที่ไปแล้ว ซึ่งสรุปความสัมพันธ์ได้ว่า
Line Size บล็อกทีมีขนาดใหญ่จะลดจำนวนบล็อกที่จะสามารถอ่านเข้ามาเก็บไว้ใน cache เนื่องจากบล็อกใหม่ที่อ่านเข้ามาจะถูกบันทึกแทนที่บล็อกข้อมูลเก่าที่มีอยู่ก่อนหน้า ดังนั้นยิ่งมีจำนวนบล็อกน้อยลงก็จะยิ่งทำให้บล็อกเก่าถูกลบทิ้งเร็วขึ้น ถ้าบล็อกมีขนาดใหญ่ขึ้น ข้อมูลที่อ่านเข้ามาเพิ่มขึ้นนั้นจะยิ่งอยู่ในตำแหน่งที่ห่างไกลจากตำแหน่งข้อมูลที่กำลังถูกเรียกใช้งานมากยิ่งขึ้น ซึ่งเป็นการขัดต่อกฎการอ้างอิงพื้นที่ใกล้เคียง ดังนั้นจึงมีโอกาสที่จะถูกนำมาใช้งาน้อยลง ความสัมพันธ์ระหว่างขนาดของบล็อก และอัตราการค้นพบข้อมูลที่ต้องการใน cache (hit ratio) นั้นมีความซับซ้อนมาก ซึ่งขึ้นอยู่กับลักษณะการทำงานของแต่ละโปรแกรมเป็นหลัก และไม่มีผู้ใดสามารถให้นิยามของความพอดีได้ อย่างไรก็ตาม บล็อกขนาด 8 ถึง 32 bytes นั้นเป็นค่าที่ดีสำหรับงานทั่วไป และบล็อกขนาด 64 ถึง 128 bytes นั้นเหมาะสมกับเครื่องคอมพิวเตอร์ความสามารถสูงสำหนับใช้ในงานวิจัยขั้นสูง
Number of caches ในตอนที่ cache ถูกนำมาใช้งานเป็นครั้งแรก ระบบคอมพิวเตอร์ทั่วไปจะมี cache เพียงระดับเดียว เมื่อไม่นานมานี้ cache หลายระดับได้รับความนิยมนำมาใช้งานทั่วไป การออกแบบ cache หลายระดับมีมุมมองที่สำคัญสองด้านคือ จำนวนระดับของ cache ที่นำมาใช้ และการใช้ cache แบบรวมเป็นหนึ่งเดียวหรือแบบแยกส่วน
Number of caches Cache แบบหลายระดับ : เทคโนโลยีที่ก้าวหน้าขึ้น ทำให้สามารถใส่ cache เข้าไปเป็นส่วนหนึ่งของชิพโปรเซสเซอร์ได้ ซึ่งเรียกว่า on-chip cache เมื่อเปรียบเทียบกับ cache ภายนอกซึ่งจะต้องติดต่อผ่านบัส on-chip cache ช่วยลดงานของโปรเซสเซอร์ในการใช้บัสให้น้อยลง จึงช่วยเพิ่มความเร็วในการประมวลผลของโปรเซสเซอร์ ในระบบที่มี on-chip cache นั้นไม่ได้บังคับให้มีหรือไม่มี cache ภายนอกใช้งาน แต่โดยทั่วไปโดยเฉพาะเครื่องรุ่นใหม่ ๆ มีการนำ cache ทั้งสองชนิดมาใช้งานร่วมกัน และเรียกโครงสร้างประเภทนี้ว่า cache 2 ระดับ โดย cache ระดับที่ 1(L1) หมายถึง on-chip cache และระดับที่ 2(L2) หมายถึง cache ภายนอก
Number of caches เหตุผลที่ต้องมี L2 cache เนื่องจากถ้าไม่มี L2 cache แล้วในทุกครั้งที่โปรเซสเซอร์ไม่สามารถหาข้อมูลได้ L1 cache ก็จะเกิดการอ้างอิงไปที่หน่วยความจำหลัก ผ่านบัสหลักของระบบคอมพิวเตอร์ ซึ่งโดยปกติจะทำให้เสียเวลานานมาก และทำให้ทั้งระบบมีประสิทธิภาพการทำงานลดลง แต่ถ้าทีการนำ L2 cache มาใช้ข้อมูลส่วนหนึ่งจะถูกพบที่นี่ ซึ่งช่วยให้การเข้าถึงข้อมูลนั้นรวดเร็วมากกว่าการเข้าถึงหน่วยความจำหลักโดยตรง
Number of caches Cache แบบ Unified : คือ cache ที่สามารถเก็บได้ทั้งข้อมูลและคำสั่งปนกัน มีข้อดีสองประการคือ สำหรับ cache จำนวนหนึ่ง unified cache มีอัตราการค้นพบข้อมูลที่ต้องการมากกว่า split cache เนื่องจากสามารถรักษาสมดุลระหว่างการเรียกใช้คำสั่งและข้อมูลได้โดยอัตโนมัติ นั่นคือถ้าการอ้างอิงมีแนวโน้มในการเรียกใช้คำสั่งมากกว่าข้อมูล cache ก็จะถูกบันทึกไว้ด้วยคำสั่งในปริมาณที่มากกว่าข้อมูล และในทางกลับกัน cache จะมีข้อมูลมากกว่าคำสั่ง ถ้าโปรแกรมที่กำลังทำงานอยู่นั้นอ้างอิงข้อมูลจำนวนมากโดยใช้คำสั่งซ้ำ ๆ การออกแบบและสร้างจะง่ายกว่าเพราะไม่ต้องแยกชนิดของ cache
Number of caches Split cache : สำหรับเก็บข้อมูลและคำสั่งแยกออกจากกัน มักใช้ในเครื่องคอมพิวเตอร์ประสิทธิภาพสูงประเภท superscalar machine เช่น Pentium และ PowerPC ซึ่งเน้นการประมวลผลแบบขนาน และการดึงคำสั่งล่วงหน้า สำหรับคำสั่งที่คาดว่าจะถูกนำมาประมวลผลในลำดับต่อไป ข้อดีประการหนึ่งของการใช้ split cache คือวิธีนี้ช่วยกำจัดความคับคั่งของ cache ระหว่างหน่วยที่ดึง และแปลความหมายคำสั่ง (instruction prefetcher) และหน่วยที่ทำการประมวลผล(execution unit) ซึ่งเป็นสิ่งสำคัญมากในการออกแบบ pipeline