.

วันพุธที่ 20 เมษายน พ.ศ. 2559

I/O Schedulers คืออะไร ? เครื่องจะเร็วหรือดับ ?



            สวัสดีทักทายทุกคนอีกเช่นเคยครับ วันนี้ผมหวินนั้นไม่ได้มารีวิวแอพพลิเคชั่นใหม่อะไร แต่จะมาพูดเรื่องใกล้ตัวที่หลายๆคนน่าจะเคยผ่านตาคุ้นๆคำว่า I/O Schedulers ตอนใช้แอพควบคุม CPU ต่างๆอย่างเช่น AnTuTu CPU Master, Trickster ModSetCPU เป็นต้นครับ ซึ่งมาเข้าเรื่องกันเลยดีกว่า



ทำไมต้องตั้งค่าค่า  I/O Schedulers ด้วย ?

ตามทั่วไปแล้วทางผู้ผลิตมือถือ/แท็ปเล็ต จะไม่ให้ผู้ใช้ทั่วไปแก้ไขค่าเหล่านี้ได้เพราะอาจส่งผลต่อประสิทธิภาพการทำงานของเครื่อง  แต่อย่างไรก็ตามเราก็ยังสามารถเข้าไปแก้ไขค่านี้ได้หากเครื่องผ่าน Root เครื่องแล้ว ซึ่งการแก้ไขค่าเหล่านี้ก็สามารถช่วยปรับแต่งประสิทธิภาพเครื่องรวมทั้งแบตเตอรี่ด้วยเช่นกันครับ   (Scheduler บางตัวไม่มีมากับเครื่องครับ)

I/O Scheduler คืออะไร ?

Input/Output (I/O) นี่คือชื่อเต็มๆครับ ซึ่งหมายถึง วิธีการที่ระบบปฏิบัติการออกคำสั่งทำงานไปยังพื้นที่จัดเก็บเครื่อง หรือบางทีเราอาจจะเรียกว่า Disk scheduling ได้เช่นกันครับ
ซึ่งจุดประสงค์ของ I/O Schedulers ก็มีหลายอย่างได้แก่
-ลดเวลาที่ต้องใช้จากการเรียกหาข้อมูล Hard disk
-เลือกลำดับความสำคัญตามที่ I/O ตั้งไว้
-แบ่งพื้นที่ส่งข้อมูล (Bandwidth) ขณะที่กำลังเรียกใช้ข้อมูลอื่นอยู่ (Multitasking)

คาดหวังอะไรจากการปรับ I/O Scheduler  ?

-แบตเตอรี่ ที่ใช้ได้ยาวนานขึ้นในตาามปกติแล้ว (หรือบางทีก็เร็วเร็วหวบๆกันนะ ?!)
-ความเร็ว แน่นอนว่าเราทุกคนที่ Root เครื่องลง Kernel เพราะคาดหวังกับสิ่งพวกนี้
-ความเสถียร  โดยบาง Scheduler ที่เราเลือกอาจจะเสถียรหรือไม่เสถียรก็ควรศึกษาให้ดีก่อน
-Multitasking ที่ดีขึ้น โดยตัวนี้ถือเป้นปัจจัยสำคัญของการตั้งค่าเลยก็ว่าได้ครับ บาง Scheduler เหมาะกับใช้ Multitasking ในขณะที่บางตัวเหมาะกับใช้เล่นแอพใดแอพหนึ่งมากกว่า (เล่นเกมกราฟฟิค)
-ความลื่นติดนิ้ว ! แน่นอนว่าคงจะไม่มีใครอยากใช้หน้าจอมือถือที่ภาพกระตุกเป็นช็อตๆหรอกครับการปรับพวกนี้ก็ช่วยได้ (อย่างเห็นผล)

XDA  แหล่งรวม Rom, Kernel และทุกอย่างที่เกี่ยวกับ Android ที่ใหญ่ที่สุด
หน้าที่ของ Scheduler แต่ละตัว
*การทำงานในที่นี้หมายถึงการเรียกเปิดแอพ, คัดลอกไฟล์, Multitasking, อื่นๆ

