Ghostty ทุบสถิติเป็นเทอร์มินัลที่แสดงข้อมูลบนจอได้เร็วสุด · cat ไฟล์ 150MB จบใน 575ms
Ghostty เพิ่งประกาศพร้อมตัวเลขที่วัดเองว่าตอนนี้เป็นเทอร์มินัลที่แสดงข้อมูลบนจอได้เร็วที่สุด ความเร็วที่ว่านี้ไม่ใช่แค่เรื่องเปิดไฟล์ใหญ่ แต่เกี่ยวกับความลื่นและอาการหน่วงที่เจอตอน log ไหลรัวและ build พ่น output ทุกวัน

Ghostty คือโปรแกรมเทอร์มินัล หรือหน้าจอที่โปรแกรมเมอร์ใช้พิมพ์คำสั่งคุยกับเครื่อง รุ่นทดลองล่าสุดใช้คำสั่ง cat พ่นไฟล์ขนาด 150MB จนจบในเวลาแค่ 575 มิลลิวินาที ส่วน iTerm2 กับ Terminal ของ macOS รันไป 60 วินาทีก็ยังไม่จบ จนคนทดสอบต้องกดหยุดเอง (cat คือคำสั่งที่ให้เทอร์มินัลแสดงเนื้อหาไฟล์ทั้งหมดบนจอรวดเดียว)
ตัวเลขที่ต่างกันเป็นสิบเท่านี้กำลังชี้ให้เห็นเรื่องที่คนใช้เทอร์มินัลแทบทุกวันไม่เคยสังเกต นั่นคือเทอร์มินัลแต่ละตัวมีความเร็วในการแสดงข้อมูลบนจอต่างกันมาก และความเร็วที่ว่านี้มีชื่อเรียกว่า IO throughput หรือปริมาณข้อมูลที่แสดงบนจอได้ต่อวินาที เรื่องนี้เพิ่งกลับมาเป็นที่พูดถึงเพราะ Ghostty ออกมาประกาศพร้อมตัวเลขที่วัดเองว่าตอนนี้มันแสดงข้อมูลบนจอได้เร็วที่สุด
Ghostty เป็นเทอร์มินัลแบบไหน
Ghostty เป็นเทอร์มินัลที่เน้นสองอย่างพร้อมกันคือเร็วและฟีเจอร์ครบ ทำงานได้หลายระบบปฏิบัติการ โดยเลือกใช้หน้าจอแบบเนทีฟของแต่ละระบบ คือทำให้กลมกลืนกับแอปอื่นบนระบบนั้น แทนที่จะใช้หน้าจอแบบเดียวกันไปทุกที่ แล้วเร่งการแสดงผลด้วย GPU ซึ่งเป็นชิปประมวลผลกราฟิกตัวเดียวกับที่การ์ดจอใช้ นี่คือสิ่งที่หน้าเว็บ Ghostty บอกไว้ตั้งแต่แรก
ส่วนตัวเลขทดสอบความเร็วทั้งหมดที่กำลังเป็นข่าว มาจากการวัดของ Mitchell Hashimoto (@mitchellh) ผู้สร้าง Ghostty เอง ที่โพสต์ผลไว้บน X ซึ่งเป็นชื่อใหม่ของทวิตเตอร์ ข้อสำคัญที่ต้องพูดตรง ๆ ตั้งแต่ต้นคือ ยังไม่มีคนนอกทีมทดสอบซ้ำแบบอิสระ ตัวเลขทุกตัวจึงเป็นของฝั่งคนทำเองล้วน ๆ เวลาอ่านจึงควรคำนึงถึงจุดนี้ด้วย
IO throughput คือความเร็วแบบไหน
พูดง่าย ๆ IO throughput คือ เทอร์มินัลแสดงข้อมูลบนจอได้กี่ไบต์ต่อวินาที ฟังดูเหมือนเป็นเรื่องเปิดไฟล์ใหญ่อย่างเดียว แต่จริง ๆ แล้วมันคือสิ่งที่หลายคนเจอทุกวันโดยไม่รู้ว่ามีชื่อเรียก
ลองนึกถึงจังหวะที่ log ไหลรัว ๆ ตอนรันเซิร์ฟเวอร์ หรือตอน build โปรเจกต์แล้ว output ออกมาเป็นพัน ๆ บรรทัด หรือตอนใช้โปรแกรมแบบ TUI ที่สร้างหน้าจอด้วยตัวอักษรล้วน ๆ บนเทอร์มินัลและอัปเดตหน้าจอใหม่ถี่ ๆ (log คือบันทึกการทำงานที่โปรแกรมพ่นออกมา ส่วน build คือขั้นตอนแปลงโค้ดให้กลายเป็นโปรแกรมที่รันได้) ทั้งหมดนี้ทำให้เทอร์มินัลต้องรับตัวอักษรจำนวนมหาศาลแล้วแสดงขึ้นจอให้ทัน ถ้าเทอร์มินัลแสดงข้อมูลบนจอได้ช้า output จะค้างเป็นช่วง ๆ เลื่อนจอแล้วหน่วง พิมพ์ต่อก็สะดุด งานทั้งกระบวนการต้องรอตามความเร็วของเทอร์มินัลไปด้วย
มีคนแย้งว่าความเร็วในการ cat ไฟล์ใหญ่ไม่เห็นสำคัญ เพราะใครจะมานั่ง cat ไฟล์ 150MB ทุกวัน แต่ประเด็นของการทดสอบนี้ไม่ได้อยู่ที่คำสั่ง cat แต่อยู่ที่การวัดตรง ๆ ว่าเทอร์มินัลรับข้อมูลเข้ามาแล้วแสดงบนจอได้กี่ไบต์ต่อวินาที ตัวเลขนี้บอกได้ว่า TUI หนัก ๆ จะลื่นแค่ไหน และชุดทดสอบก็ไม่ได้ใช้แค่ตัวอักษรอังกฤษล้วน แต่รวมข้อความ unicode หลายภาษาที่มีตัวอักษรแบบกว้างด้วย โดย unicode คือมาตรฐานตัวอักษรที่ครอบคลุมแทบทุกภาษาบนโลก นอกจากนั้นยังมีข้อความที่แทรกโค้ดควบคุมการแสดงผลที่เรียกว่า CSI จำนวนมาก ซึ่งเป็นรหัสสั่งย้ายเคอร์เซอร์ เปลี่ยนสี และจัดรูปแบบบนจอ ทั้งหมดนี้เพื่อวัดให้ครบว่าเทอร์มินัลรับมือ input แต่ละแบบได้ดีแค่ไหน
ตัวเลขที่วัดออกมา

