Blog นี้มีต้นเหตุมาจาก CPU Sparc T3 ครับ เจ้า CPU ตัวนี้มันไม่ได้ทำงานแบบ out-of-order แต่มันทำงานแบบ in-order นอกจากนั้นมันยังช้ามากๆ เสียด้วยซ้ำไป ความช้าของมันนั้น ช้ากว่า Pentium M 1.8 GHZ เสียอีกครับ น่าจะประมาณ 1.5 – 2 เท่าได้ จากการทดสอบเล่นๆของผม แต่ดีที่ว่ามันมี 16 core ครับ และแต่ละ core ยังมีอีก 8 hardware thread สรุปแล้ว CPU 1 ตัวมี 128 Thread ช่วยกันทำงาน ซึ่งการทดสอบที่ผมทำไปนั้นมันใช้แค่ 1 ใน 128 thread เท่านั้นเอง แต่ทว่าถ้าอ่านข้างบนดีๆแล้ว แล้วลองมาคิดว่า Application ใดในโลกที่มันสามารถใช้ thread 128 thread ในการ start ได้บ้าง มันคงหาได้ยากมากครับ ซึ่ง app ที่ผมทำงานอยู่ด้วยนั้นมันก็ใช้ได้แค่ thread เดียวในการ start ทำให้มันใช้เวลาไม่ต่ำกว่า 15 นาทีในการ start ตัวมันเอง เทียบกับ IBM Power 7 ที่ใช้เวลาไม่ถึง 3 นาทีในการ start application ตัวเดียวกัน ซึ่งความช้าของมันก็เกิดจากการที่มันไม่มี OoO นั่นเองครับ (เป็นแค่ 1 ในสาเหตุ)

OoO คือรูปแบบการทำงานของ instruction cycle ของ processor นั่นเอง การทำงานของ Processor ก็จะประกอบไปด้วย FDX (Fetch – Decode -Execute)  OoO นั้นจะทำงานตามข้อมูล ที่ถูกป้อนเข้ามา ต่างจาก in-order ก็คือ in-order จะทำงานตามคำสั่งที่ถูกส่งเข้ามา ซึ่งข้อเสียของมันก็คือหากถึงคิวของคำสั่งนั้นแล้วแต่ว่ายังไม่มีข้อมูลให้ทำงาน จะต้องรอการไปอ่านข้อมูลมาเสียก่อนนั้น จึงจะทำงานต่อไปได้ ซึ่งการรอนี้ processor จะหยุดจนกว่าจะได้รับข้อมูลมา แตกต่างจาก OoO ที่คำสั่งจะรออยู่ในคิวจนกว่าการอ่านข้อมูลจะเสร็จสิ้นจึงจะหลุดออกมาจากคิวนั้นได้ ทำให้เมื่อจะต้องมีการ execute processor สามารถทำงานได้ทันที ไม่มีการหยุดรอให้เสียเวลา

ทีนี้มันเกี่ยวข้องยังไงกับ vmstat และ load average

vmstat  เป็นโปรแกรมที่รายงานสถานะของเครื่องคอมพิวเตอร์ เช่นข้อมูลที่เกี่ยวกับ cpu และ memory โดยผมจะสนใจในส่วนของ cpu เท่านั้น การรายงานผลใช้งานของ vmstat รายงานเป็น percent ซึ่งก็เหมือนกันกับในเครื่อง windows ของเรานั่นเอง แต่ใน vmstat จะแบบออกมาเป็นสามส่วน 1. User 2. System 3. I/O

แต่ Load average จะรายงานเป็นเลข จำนวนของ process ที่ค้างอยู่ใน queue ของ processor หากค่าของ load average เกิน 1 แปลว่า processor ถูกใช้งานหมดแล้ว  ปกติค่า load average เกิน 2-3 ก็จะเริ่มทำให้เครื่องของเราช้าลงจนรู้สึกได้แล้ว แต่ปรากฎกว่าใน Sparc T3 load average 80 – 100 แล้ว แต่ vmstat ยังวิ่งอยู่แค่ 50 – 60% เอง ทำไมจึงเป็นอย่างงั้น ผมก็ไม่มีความรู้มากมายนัก จึงได้เพียงแต่เดาว่า เนื่องจากเจ้า T3 เนี่ยมันไม่มี OoO ทำให้การทำงานของมันส่วนใหญ่ถูกใช้ไปกับการรอ execute instruction เสียมากกว่า การทำงานจริงๆ แล้วเราจะทำให้มันใช้งาน 100% ได้หรือไม่ ผมก็คงตอบว่าได้ แต่ performance ที่ได้มานั้นมันจะไม่เท่ากับ 40% ที่เหลืออยู่ เพราะว่าตอนนี้ queue ของ processor มี instruction รออยู่มากเกินพอแล้ว