การใช้ Process Scheduling ใน Linux
บทนำ
ในระบบปฏิบัติการ Linux, Process Scheduling (การจัดกำหนดการทำงานของกระบวนการ) คือกระบวนการที่ระบบปฏิบัติการใช้เพื่อจัดสรรทรัพยากร CPU ให้กับกระบวนการต่างๆ ที่กำลังทำงานในระบบ การจัดกำหนดการนี้มีความสำคัญเพื่อให้กระบวนการต่างๆ ได้รับการดำเนินการอย่างเป็นระเบียบและมีประสิทธิภาพ
ในบทนี้, เราจะเรียนรู้เกี่ยวกับวิธีการทำงานของ Process Scheduling, การจัดการกระบวนการใน Linux, และคำสั่งที่ใช้ในการตรวจสอบและปรับแต่งการจัดกำหนดการ
1. Process Scheduling คืออะไร?
Process Scheduling คือการที่ CPU ถูกจัดสรรให้กับกระบวนการต่างๆ ที่รอการทำงาน กระบวนการทั้งหมดที่ทำงานในระบบจะถูกจัดใน queue และระบบจะเลือกกระบวนการที่ควรได้รับการดำเนินการในแต่ละช่วงเวลา โดยมีการใช้อัลกอริธึมต่างๆ ในการตัดสินใจว่ากระบวนการไหนควรจะทำงานในลำดับถัดไป
1.1 ประเภทของ Scheduling Algorithms
- First-Come, First-Served (FCFS): การจัดกำหนดการแบบ FIFO (First In, First Out) คือกระบวนการที่เข้าคิวก่อนจะได้รับการประมวลผลก่อน
- Shortest Job Next (SJN): ระบบเลือกกระบวนการที่มีการทำงานน้อยที่สุด
- Round Robin (RR): การจัดกำหนดการแบบหมุนเวียน โดยให้แต่ละกระบวนการมีเวลาทำงานเท่ากัน
- Priority Scheduling: กระบวนการจะถูกจัดตามลำดับความสำคัญ
2. การตรวจสอบกระบวนการใน Linux
2.1 การใช้คำสั่ง ps
คำสั่ง ps ใช้ในการดูสถานะของกระบวนการที่กำลังทำงานในระบบ
ps aux
aแสดงกระบวนการของผู้ใช้ทั้งหมดuแสดงข้อมูลรายละเอียดของกระบวนการxแสดงกระบวนการที่ไม่ใช่เทอร์มินัล
ตัวอย่างการใช้:
ps aux | grep process_name
คำสั่งนี้จะแสดงกระบวนการทั้งหมดที่เกี่ยวข้องกับ process_name
2.2 การใช้คำสั่ง top
คำสั่ง top แสดงรายการกระบวนการที่ใช้ทรัพยากรระบบมากที่สุด
top
- คำสั่งนี้จะแสดงกระบวนการทั้งหมดในระบบและสามารถดูข้อมูลต่างๆ เช่น CPU, RAM, และเวลาการทำงานของแต่ละกระบวนการ
2.3 การใช้คำสั่ง htop
คำสั่ง htop เป็นเครื่องมือที่แสดงกระบวนการในรูปแบบที่มีความเป็นกราฟิกมากขึ้น สามารถติดตั้งได้โดยใช้คำสั่ง:
sudo apt install htop
จากนั้นสามารถใช้คำสั่ง htop เพื่อดูสถานะของกระบวนการ
htop
3. การจัดลำดับความสำคัญของกระบวนการ
ใน Linux, กระบวนการแต่ละตัวมีลำดับความสำคัญที่เรียกว่า nice value ซึ่งจะบ่งชี้ว่ากระบวนการนั้นมีลำดับความสำคัญมากน้อยแค่ไหน
3.1 การตรวจสอบ Nice Value
คำสั่ง ps สามารถใช้เพื่อตรวจสอบค่า nice value ของกระบวนการ:
ps -eo pid,comm,ni
pidคือรหัสกระบวนการcommคือชื่อกระบวนการniคือค่า nice value ของกระบวนการ
3.2 การปรับแต่ง Nice Value
การใช้คำสั่ง nice และ renice ช่วยให้สามารถปรับแต่ง nice value ของกระบวนการได้
3.2.1 การใช้คำสั่ง nice
คำสั่ง nice ใช้ในการเริ่มต้นกระบวนการใหม่โดยกำหนดค่า nice value:
nice -n 10 command
-n 10คือการตั้งค่า nice value เป็น 10 (ค่าเริ่มต้นคือ 0)
3.2.2 การใช้คำสั่ง renice
คำสั่ง renice ใช้ในการปรับค่า nice value ของกระบวนการที่กำลังทำงานอยู่:
renice -n 10 -p PID
-n 10คือการตั้งค่า nice value ใหม่-p PIDคือรหัสของกระบวนการที่ต้องการปรับ
4. การใช้ CPU Scheduling
4.1 การตั้งค่า Scheduling Policy
Linux รองรับหลายอัลกอริธึมในการจัดการ CPU scheduling และสามารถเลือกได้ตามความต้องการ เช่น:
- SCHED_OTHER (default): ใช้สำหรับกระบวนการทั่วไป
- SCHED_FIFO (First In First Out): ใช้สำหรับกระบวนการที่ต้องการประมวลผลตามลำดับที่มาถึง
- SCHED_RR (Round Robin): ใช้สำหรับการหมุนเวียนกระบวนการ
- SCHED_BATCH: ใช้สำหรับงานที่ไม่จำเป็นต้องใช้งาน interactive
4.2 การใช้ chrt
คำสั่ง chrt ใช้ในการตั้งค่า policy และ priority ของกระบวนการที่กำลังทำงาน
chrt -f 10 PID
-fกำหนดให้กระบวนการใช้ FIFO scheduling10คือ priority ของกระบวนการ
5. การควบคุม Process Scheduling โดยใช้ systemd
หากระบบ Linux ใช้ systemd ในการจัดการ services, สามารถใช้ systemctl ในการควบคุมการ scheduling ของบริการต่างๆ:
5.1 การตั้งค่าการ Scheduling ของ Service
การตั้งค่า CPU Scheduling ของบริการใน systemd สามารถทำได้โดยการแก้ไขไฟล์หน่วยบริการ เช่น:
[Service]
CPUQuota=50%
CPUQuotaใช้เพื่อจำกัดการใช้ CPU ของบริการ
6. สรุป
การจัดการ Process Scheduling ใน Linux ช่วยให้กระบวนการต่างๆ ได้รับการจัดสรร CPU อย่างเหมาะสมและมีประสิทธิภาพ เครื่องมือเช่น ps, top, nice, renice, และ chrt ช่วยให้ผู้ดูแลระบบสามารถตรวจสอบและปรับแต่งการทำงานของกระบวนการในระบบได้อย่างยืดหยุ่น