การทดสอบหลักคือการจับเวลา cat ไฟล์ 150MB ที่เป็นตัวอักษรอังกฤษล้วน แล้วดูว่าเทอร์มินัลแต่ละตัวแสดงผลจนจบในเวลาเท่าไร
| เทอร์มินัล | เวลา cat ไฟล์ 150MB |
|---|---|
| Ghostty (nightly) | 575ms |
| Ghostty 1.3.2 (stable) | 1.5s |
| Alacritty | 1.2s |
| Kitty | 1.7s |
| Warp | 3.8s |
| iTerm2 / Terminal ของ macOS | 60 วิยังไม่จบ |
จุดที่ต้องอ่านให้ละเอียดคือ รุ่นที่ทำเวลาเร็วสุด 575ms เป็น Ghostty รุ่น nightly ซึ่งเป็น build ทดลองที่ปล่อยรายวัน ยังไม่ใช่รุ่นที่แนะนำให้คนทั่วไปโหลดไปใช้จริง ส่วน Ghostty 1.3.2 ที่เป็นรุ่น stable หรือรุ่นปล่อยจริง ทำได้ 1.5 วินาที ซึ่งในเทสต์เดียวกันนี้ยังช้ากว่า Alacritty ที่ทำได้ 1.2 วินาทีด้วยซ้ำ พูดง่าย ๆ คือความเร็วที่กระโดดขึ้นนำเจ้าอื่นแบบชัด ๆ เพิ่งมาอยู่ในรุ่นทดลอง ยังไม่ได้อยู่ในตัวที่คนส่วนใหญ่ใช้กันตอนนี้
อีกสองเทสต์ให้ผลในทิศทางเดียวกัน เทสต์แรกคือ cat ไฟล์ 150MB ที่เป็น unicode หลายภาษา Ghostty nightly ทำได้ 536ms และยังเร็วสุดเหมือนเดิม ส่วนอีกเทสต์คือ DOOM-Fire ภาพเปลวไฟสไตล์เกม DOOM ที่สร้างจากตัวอักษรล้วนและอัปเดตหน้าจอถี่มาก ใช้จำลอง TUI หนัก ๆ และวัดผลเป็นเฟรมต่อวินาที ยิ่งมากยิ่งลื่น เทสต์นี้ Ghostty nightly ทำได้ 842fps ขณะที่ iTerm2 กับ Terminal ของ macOS อยู่ที่ 60fps เท่านั้น จากตัวเลขชุดนี้ ผู้สร้าง Ghostty เคลมว่าในการทดสอบทั้งสามแบบ Ghostty เร็วกว่าเทอร์มินัลสายเร็วเจ้าอื่นเกินสองเท่า
เบื้องหลังที่ทำให้เร็วขึ้น