1.Anticipatory  เป็น Scheduler เกี่ยวกับ Algorithm ตัวหนึ่งที่ทำหน้าที่จัดการพื้นที่เครื่องของเรา แต่โอกาสที่จะเจอค่อนข้างน้อยมากสำหรับมือถือครับ
ข้อดี
-ทำหน้าที่รับอ่านข้อมูลการได้ดีมากโดยจะให้ความสำคัญเป็นอันดับแรกเสมอ
ข้อเสีย
-บางครั้งคำสั่งจากระบบจะใช้ไม่ได้
-ประสิทธิภาพของ Hard drive ที่เขียนข้อมูลความเร็วสูงจะลดลง


2.CFQ (Complete Fair Queuing)  คอยทำหน้าที่รักษาความสมดุลของแต่ล่ะคำสั่งการใช้งานของเครื่องตามแต่ล่ะการใช้งานที่ทำงานอยู่โดยกระจายข้อมูลที่ส่งไปเท่าๆกัน (CPU ทำงานแชร์ๆกัน)
ข้อดี
-มีความสมดุลในด้านประสิทธิภาพ (ค่าปกติของเครื่องส่วนมากครับ)
-เหมาะสมการเครื่องที่มีหน่วยประมวลผลหลายๆตัว
-Multitasking ได้ดี
ข้อเสีย
-บางเครื่องอาจจะใช้เวลานานผิดปกติในการ Media Scanning (เช่นใส่ Sd card ครั้งแรก) เพราะว่า I/O ไม่ได้ออกคำสั่งให้การสแกน Sd card มาเป็นอันดับแรกทำให้การสแกนเสียเวลามาก
-บางเครื่องเกิดอาการดีเลย์หากต้องทำงานหลายๆอย่างพร้อมๆกัน 


3.Deadline หลักการทำงานก็คล้ายๆกับชื่อมันครับ โดยจะพยายามลดช่วงเวลาดีเลย์ของการทำงานที่ใช้อยู่หรือออกคำสั่งให้มากที่สุด (อัพเดทข้อมูลเร็วครับคล้ายๆตอนเราดู Benchmark แล้วมีแสดงว่า Cpu ใช้งานหนักแค่ไหน) ซึ่งจะทำงานทีล่ะอย่างโดยพยายามทำแต่ล่ะอย่างให้เร็วที่สุดเท่าที่จะทำได้
ข้อดี
-ดีเลย์น้อยมากเกือบจะเป็น Realtime ที่ประมวลผลเลย
-เหมาะแก่การทำ Database วิเคราะห์
-ใช้งานกับ Benchmark ได้ดีเพราะแสดงผลแบบแทบจะ Realtime
-ทำงานเหมือนกับ Noop เหมาะกับอุปกรณ์ใช้ Solid State Drive (เพราะส่งข้อมูลทีล่ะลำดับเร็วครับ)
ข้อเสีย
ถ้าเกิดมือถือทำงานหนักเกินไปเครื่องจะดับหรือเกินอาการหลอนๆขึ้นมาทันที (Overclock สูงไป, ร้อนไป)



4.Row  (แนะนำ) ถือเป็นตัวหนึ่งที่ผู้พัฒนามือถือต้องเลือกมาคิดไว้ก่อนเลย เพราะสำหรับระบบมือถือแล้วพวกเรานั้นมักจะใช้เล่นมากกว่าเป็นส่วนใหญ่ ทำให้ I/O ตัวนี้ออกแบบมาอ่านข้อมูลได้เร็วแต่ขณะเดียวกันก็ลดความเร็วการเขียนข้อมูล 
ข้อดี
-UI เครื่องหรืออะไรต่างๆลื่นขึ้น (ผมใช้ตัวนี้อยู่ครับหลายๆท่านแนะนำมา)
-เปิดเครื่องและแอพพลิเคชั่นเร็วขึ้น
ข้อเสีย
-ไม่เหมาะกับ Multitasking หนักๆ
-การเขียนข้อมูลช้าลง


5.SIO หรือก็คือ Simple I/O นั่นเองครับ โดยมันก็มีหน้าที่ตามชื่อมันเช่นกัน โดยจะพยายามเฉลี่ยๆการทำงานทั่วไปให้ดีเลย์ต่ำเท่าที่ทำได้ แต่จะไม่มีการเรียงลำดับความสำคัญของงานที่ทำอยู่ (คล้ายๆ CFQครับ)
ข้อดี
-เสถียร
-ไม่กินแบตเตอรี่
ข้อเสีย
-เขียนข้อมูลช้า
-อ่านข้อมูลช้า


6.SIOPLUS เป็นตัวต่อยอดจาก SIO โดยการเขียนและอ่านข้อมูลจะดีขึ้นจากตัวเดิม
ข้อดี
-การเขียนและอ่านข้อมูลดีกว่า SIO ตัวเก่า
ข้อเสีย
-ประสิทธิภาพยังไม่ค่อยแน่นอน
-ไม่เจอใน Kernel ทั่วไป


6.Noop  ถ้ามีการใช้งานใดๆเกิดขึ้น Noop จะพยายามใช้ CPU ให้น้อยที่สุด
ข้อดี
-ประหยัดแบตเพราะ CPU ทำงานน้อย
ข้อเสีย
-ลดประสิทธิภาพทำให้เครื่องช้า


7.BFQ จะให้ความสำคัญกับงานที่เกี่ยวข้องกับพื้นที่จัดเก็บเป็นส่วนมาก
ข้อดี
-ตอนย้ายไฟล์ด้วยสาย USB จะเร็วกว่าปกติ
ข้อเสีย
-ใช้งาน Benchmark ไม่ดี


8.VR
ข้อดี
-การข้อมูลดีขึ้นกว่าปกติ
ข้อเสีย
-บางครั้งการทำงานของ Scheduler เองก็ไม่ได้ผล
-บางครั้งไม่เสถียร


8.ZEN  เป็น I/O ที่ต่อยอดมาจาก VR
ข้อดี
-ถือเป็น I/O ที่ดีตัวหนึ่งสมดุล
-เสถียรกว่า VR
ข้อเสีย
-บางครั้งการทำงานของ Scheduler เองก็ไม่ได้ผล
-บางครั้งไม่เสถียร


9.FFIOPS หรือชื่อ Fair IOPS โดยตัวนี้ยัวไม่นิยมใช้แพร่หลายแต่ได้ผ่านการปรับแต่งมาเป็นพิเศษเพื่อแก้ไขข้อเสียบางจุดของ CFQ
ข้อดี
-ประสิทธิภาพการทำงานใน Benchmark สูงกว่าปกติทั้งด้านอ่านและเขียนข้อมูล
-เปิดเครื่องและการทำงานของแอพพลิเคชั่นเร็วขึ้น
-แบตเตอรี่อึด
ข้อเสีย
-แทบจะไม่พบเจอใน Kernel ไหนเลย
-บางครั้งอาจจะกระตุก
-ไม่เหมาะกับการใช้ Multitasking หนักๆพร้อมๆกัน


10.FIFO หรือชื่อ First in first out ทำหน้าที่ตามตัวมันเองเลย คืออะไรมาก่อนไปก่อนมาหลังไปหลัง
ข้อดี
-พยายามทำงานด้วย CPU ที่น้อยที่สุดเท่าที่จะทำได้ (ประหยัดแบตเตอรี่)
-ใช้เป็น DB system ได้ดี
ข้อเสีย
-ประสิทธิภาพช้าลงเพราะ CPU ทำงานไม่เต็มที่


I/O Read ahead cache คืออะไร ?

ถ้าหากใครลง Custom rom/ Kernel มาแล้วก็น่าจะเคยผ่านหูผ่านตากันบ้างครับซึ่งมันคือคือไฟล์ Cache ที่เก็บไว้หลังจากเราพึ่งใช้งานไฟล์นั้นไป (คล้ายๆ Ram) ซึ่งการที่มีไฟล์นี้อยู่นั้นทำให้เราเข้าไปใช้งานได้ทันทีไม่ต้องรอเรียกโหลดข้อมูลใหม่โดยปกติแล้ว Android จะตั้งไว้ที่ 128 KB ซึ่งถ้ายิ่งมาก ก็แสดงว่า Cache ยิ่งใหญ่อาจจะทำให้เครื่องดีเลย์ได้ได้หากตัวเครื่องมีความเร็วไปสอดคล้องกับค่า Read ahead cache ครับ




*(LG optimus 4x ตั้งไว้ที่ 2048KB จากเครื่องปกติ แต่บางคนใน XDA แนะนำว่าตั้งที่ 3072 KB จากที่ลองตั้งแล้วก็ไม่พบปัญหาใดๆครับ)

ใช้งานอย่างไร ?

จากทั้งหมดที่ผมได้กล่าวไปสิ่งหนึ่งที่ขาดไมไ่ด้เลยกคือต้อง "Root เครื่อง" สำหรับแอพที่ใช้ควบคุมได้ดีนั้นมีหลายตัวเช่น Antutu, Cpu Control และอื่นๆแต่ที่ดีที่สุดสำหรับผมคือ

Trickster Mod ควบคุมได้เฉียบ 10/10

โดยตัวนี้ถือว่าครอบคลุมทุกด้านรองรับถึง Overclock GPU, Voltage ด้วย (Kernel ต้องรองรับ) ถือว่าหาได้ยากครับสำหรับแอพที่รองรับ นอกจากนั้นยังฟรีอีกด้วย 

Downlaod : คลิก

อะไรเหมาะกับเรา ?

ซึ่งจากที่ผมบอกไปก็ได้ครอบคลุม I/O ของหลายๆ Kernel กันไปแล้วครับ ซึ่งถ้าถามว่าอันไหนดีสุด ? ผมคิดว่าน่าจะเป็นที่ตัวเราเองว่าเราชอบอะไรมากกว่า อย่างตอนนี้ตัวผมใช้ ROW เพราะรู้สึกว่าเป็นกลางและตรงกับการใช้งานของผมมากที่สุด เพราะตัวผมเป็นคนเล่นเกมเป็นหลัก ไม่เน้น Multitasking ทำให้ตัวนี้จึงตอบโจทย์ได้ดี  ดังนั้นหากเราจะใช้อะไรก็ให้ลองไปเลยครับ ว่าตัวเราชอบใช้งานแบบไหนกันแน่ สุดท้ายนี้ผมก็หวังว่าทุกๆคนคงจะได้ประโยชน์บ้างจากบทความนี้

                  ที่สำคัญต้องขอขอบคุณ XDA, GS Studio ถ้าหากไม่มีข้อมูลดีๆนี้จากพวกเขา ผมเองก็คงไม่สามารถที่จะเขียนบทความนี้ได้เช่นกันครับ

ขอบคุณข้อมูลดีๆจาก XDA, GS STUDIO
http://androidmodguide.blogspot.com/p/io-schedulers.html
http://forum.xda-developers.com/showthread.php?t=1989824
Thank you for your information !
ต้นฉบับโดย GS STUDIO
แปลภาษาไทยโดย หวิน
*เป็นการแปลบทความเชิงลึกครั้งแรก ยินดีรับคำแนะนำเพื่อปรับปรุงครับ
**แบ่งปันทุกคนได้ฟรี !

ปล. ถ้าเพื่อนๆ พี่ๆ อ่านแล้วรู้สึกเป็นประโยชน์อยากให้กำลังใจก็เพียงกด โฆษณาหรือแบนเนอร์ในเว็บได้เลยครับ ผมก็ได้รายได้เล็กน้อยจากนี่แหละจ้า