ข่าวนี้ต้องย้อนกันไกลหน่อยนะครับ เริ่มจากปี 2010 Facebook เปิดตัว HipHop for PHP ตัวแปลภาษา PHP เป็นไบนารีเพื่อเร่งความเร็วของ PHP โดยจะแปลงเป็น C++ ก่อนแล้วค่อยคอมไพล์ปกติอีกครั้ง
HipHop เวอร์ชันแรกมีปัญหาเรื่องความซับซ้อนของโค้ด ช่วงปลายปี 2011 บริษัทเลยออกซอฟต์แวร์เวอร์ชันสองชื่อ HipHop Virtual Machine หรือ HipHop VM (HHVM) โดยใช้เทคนิคด้านการแปลงโค้ดแบบใหม่มาช่วย ซอฟต์แวร์เวอร์ชันสองสามารถทดแทนซอฟต์แวร์เวอร์ชันแรกในบางส่วน แต่ยังไม่สามารถเอาชนะซอฟต์แวร์เวอร์ชันแรกในส่วนของ C++ ในเรื่องประสิทธิภาพได้ (ส่วนนี้เรียกว่า HPHPC)
เวลาผ่านมาอีกสองปี Facebook ออกมาประกาศว่าสามารถพัฒนา HHVM ให้เอาชนะ HPHPC ได้แล้ว (จริงๆ ทำได้ตั้งแต่ปลายปีที่แล้ว) โดยใช้เทคนิคหลายอย่างประกอบกัน เช่น เขียนตัวแปลงโค้ดระดับบนใหม่ชื่อ HHIR ใช้แทนของเดิม
การที่ HHVM สามารถใช้งานแทน HPHPC ได้ทำให้ Facebook สามารถถอด HPHPC ทิ้งได้ทั้งหมดแล้ว และเมื่อสถาปัตยกรรมทางเทคนิคของ Facebook รันอยู่บน virtual machine (ในความหมายของโปรแกรมมิ่ง ไม่ใช่เรื่อง virtualization ของระบบปฏิบัติการ) ทั้งหมดแล้ว ก็จะทำให้ Facebook สามารถเดินหน้าแผนการใช้เซิร์ฟเวอร์เป็น ARM ควบคู่ไปกับ x86 แบบเดิมได้แล้ว และบริษัทก็เตรียมเปิดเผยแผนเรื่อง ARM เพิ่มเติมในเร็วๆ นี้
Facebook แสดงความสนใจเรื่องการใช้เซิร์ฟเวอร์ ARM ผ่านโครงการ Open Compute มาได้สักระยะหนึ่งแล้ว (ข่าวเก่า) โดยทิศทางนี้ก็สอดคล้องกับข่าวลือล่าสุดว่ากูเกิลสนใจออกแบบชิป ARM เอง
ที่มา - HHVM, The Register
Comments
แหล่มมั่ก
HHVM ทำงานเร็วขึ้น ARM ช่วยให้ระบบประหยัดไฟขึ้น
สมองมนุษย์นี่มันสุดยอดจริงๆ
ทำยังไงให้มันเร็วกว่า C++ ?
ไม่ได้เร็วกว่าโปรแกรมที่เขียนด้วย C++ ตั้งแต่แรกครับ แต่เร็วกว่าโปรแกรมที่แปลงจาก PHP เป็น C++ ซึ่งปกติการเปลี่ยนจาก script เป็น native โดยไม่ optimize อะไรเลยจะเพิ่มประสิทธิภาพได้ไม่มาก หากมีการ optimize บ้างอาจได้ขึ้นไป 2-5 เท่า (ปกติภาษาสคริปต์จะช้ากว่าภาษา native ประมาณ 20-30 เท่า) เพราะวิธีการนี้จะไม่เปลี่ยน Object Model ของภาษาสคริปต์ และที่ภาษาสคริปต์ช้าเพราะต้องตรวจสอบประเภทตัวแปรตอน run time
วิธีการที่ได้ผลมากกว่าคือใช้ Just In Time Compiler (JIT) ที่แปลงโค้ดภาษาสคริปต์เป็น macine code ตอน run time ที่เร็วกว่าก็เพราะ JIT จะเปลี่ยนตัว Object Model ของภาษาสคริปต์เป็นตัวแปรพื้น ๆ สำหรับ machine code เลย ทำให้ในทางทฤษฏีมันอาจทำงานได้เร็วพอ ๆ กับพวก native แต่ในทางปฏิบัติมันยังต่างกันอีกพอสมควร
JIT สำหรับภาษาสคริปต์ที่เร็วที่สุดในตอนนี้คือ LuaJIT กับ V8 (JavaScript) ที่ช้ากว่า C อยู่แค่ประมาณ 1.5-5 เท่าซึ่งดีกว่า HHVM ในตอนนี้มาก
ผมมองว่า HHVM จะทำให้ดีเท่า LuaJIT กับ V8 ยาก เพราะ Object Model ของ PHP ซับซ้อนมาก ต่างจาก Lua และ JavaScript
ตอนนี้ intel เริ่มขาสั่นละ google ก็จะไป facebook ก็จะไป ARM
สงคราม compiler กำลังจะมาแล้วในปีหน้า "ช้างชนช้าง!"
ถ้า HPHPC พัีฒนาต่อก็คงตามไม่ทันนะผมว่า ผมว่าฝั่งแรกนิ่งเนื่องจากโดนหยุดทำให้โดนตามทันมากกว่าครับ
HPHPC มันต้องคอมไพ เวลาทดสอบน่าจะยากกว่า เลยไม่อยากเสียเวลาตรงส่วนนี้ไป (เดา)
เนื่องจาก PHP เป็น dynamic type ยังไง HPHPC ก็โดนแซงครับ เพราะ JIT มีข้อมูลประเภทตัวแปรแล้วแปลงเป็น machine code ตอน run time ได้ แต่ HPHPC ทำไม่ได้
หากเป็นพวก static type ก็เป็นอีกเรื่องนะครับ
ลองอ่านดูต้นฉบับได้ครับ Facebook ไม่ได้ไม่พอใจประสิทธิภาพของ HPHPC ครับ แต่โค้ดมันดูแลยากเลยอยากทิ้ง
อันนี้ไม่ได้แย้งครับและรับรู้อยู่ แต่ในความหมายของผมคือถ้าโปรเจคแรกมีกลุ่มที่มีศักยภาพรับไปทำต่อพัฒนาต่ออาจจะตามกันยากขึ้นครับ
ส่วนที่ดูแลยากผมว่าแนวคิดแบบนี้ก็ประมาณ Native vs Managed นั้นละครับ มีหลายๆอย่างที่ต้องแลก