เขาบอกว่าความเร็วที่เพิ่มขึ้นมาจากการ optimize แยกกัน 6 จุด และสัญญาว่าจะเขียนอธิบายรายละเอียดในบทความต่อไป ซึ่งยังไม่ออกตอนที่โพสต์ ตอนนี้จึงมีแค่จุดเดียวที่เล่าไว้แล้ว นั่นคือการเพิ่มสิ่งที่เรียกว่า IO gather thread
thread คือหน่วยการทำงานย่อยที่รันขนานกันอยู่ในโปรแกรมเดียว ตัวใหม่นี้ทำให้ Ghostty หนึ่งหน้าต่างมีเธรดทำงานรวมสามเธรด ปัญหาเดิมคือเวลาข้อมูลไหลเข้ามาหนัก ๆ ระบบจะอ่านข้อมูลจากโปรแกรมที่รันอยู่ได้ทีละนิด เพราะ kernel ซึ่งเป็นแกนกลางของระบบปฏิบัติการทั้ง macOS และ Linux จำกัดให้อ่านท่อส่งข้อมูลได้ครั้งละไม่เกิน 1024 ไบต์ พออ่านได้นิดเดียวก็ต้องสลับไปประมวลผลข้อมูลเพื่อแสดงบนจอ แล้ววนกลับมาอ่านใหม่ ทั้งสองฝั่งเลยสลับกันรอไปมา ความเร็วรวมจึงตก
IO gather thread แก้ตรงนี้ด้วยการแยกงานอ่านข้อมูลไปไว้ในเธรดของตัวเอง คอยรวบรวมข้อมูลจากท่อไว้ในบัฟเฟอร์ ซึ่งเป็นที่พักข้อมูลชั่วคราวก่อน แล้วค่อยส่งต่อให้ส่วนที่แปลงไบต์เป็นภาพบนจอ หรือ VT processing ทำงานรวดเดียว ผลคือตอนโหลดหนัก ส่วนนี้ทำงานได้เกือบเต็มความสามารถโดยไม่สะดุด และเพราะกลไกนี้อยู่ใน libghostty ซึ่งเป็นแกนกลางที่นำไปใช้ซ้ำในโปรแกรมอื่นได้ เทอร์มินัลตัวอื่นที่สร้างบน libghostty แค่อัปเดตก็ได้ความเร็วนี้ตามไปด้วย
มีเกร็ดที่น่าสนใจอีกอย่างในเรื่องนี้ ระหว่างหาวิธีแก้ เขาใช้ LLM เข้ามาช่วย ซึ่ง LLM คือโมเดลภาษาขนาดใหญ่แบบเดียวกับที่ขับเคลื่อน ChatGPT โดยให้ AI ดึงซอร์สโค้ดของ kernel ทั้ง XNU ของ macOS และของ Linux มาช่วยยืนยันสมมติฐาน เขียนโค้ด C สั้น ๆ ไว้ทดสอบไอเดียเร็ว ๆ และใช้เป็นคู่คิดช่วยทบทวนแนวทาง นี่คือภาพของการใช้ AI เป็นเครื่องมือช่วยแกะปัญหายาก ๆ ไม่ใช่ปุ่มวิเศษที่กดแล้วได้คำตอบสำเร็จรูป
เร็วสุดด้าน IO ไม่เท่ากับดีที่สุด
ถึงตรงนี้ต้องแยกให้ชัดสองเรื่อง เพราะเร็วสุดด้าน IO throughput ไม่ได้แปลว่าเป็นเทอร์มินัลที่ดีที่สุด IO throughput เป็นแค่ด้านเดียวในหลาย ๆ ด้านที่คนเลือกเทอร์มินัลสนใจ ยังมีเรื่องฟีเจอร์ ความเสถียร และระบบนิเวศรอบตัวที่ต่างกัน อย่าง Warp มีฟีเจอร์ AI และการจัดกลุ่มคำสั่งเป็นบล็อก ส่วน iTerm2 ก็เก๋าและมีของครบมานาน การจะบอกว่าเทอร์มินัลตัวไหนดีที่สุดจึงขึ้นกับว่าเราให้ความสำคัญกับด้านไหนมากกว่ากัน
อีกเรื่องที่ต้องระวังคือตัวเลข 60 วินาทียังไม่จบ ของ iTerm2 และ Terminal ของ macOS นั่นคือการหยุดเทสต์ที่จงใจอัดงานหนักเกินการใช้งานปกติ ไม่ได้แปลว่าสองตัวนี้จะค้างหรือแครชตอนใช้งานทั่วไป มันแค่ช้ากว่ามากในสถานการณ์สุดขั้วแบบนี้
ถ้าอยากรู้ว่าเทอร์มินัลที่ใช้อยู่ตอนนี้แสดงข้อมูลบนจอได้เร็วประมาณไหน ลองวัดเองได้ง่าย ๆ ด้วยการหาไฟล์ข้อความขนาดใหญ่สักไฟล์ แล้วสั่ง time cat ชื่อไฟล์ เทอร์มินัลจะบอกเวลาที่ใช้แสดงผลจนจบมาให้ ลองสลับไปทำในเทอร์มินัลคนละตัวบนเครื่องเดียวกัน แล้วจะเห็นความต่างที่พูดถึงด้วยตาตัวเอง
สถิติที่เปลี่ยนได้เสมอ
สถิติวันนี้เป็นของ Ghostty รุ่นทดลอง และเรื่องแบบนี้ก็เปลี่ยนได้เสมอ พรุ่งนี้อาจมีเจ้าอื่นแซงขึ้นมาก็ได้ แต่เพราะกลไกที่ทำให้เร็วขึ้นนี้อยู่ในส่วนที่เทอร์มินัลตัวอื่นหยิบไปใช้ต่อได้ สุดท้ายแล้วสิ่งที่น่าสนใจกว่าคำถามว่าใครเร็วสุดตอนนี้ คือเทอร์มินัลทั้งวงการกำลังเร็วขึ้นไปพร้อม ๆ กัน
ที่มา:



