- หลังปรับใช้เลเยอร์แคชใหม่ เวลาแฝงเฉลี่ยแย่ลงจาก 112ms เป็น 122ms แต่ค่ามัธยฐานดีขึ้นจาก 99ms เป็น 54ms และ p99 แย่ลงจาก 309ms เป็น 678ms ทำให้ ตัดสินความสำเร็จหรือล้มเหลวจากค่าสถิติเพียงค่าเดียวได้ยาก
- หลังการปรับใช้ การกระจายของเวลาแฝงแยกจากยอดเดียวเป็นสองยอด และเมื่อซ้อน ฟังก์ชันการแจกแจงสะสม (CDF) กัน จะเห็นว่าประมาณ 140ms เป็นเส้นแบ่ง โดยคำขอที่เร็วดีขึ้น ส่วนคำขอที่ช้าแย่ลง
- ฟังก์ชันการเลื่อน (shift function) ที่แสดงปริมาณการเปลี่ยนแปลงตามเปอร์เซ็นไทล์ รวมถึงกราฟ ridgeline และ heatmap รายวัน เผยให้เห็นขนาดของการปรับปรุงและการถดถอย ตลอดจนกระบวนการที่กลุ่มคำขอช้าขยายตัวระหว่างที่สัดส่วนการปรับใช้เพิ่มจาก 0% เป็น 100%
- เมื่อแบ่งข้อมูลตามผลลัพธ์ของแคชและขนาดการตอบกลับ พบว่า cache hit ของการตอบกลับขนาดเล็กเร็วขึ้น ส่วน cache miss ของการตอบกลับขนาดใหญ่ช้าลงเพราะมี hop เพิ่มเติม จึงยืนยันสาเหตุที่ทำให้เกิดการกระจายแบบสองยอดได้
- หากเลือกดูเฉพาะค่าเฉลี่ยหรือเปอร์เซ็นไทล์ใดเปอร์เซ็นไทล์หนึ่ง ก็สามารถหาเหตุผลสนับสนุนข้อสรุปที่ตรงข้ามกันได้ ดังนั้นต้องดู การกระจายทั้งหมดและกลุ่มย่อย ควบคู่กัน จึงจะนำไปสู่มาตรการอย่างการเพิ่มขนาดวัตถุสูงสุดในแคชหรือการแบ่งการตอบกลับขนาดใหญ่ได้
การปรับปรุงประสิทธิภาพที่มองไม่เห็นในโปรดักชัน
- การปรับปรุงประสิทธิภาพเกี่ยวกับ
lldปรากฏใน benchmark แต่ในแดชบอร์ดโปรดักชันจริงกลับหาการเปลี่ยนแปลงที่ชัดเจนได้ยากเพราะสัญญาณรบกวนในข้อมูล - ความเร็วในการ build อาจแตกต่างกันมากตามตัวแปรหลายอย่าง เช่น cold cache, incremental build, การรันแบบ local/remote, สภาพระบบ และ workload
- จากกรณีที่ใช้ฟังก์ชันการแจกแจงสะสม (CDF) ประเมินประสิทธิภาพการ build ทำให้เห็นความจำเป็นที่จะต้องดูตัวข้อมูลเองหลายวิธี แทนที่จะพึ่งภาพหรือค่าสถิติเพียงอย่างเดียว
- ตัวอย่างทั้งหมดสร้างจาก ชุดข้อมูลสังเคราะห์ ชุดเดียวที่ใช้ seed คงที่ และ สคริปต์ทั้งหมด มี
nix-shellshebang เพื่อให้สามารถสร้างภาพแต่ละภาพซ้ำได้เหมือนเดิมในสภาพแวดล้อม Nix - มีการใช้ AI ในการสร้างข้อมูลและแผนภูมิสำหรับเล่าเรื่อง
การปรับใช้แคชที่ดูเหมือนล้มเหลวเมื่อดูจากค่าเฉลี่ย
- มีการปรับใช้เลเยอร์แคชใหม่เป็นเวลาหนึ่งสัปดาห์เพื่อลดเวลาแฝงของคำขอในเว็บเซอร์วิส แต่เวลาแฝงเฉลี่ยเพิ่มขึ้น 9% จาก 112ms เป็น 122ms
- หากดูเฉพาะค่าเฉลี่ย ก็อาจตัดสินได้ง่ายว่าเป็นการถดถอยที่ควรถอนการเปลี่ยนแปลง เริ่มรับมือเหตุขัดข้อง และทำ postmortem
ข้อมูลชุดเดียวให้ข้อสรุปได้สี่แบบ
- สถิติก่อนและหลังการปรับใช้ชี้ไปคนละทิศทาง
- ค่าเฉลี่ย: 112ms → 122ms, แย่ลง 9%
- ค่ามัธยฐาน p50: 99ms → 54ms, ดีขึ้น 46%
- p95: 224ms → 454ms, แย่ลง 103%
- p99: 309ms → 678ms, แย่ลง 119%
- ค่าเฉลี่ยบ่งชี้การถดถอยเล็กน้อย แต่ค่ามัธยฐานบอกว่าคำขอทั่วไปเร็วขึ้นเกือบสองเท่า ขณะที่ p99 แสดงปัญหารุนแรงว่าคำขอที่แย่ที่สุดช้าลงมากกว่าสองเท่า
- ค่าเฉลี่ยและค่ามัธยฐาน ที่คำนวณจากข้อมูลเดียวกันชี้ไปคนละทิศทาง จึงง่ายที่จะเลือกเฉพาะสถิติที่สนับสนุนการตัดสินของตนเอง
รูปทรงการกระจายเผยให้เห็นคำขอสองกลุ่ม
- ในกราฟความหนาแน่น การกระจายก่อนปรับใช้มี ยอดเดียว แต่หลังปรับใช้แยกเป็นสองยอด
- รูปทรงนี้ช่วยอธิบายความขัดแย้งระหว่างค่าสถิติ แต่กราฟความหนาแน่นก็มีข้อจำกัด
- รูปทรงเปลี่ยนไปตาม พารามิเตอร์การทำให้เรียบ ที่เลือก
- เมื่อพื้นที่ทึบของสองการกระจายซ้อนกัน จะอ่านยาก
- เห็นการมีอยู่ของสองกลุ่ม แต่ระบุตำแหน่งเปอร์เซ็นไทล์อย่างค่ามัธยฐานได้ไม่ทันที
เปรียบเทียบเปอร์เซ็นไทล์ทั้งหมดด้วย CDF
- ฟังก์ชันการแจกแจงสะสม (CDF) แสดง สัดส่วนของคำขอที่เสร็จภายใน x มิลลิวินาทีหรือน้อยกว่า สำหรับเวลาแฝงแต่ละค่า
x - เมื่อซ้อน CDF ก่อนและหลังการปรับใช้ในแผนภูมิเดียว จะเห็นว่าแต่ละเปอร์เซ็นไทล์ขยับอย่างไรในกลุ่มคำขอทั้งหมด
- หลังการปรับใช้ เส้นโค้งเลื่อนไปทางซ้ายในช่วงต่ำกว่า 140ms ทำให้มีคำขอมากขึ้นที่เร็วกว่าเดิม แต่หลัง 140ms กลับมีคำขอมากขึ้นที่ช้าลง
- จุดที่เส้นโค้งสองเส้นตัดกันที่ประมาณ 140ms คือเส้นแบ่งที่ผลของการเปลี่ยนแปลงเปลี่ยนจากดีขึ้นเป็นแย่ลง
- เมื่อ CDF สองเส้นตัดกัน ทิศทางของผลลัพธ์จะขึ้นอยู่กับเปอร์เซ็นไทล์ที่เลือก ดังนั้น ไม่มีเปอร์เซ็นไทล์เดี่ยวใดสรุปการเปลี่ยนแปลงทั้งหมดได้
วัดปริมาณการเปลี่ยนแปลงในแต่ละเปอร์เซ็นไทล์
- CDF แสดงให้เห็นว่าแต่ละช่วงเร็วขึ้นหรือช้าลง แต่ไม่ได้แสดงปริมาณการเปลี่ยนแปลงโดยตรง
- ฟังก์ชันการเลื่อน (shift function) คำนวณส่วนต่างระหว่างเวลาแฝงหลังปรับใช้กับก่อนปรับใช้ในแต่ละเปอร์เซ็นไทล์
p- ต่ำกว่า 0 คือช่วงที่ดีขึ้น
- สูงกว่า 0 คือช่วงที่ช้าลง
- วิธีนี้ทำให้เห็นทั้งทิศทางและ ขนาด ของการเปลี่ยนแปลงในแต่ละจุดของการกระจาย
การถดถอยที่เติบโตขึ้นระหว่างการปรับใช้
- เลเยอร์แคชใหม่ถูกขยายแบบค่อยเป็นค่อยไปจาก 0% เป็น 100% ของทราฟฟิกตลอดหนึ่งสัปดาห์ และหากเทียบเพียงสองจุดเวลาก่อน-หลังการปรับใช้ ก็จะพลาดการเปลี่ยนแปลงระหว่างทาง
- ใน กราฟ ridgeline ที่ซ้อนการกระจายรายวัน จะเห็นว่าเมื่อการปรับใช้ดำเนินไป ยอดหลักของคำขอที่เร็วเลื่อนไปทางซ้าย และยอดที่สองของคำขอที่ช้าปรากฏขึ้นทางขวา
- ในขณะที่ค่ามัธยฐานลดลง จำนวนและเวลาแฝงของคำขอที่ช้ากลับค่อย ๆ เพิ่มขึ้นอย่างเงียบ ๆ
- เวลาแฝงมีลักษณะใกล้เคียงการแจกแจงแบบ log-normal จึงใช้ สเกลลอการิทึม บนแกน x
- หากใช้แกนเชิงเส้น ยอดของคำขอที่เร็วจะพุ่งสูง และคำขอที่ช้าจะกระจายจาง ๆ ทำให้อ่านสองยอดพร้อมกันได้ยาก
- ใน heatmap ที่แสดงคอลัมน์รายวันและปริมาณทราฟฟิกตามเวลาแฝงด้วยสี ก็เห็นกลุ่มคำขอใหม่ปรากฏขึ้นอย่างจาง ๆ เช่นกัน
- หากรวมทั้งสัปดาห์เป็นค่ารวมค่าเดียว การกระจายรายวันทั้งเจ็ดแบบและแนวโน้มการเปลี่ยนแปลงจะหายไป
แยกการกระจายสองยอดด้วย cache hit และ miss
- ในการวิเคราะห์
lldจริง ต้องแบ่งข้อมูลตามขนาดไบนารี เช่น เกิน 50MiB หรือไม่ จึงจะเห็นการกระจายเวลาแฝงแบบสองยอดได้ - ในกรณีสังเคราะห์ของเลเยอร์ใหม่ คำขอแบ่งออกเป็น hit ที่จัดการได้จากแคช และ miss ที่ส่งต่อไปยัง backend พร้อมผ่าน hop เพิ่มเติม
- เมื่อแยก CDF ของคำขอหลังปรับใช้ตามผลลัพธ์ของแคช แต่ละกลุ่มกลับมามียอดเดียว
- cache hit เลื่อนไปทางซ้ายจาก baseline เดิม จึงเร็วขึ้น
- cache miss อยู่ทางขวากว่ามากเพราะต้นทุนของ hop เพิ่มเติม
สาเหตุและมาตรการที่พบจากขนาดการตอบกลับ
- cache miss เป็นเพียงกลไกการทำงานเท่านั้น หากต้องการเข้าใจว่าคำขอใด miss และเพราะเหตุใด ต้องดู ขนาดการตอบกลับ ควบคู่กัน
- แคชจะเก็บวัตถุที่เล็กและถูกใช้บ่อย แต่ object ขนาดใหญ่จะถูกขับออกหรือไม่สามารถเข้าแคชได้ตั้งแต่แรก
- ใน jointplot ที่แยกความสัมพันธ์ระหว่างเวลาแฝงกับขนาดการตอบกลับด้วยสีของ cache hit/miss และรวมการกระจายความหนาแน่นของแต่ละแกน จะเห็นสองกลุ่มอย่างชัดเจน
- กลุ่มการตอบกลับขนาดเล็กและเวลาแฝงต่ำคือ cache hit
- กลุ่มการตอบกลับขนาดใหญ่และเวลาแฝงสูงคือ cache miss
- การกระจายเวลาแฝงแบบสองยอดมีที่มาจากความเป็นสองยอดของการกระจายขนาดการตอบกลับ และสามารถรับมือได้ด้วยการ เพิ่มขนาดวัตถุสูงสุดของแคชหรือแบ่งการตอบกลับขนาดใหญ่
มองการกระจายทั้งหมดให้ไกลกว่ากราฟเดียว
- แผงหรือกราฟเดียวไม่เพียงพอที่จะครอบคลุมสถานการณ์ทั้งหมด และในบางกรณีอาจนำไปสู่การตัดสินที่ผิดพลาด
- ต้องดูข้อมูลเดียวกันด้วยหลายวิธี เพื่อเข้าใจรูปทรงของการกระจาย ผลกระทบตามเปอร์เซ็นไทล์ การเปลี่ยนแปลงตามเวลา กลุ่มย่อย และสาเหตุร่วมกัน
- โดยเฉพาะ CDF มีประโยชน์ในการเปรียบเทียบกลุ่มคำขอหลายกลุ่มพร้อมบรรจุการกระจายทั้งหมดไว้ในแผนภูมิเดียว
ยังไม่มีความคิดเห็น