บทช่วยสอน PREEMPT_RT บน Linux: การติดตั้ง การทดสอบ และการปรับแต่ง

  • PREEMPT_RT ช่วยลดเวลาแฝงและตอนนี้สามารถกำหนดค่าในเคอร์เนลหลักสำหรับ x86, ARM64 และ RISC-V ได้แล้ว
  • ติดตั้งไฟล์ไบนารี RT (เช่น Debian) หรือคอมไพล์ด้วยสคริปต์ โดยปิดใช้งานตัวเลือกการดีบักที่เพิ่มจิตเตอร์
  • ตรวจสอบด้วย cyclictest/rtla และปรับ IRQ, ลำดับความสำคัญ และการแยก CPU สำหรับเวิร์กโหลดที่สำคัญ
  • รองรับสถานการณ์ขั้นสูง: ไดรเวอร์ NVIDIA ใน RT และ RTVM พร้อม ACRN และ passthrough เฉพาะ

ภาพหลักของบทช่วยสอน PREEMPT_RT Linux

หากคุณทำงานกับระบบที่เวลาตอบสนองเป็นสิ่งสำคัญที่สุด PREEMPT_RT คือส่วนผสมที่เปลี่ยน Linux "ปกติ" ให้กลายเป็นระบบที่พร้อมใช้งานแบบเรียลไทม์ เรากำลังพูดถึงความล่าช้าที่ควบคุมได้ ตัวกำหนดเวลาที่มีความสำคัญอย่างเคร่งครัด และเครื่องมือวิเคราะห์ที่อนุญาตให้ปรับแต่งได้อย่างละเอียดถึงไมโครวินาทีสุดท้ายในเอกสารบทช่วยสอนนี้ คุณจะพบว่า PREEMPT_RT คืออะไร สถานะในเคอร์เนล วิธีการติดตั้งหรือคอมไพล์ วิธีการวัดและเพิ่มประสิทธิภาพ และแม้กระทั่งวิธีตั้งค่าใน VM แบบเรียลไทม์ด้วย ACRN ในรูปแบบที่จัดระบบอย่างดี

นอกเหนือจากทฤษฎีแล้ว ฉันยังนำเสนอคำแนะนำเชิงปฏิบัติที่ได้รับการสนับสนุนโดยสคริปต์ที่ช่วยทำการคอมไพล์เคอร์เนล RT แพ็คเกจที่พร้อมใช้งานในระบบปฏิบัติการยอดนิยม และสูตร Yocto โดยอัตโนมัติ นอกจากนี้ คุณยังจะได้เห็นวิธีการตรวจสอบว่าระบบกำลังทำงานในโหมด RT ตัวเลือกเคอร์เนลใดที่ต้องปิดใช้งานเพื่อหลีกเลี่ยงความล่าช้า และวิธีปรับแต่ง IRQ, CPU และบริการต่างๆเรายังได้ครอบคลุมถึงความเข้ากันได้ของไดรเวอร์ NVIDIA ในสภาพแวดล้อม PREEMPT_RT และกรณีในโลกแห่งความเป็นจริงด้วย Clear Linux บน Intel NUC ที่ออกแบบมาสำหรับงานที่สำคัญต่อภารกิจ

PREEMPT_RT คืออะไร และมันอยู่ตรงไหนในเคอร์เนล?

PREEMPT_RT ถูกสร้างขึ้นเป็นชุดแพตช์ที่เปลี่ยน Linux ให้เป็นระบบเรียลไทม์ โดยมีเป้าหมายเพื่อลดเวลาแฝงและรับประกันความสามารถในการคาดเดาได้ โครงการนี้เริ่มต้นในปี 2005 ภายใต้โครงการ Realtime-Preempt (-rt) ส่งต่อไปยัง Linux Foundation ในปี 2015 และมีบทบาทสำคัญในภาคส่วนต่างๆ เช่น การเงิน เสียง/วิดีโอระดับมืออาชีพ การบิน การแพทย์ หุ่นยนต์ โทรคมนาคม และระบบอัตโนมัติในอุตสาหกรรม.

ตั้งแต่ปี 2019 เป็นต้นมา โค้ดของมันได้รับการส่งเสริมไปสู่เคอร์เนลหลัก ซีรีส์ 6.12 ช่วยให้สามารถกำหนดค่าแบบเรียลไทม์ในเคอร์เนลหลักสำหรับ x86, ARM64 และ RISC-V ได้ โดยปลดล็อกหลังจากการรวมส่วนประกอบ printk ที่สำคัญและการรองรับคอนโซลแบบอะตอมมิกตัวควบคุม UART 8250 มีคอนโซลอะตอม ในขณะที่สถาปัตยกรรมอื่นๆ เช่น ARM และ POWERPC ยังคงต้องรวมส่วนสำคัญเข้าด้วยกัน ดังนั้น การรองรับเต็มรูปแบบอาจมาถึงช้ากว่าเล็กน้อยหากไม่รวมทุกอย่างไว้ในเวลาที่กำหนด

แม้ว่าการสนับสนุนพื้นฐานจะสิ้นสุดใน 6.12 ผู้ดูแลระบบแนะนำให้ปฏิบัติตามแพตช์ PREEMPT_RT ล่าสุดในคิว RT เมื่อต้องการประสิทธิภาพที่ดีที่สุด (สถาปัตยกรรมใหม่ การปรับแต่งกราฟิกที่เร่งความเร็ว และการปรับปรุงที่มักจะมาถึงก่อนในคิวแพตช์เสมอ) ในสภาพแวดล้อมการผลิต ขอแนะนำให้ใช้ RT tree เวอร์ชันเสถียรล่าสุด.

ในทางแนวคิด การเปลี่ยนแปลงที่สำคัญคือความสามารถในการแย่งชิงเกือบทุกส่วนของเคอร์เนล ซึ่งจะช่วยลดหน้าต่างที่ไม่หยุดชะงัก ซึ่งจะแปลเป็นการสั่นน้อยลงและการตอบสนองที่คาดเดาได้มากขึ้นเมื่อเทียบกับเคอร์เนลทั่วไปสิ่งที่ขาดไม่ได้เมื่องานไม่อาจรอได้

การกำหนดค่า PREEMPT_RT Linux

การกำหนดค่าเคอร์เนลที่จำเป็นสำหรับเวลาจริง

การตั้งค่าหลักคือการเปิดใช้งานเคอร์เนลที่สามารถถูกขัดจังหวะได้อย่างสมบูรณ์: CONFIG_PREEMPT_RT ในเคอร์เนลล่าสุด จะปรากฏภายใต้ "การตั้งค่าทั่วไป" และหากคุณไม่เห็นตัวเลือกนี้ การเปิดใช้งาน CONFIG_EXPERT มักจะเผยให้เห็นตัวเลือกนี้ในเวอร์ชันก่อนหน้านี้ PREEMPT_RT อาจอยู่ในเมนู "Preemption Model"

มีการตั้งค่าที่เน้นการดีบักทั่วไปซึ่งจะเพิ่มความล่าช้าและควรปิดใช้งานเมื่อคุณกำลังมองหาประสิทธิภาพแบบเรียลไทม์ ตัวอย่างทั่วไปที่ควรหลีกเลี่ยง: DEBUG_LOCKDEP, DEBUG_PREEMPT, DEBUG_OBJECTS และ SLUB_DEBUGหากคุณเริ่มต้นด้วยไฟล์ .config ของการแจกจ่าย เป็นไปได้ว่าไฟล์ใดไฟล์หนึ่งเหล่านี้ทำงานอยู่ ให้ตรวจสอบและล้างข้อมูลเพื่อลดการสั่นไหว

การสร้างและบูตเคอร์เนลด้วย PREEMPT_RT ไม่แตกต่างจากเคอร์เนลมาตรฐานมากนัก ยกเว้นตัวเลือกที่กล่าวถึงข้างต้น โปรดทราบว่าเครื่องมือสร้างบางอย่างมีการเปลี่ยนแปลงเล็กน้อยโดยเริ่มจาก Linux 6.x และขั้นตอนบางอย่างอาจต้องใช้แพ็คเกจเพิ่มเติม (คุณจะเห็นรายละเอียดเชิงปฏิบัติด้านล่างในระหว่างการรวบรวมอัตโนมัติ)

การติดตั้งอย่างรวดเร็วบนระบบกระจายและการตรวจสอบโหมด RT

การติดตั้งบน Debian:

sudo apt-get install linux-image-rt-amd64

Yocto มีสูตรเฉพาะสำหรับเคอร์เนล RT และอีกอิมเมจที่ใช้สูตรนี้ตามค่าเริ่มต้น โดยทั่วไปผู้ให้บริการเคอร์เนลจะถูกตั้งค่าใน local.conf, bblayers.conf หรือ $MACHINE.conf:

ตัวอย่าง Yocto:

PREFERRED_PROVIDER_virtual/kernel = "linux-yocto-rt"

หากคุณตั้งค่า BSP ที่ต้องการใช้ linux-yocto-rt ตามค่าเริ่มต้น ให้เพิ่มการตั้งค่านี้ลงใน bbappend สำหรับ linux-yocto-rt ด้วย: การดำเนินการนี้จะจำกัดการรองรับเครื่องของคุณและป้องกันปัญหาความเข้ากันได้ที่ไม่พึงประสงค์:

ตัวอย่าง bbappend:

COMPATIBLE_MACHINE:$MACHINE = $MACHINE

หลังจากเริ่มต้นแล้ว ตรวจสอบว่าคุณกำลังอยู่ในเวลาจริงหรือไม่ มองหาตัวบ่งชี้ PREEMPT_RT ใน uname และตรวจสอบ /sys/kernel/realtime:

ตรวจสอบโหมด RT:

uname -a
cat /sys/kernel/realtime   # debe devolver 1

จุดสำคัญอีกประการหนึ่งคือเวลา CPU ที่สงวนไว้สำหรับงานที่ไม่ใช่ RT ซึ่งโดยค่าเริ่มต้นจะป้องกันไม่ให้เธรดเรียลไทม์บล็อกระบบ ปรับขีดจำกัด SCHED_FIFO/SCHED_RR ทั่วโลกเป็นไมโครวินาทีหรือปิดใช้งานหากคุณรู้ว่าคุณกำลังทำอะไรอยู่:

การตั้งเวลา RT:

cat /proc/sys/kernel/sched_rt_runtime_us   # por defecto ~50000 (50 ms por segundo)
# Para desactivarlo (sin reservas para tareas no RT):
echo -1 | sudo tee /proc/sys/kernel/sched_rt_runtime_us

การคอมไพล์และปรับใช้แบบอัตโนมัติด้วยสคริปต์

หากคุณต้องการคอมไพล์และติดตั้งเคอร์เนล RT ก็มีสคริปต์ที่ดำเนินการเกือบจะอัตโนมัติ รวมถึงการเลือกเวอร์ชันและการรองรับเพิ่มเติม (Docker, NVIDIA เป็นต้น) ขั้นตอนทั่วไปเริ่มต้นด้วยการระบุเคอร์เนลปัจจุบันของคุณเพื่อเลือกเวอร์ชัน RT ที่ใกล้เคียง:

ตรวจสอบเวอร์ชันของคุณ:

uname -r   # por ejemplo: 5.15.XX-generic → elegir 5.15.XX-rt-YY o lo más próximo

ตัวอย่างการใช้ที่เก็บข้อมูลพร้อมสคริปต์ในการคอมไพล์และติดตั้ง PREEMPT_RT ในรูปแบบแนะนำบน Debian/Ubuntu ภายในพื้นที่ทำงานภายในเครื่อง ขั้นตอนเหล่านี้จะดำเนินการพึ่งพา ดาวน์โหลดต้นฉบับ และจัดแพคเกจโดยอัตโนมัติ:

cd tu_workspace
git clone https://github.com/2b-t/docker-realtime.git
cd docker-realtime/src
chmod +x install_debian_preemptrt
chmod +x compile_kernel_preemptrt
mkdir tmp && cd tmp
./../compile_kernel_preemptrt

ในระหว่างการดำเนินการ คุณจะสามารถเลือกเวอร์ชันเคอร์เนลและโหมดการติดตั้ง (Debian) ได้ หากการสร้างล้มเหลว ให้ตรวจสอบและปรับไฟล์ .config เช่น ในเวอร์ชัน 6.1.x บางเวอร์ชัน จำเป็นต้องเพิ่มแพ็คเกจและเปลี่ยนเป้าหมายการสร้าง:

# Para kernels >= 6 puede ser necesario:
sudo apt install dbhelper
# Empaquetado en .deb desde el árbol de fuentes del kernel
sudo make -j$(nproc) bindeb-pkg

หลังจากการติดตั้ง ให้สร้างกลุ่มสำหรับสิทธิ์ RT และเพิ่มผู้ใช้ของคุณ วิธีนี้ช่วยให้คุณกำหนดลำดับความสำคัญและล็อกหน่วยความจำได้โดยไม่ต้องใช้สิทธิ์รูทสำหรับคำสั่งทั้งหมด:

sudo addgroup realtime
sudo usermod -a -G realtime $(whoami)

กำหนดค่าขีดจำกัดใน /etc/security/limits.conf เพื่อให้สมาชิก "เรียลไทม์" มีลำดับความสำคัญและ memlock ที่เหมาะสม การตั้งค่านี้ป้องกันความล้มเหลวของการจำกัดผู้ใช้โดยการเพิ่มลำดับความสำคัญหรือบล็อกหน่วยความจำ:

# Edita el fichero de límites con tu editor favorito
sudo editor /etc/security/limits.conf

@realtime soft rtprio 99
@realtime soft priority 99
@realtime soft memlock 102400
@realtime hard rtprio 99
@realtime hard priority 99
@realtime hard memlock 102400

หากคุณพบข้อผิดพลาดส่วนหัวที่หายไปหลังจากติดตั้งเคอร์เนล ให้ตรวจสอบ /usr/src และหากจำเป็น ให้ติดตั้งแพ็กเกจส่วนหัวที่สอดคล้องกัน การเลือกแพ็คเกจ RT ที่ถูกต้องเป็นสิ่งสำคัญ:

cd /ruta/donde/compilaste/el/kernel
sudo dpkg -i linux-headers-*<TAB TAB>   # elige el que termine en -rt

สำหรับไดร์เวอร์ NVIDIA บน RT คุณสามารถบังคับการติดตั้งได้โดยการละเว้นการตรวจจับ PREEMPT_RT วิธีนี้ทำให้ DKMS สามารถคอมไพล์โมดูลบนเคอร์เนลแบบเรียลไทม์ได้ง่ายขึ้น:

export IGNORE_PREEMPT_RT_PRESENCE=1
sudo -E apt-get install nvidia-driver-XXX   # p.ej. XXX=535

หากได้ติดตั้งไดรเวอร์แล้วก่อนการติดตั้งแพตช์ RT ให้ติดตั้งโมดูลสำหรับเวอร์ชันและเคอร์เนลของคุณด้วยตนเอง ตรวจสอบให้แน่ใจว่าคุณชี้ไปที่หมายเลขเวอร์ชันไดรเวอร์ที่ถูกต้องและเคอร์เนล -rt:

ls /usr/src   # identifica nvidia/<versión> y tu versión de kernel
export IGNORE_PREEMPT_RT_PRESENCE=1
sudo -E dkms install nvidia/535.XX.XX -k 5.15.XX-rt

เครื่องมือประเมิน: cyclictest, timerlat และอื่นๆ

ในการวัดคุณภาพ RT เครื่องมือคลาสสิกคือ cyclictest ซึ่งเป็นส่วนหนึ่งของแพ็คเกจ rt-tests ที่มีให้ใช้งานในดิสโทรส่วนใหญ่ ใน Debian/derivatives การติดตั้งนั้นตรงไปตรงมา:

sudo apt-get install rt-tests

ตัวอย่างการทดสอบเปิดเธรดหนึ่งต่อ CPU ด้วย SCHED_FIFO 98 ช่วงเวลา 250 µs และแสดงเวลาแฝงเป็นไมโครวินาที รูปแบบนี้จำลองการโหลด RT เป็นระยะเพื่อตรวจจับการพุ่งสูงและจิตเตอร์:

sudo cyclictest -S -m -p98 -i250

ในเวลาจริงจะมีการใช้คลาสการกำหนดตารางเวลาสองคลาส ได้แก่ SCHED_FIFO และ SCHED_RR FIFO จะดำเนินการด้วยลำดับความสำคัญคงที่ (1..99) จนกว่า CPU จะถูกปล่อยออกหรือเธรดที่มีลำดับความสำคัญสูงกว่ามาถึง RR แบ่งเวลาเมื่อมีเธรดหลายเธรดที่มีลำดับความสำคัญเท่ากันการเลือกคลาสที่เหมาะสมจะทำให้มีความแตกต่างอย่างชัดเจนในคิวงานที่มีความหน่วงต่ำ

เคอร์เนลรวมตัวติดตามที่ช่วยวินิจฉัยความล่าช้าในการปลุก เครื่องมือติดตาม timerlat และ rtla userspace ช่วยให้คุณสามารถดูและเชื่อมโยงความล่าช้าใน IRQ เธรดเคอร์เนล และเธรดผู้ใช้กรณีการใช้งานทั่วไปที่หยุดโดยอัตโนมัติหากเกินขีดจำกัด จะเป็นดังนี้:

การใช้งานทั่วไปของ rtla:

sudo rtla timerlat top -a 4000 -Pf:98
# ... al superar 4000 µs detiene el tracing y muestra posibles causas

ชุมชน OSADL บำรุงรักษาแพตช์ที่มีประโยชน์สำหรับการประเมินเวลาแฝงโดยใช้ฮิสโทแกรมในเคอร์เนลเอง จาก debugfs คุณสามารถอ่านค่า CPU สูงสุดและดูว่างานใดมีความล่าช้ามากที่สุด:

ฮิสโทแกรมความหน่วง:

cd /sys/kernel/debug/latency_hist/timerandwakeup
cat max_latency-CPU*

หมายเหตุเชิงปฏิบัติ: ในบางดิสโทรมีบริการระบบ (เช่น NTP บางตัว) ที่เริ่มต้นด้วยลำดับความสำคัญของ RT และอาจรบกวนเธรดสำคัญของคุณได้ รัน top/ps ที่เรียงลำดับตามลำดับความสำคัญเพื่อค้นหากระบวนการที่มี SCHED_FIFO/RR ที่ใช้งานอยู่ และปรับเปลี่ยนใหม่หากจำเป็น.

การปรับแต่งระบบ: การขัดจังหวะ ลำดับความสำคัญ และการแยกแกนหลัก

โดยค่าเริ่มต้น เธรดขัดจังหวะจะทำงานด้วย SCHED_FIFO ที่ลำดับความสำคัญ 50 คุณสามารถยกระดับความสำคัญของ IRQ ที่สำคัญ (เช่น จาก NIC) และประสานงานกับ NAPI เพื่อลดเวลาแฝงของเครือข่าย:

ตัวอย่างการตั้งค่า IRQ:

# Localiza threads de IRQ y NAPI para tu interfaz (ej. enp4s0)
ps aux | grep enp4s0
# Ajusta prioridades (ejemplos)
sudo chrt -p -f 98 658
sudo chrt -p -f 98 659
sudo chrt -p -f 97 752
sudo chrt -p -f 97 753

หากต้องการอุทิศคอร์ทั้งหมดให้กับเวิร์กโหลด RT คุณสามารถแยก CPU ออกจากตัวกำหนดตารางเวลาทั่วไปและเส้นทางการขัดจังหวะ พารามิเตอร์เคอร์เนลเหล่านี้ในบรรทัดการบูตช่วยลดการรบกวนจากงานระบบ:

isolcpus=2,3 rcu_nocbs=2,3 nohz_full=2,3 irqaffinity=0

กำหนดความสัมพันธ์ IRQ:

echo 4 | sudo tee /proc/irq/<irq_number>/smp_affinity

ในการตรวจสอบผลลัพธ์ ให้ทำการทดสอบซ้ำด้วย cyclictest/rtla และตรวจสอบว่าคิวของแอปพลิเคชันและ IRQ ที่เกี่ยวข้องมีอยู่ร่วมกันโดยมีการแข่งขันน้อยที่สุด โปรดจำไว้ว่าจะมีงานดูแลบ้านบางอย่างอยู่เสมอที่ระบบจะไม่ให้คุณควบคุม 100%.

การปรับใช้ VM แบบเรียลไทม์ด้วย ACRN (Clear Linux บน Intel NUC)

ความเป็นไปได้อีกประการหนึ่งคือการรันแขก Linux แบบเรียลไทม์บนไฮเปอร์ไวเซอร์ ACRN สำหรับ RTVM (Real-Time VM) คุณต้องมีอุปกรณ์ส่งผ่านที่อุทิศให้และอยู่ภายใต้ตัวควบคุม PCI ที่แตกต่างจากตัวควบคุมของ SOS (Service OS)Intel KBL NUC (เช่น NUC7ixDNHE) มีประโยชน์มากเนื่องจากมีไดรฟ์ NVMe และ SATA แยกจากกัน

ตัวอย่างเวิร์กโฟลว์ได้แก่: การติดตั้ง Clear Linux (v29400) บนไดรฟ์ NVMe และ SATA ทั้งสองตัว; กำหนดค่าไดรฟ์ SATA เป็น SOS และการเพิ่มไฮเปอร์ไวเซอร์ไปยังพาร์ติชัน EFI ขั้นตอนต่อไปคือเตรียมและเปิดตัวแขก RT บน NVMe พร้อมด้วยบันเดิลและโมดูลที่เหมาะสม.

ขั้นตอนปฏิบัติ: เพิ่มบันเดิล kernel-lts2018-preempt-rt คัดลอกโมดูล preempt-rt ไปยังดิสก์ NVMe และดึง ID PCI สำหรับการส่งผ่าน (เช่น [01:00.0] และ [8086:f1a6]) แก้ไขสคริปต์ launch_hard_rt_vm.sh เพื่อถ่ายโอน NVMe ไปยังแขกและกำหนดค่าเครือข่ายตามความต้องการของคุณ:

ตัวเลือกเครือข่าย:

# Opción 1: virtio-net
# Opción 2: passthrough de una NIC PCIe

เริ่ม VM แบบเรียลไทม์และตรวจสอบเคอร์เนลด้วย uname -a ภายในเกสต์ เมื่อใช้งานแล้ว ให้ติดตั้ง rt-tests และเรียกใช้ cyclictest เพื่อตรวจสอบพฤติกรรม:

sudo cyclictest -S -m -p98 -i250

หากต้องการเพิ่มประสิทธิภาพเพิ่มเติม ให้ปรับ BIOS/UEFI โดยการปิดใช้งานเทคโนโลยีที่ประหยัดพลังงานแต่ทำให้เกิดความล่าช้า และเปิดใช้งานความสามารถในการจำลองเสมือน คู่มืออ้างอิง BIOS สำหรับแพลตฟอร์มประเภทนี้จะประกอบด้วยสิ่งนี้:

สิ่งของ การปรับ
VMX เปิดใช้งาน
VT-d เปิดใช้งาน
Hyper-Threading พิการ
สปีดสเต็ป พิการ
กะความเร็ว พิการ
ซี-สเตท พิการ
การเพิ่มประสิทธิภาพแรงดันไฟฟ้า พิการ
จีที อาร์ซี6 พิการ
โหมดพลังงานต่ำ Gfx พิการ
เอสเอ จีวี พิการ
การสนับสนุน LPM แบบก้าวร้าว พิการ
การสนับสนุน ACPI S3 พิการ
ASPM ดั้งเดิม พิการ

หมายเหตุ เอกสารอ้างอิง และเอกสารประกอบ

หากคุณต้องการเจาะลึกแนวคิด ระบบย่อย และการเปลี่ยนแปลงต่างๆ ที่ทำให้สามารถใช้โหมด RT ได้ (รวมถึงเค้าโครง ผู้วางแผน และรายละเอียดทางสถาปัตยกรรม) คุณจะพบเอกสารการฝึกอบรมที่ครอบคลุมมาก ตัวอย่างเช่น สไลด์เหล่านี้ที่อุทิศให้กับ PREEMPT_RT อาจมีประโยชน์มากสำหรับคุณ: ดาวน์โหลด PDF

การแจกจ่ายบางส่วนนำเสนอไบนารี RT ที่สร้างไว้ล่วงหน้าหรือการรวมเข้าในระบบการสร้างของพวกเขา เป็นจุดเริ่มต้นที่ดีสำหรับการประเมินโดยไม่ต้องคอมไพล์จากจุดเริ่มต้นและเปรียบเทียบผลลัพธ์กับเคอร์เนลที่กำหนดเองของคุณ.

คำถามที่พบบ่อย: การเปิดใช้งาน การแจกจ่าย และอาร์กิวเมนต์เคอร์เนล

ด้วยการมาถึงของ 6.12 ตัวเลือก PREEMPT_RT ได้ถูกรวมเข้าไว้ในเคอร์เนลหลักสำหรับสถาปัตยกรรมต่างๆ การที่จะเปิดใช้งานตามค่าเริ่มต้นนั้นขึ้นอยู่กับการจัดจำหน่าย โดยบางรายการมีตัวแปร RT ที่แยกจากกัน บางรายก็มีแพ็คเกจเฉพาะ และบางรายก็ปล่อยให้เป็นการสร้างแบบกำหนดเองควรตรวจสอบบันทึกการเปิดตัวของดิสโทรของคุณเสมอ และหากมี "linux-image-rt" หรือไฟล์ที่คล้ายกัน นั่นคือวิธีที่แนะนำให้เริ่มต้น

เกี่ยวกับอาร์กิวเมนต์เคอร์เนล "preempt=full": มันไม่เทียบเท่ากับ PREEMPT_RT และผลของมันขึ้นอยู่กับการกำหนดค่าที่คอมไพล์ หากการส่งคำสั่ง `preempt=full` ในเคอร์เนลล่าสุด (เช่น ตั้งแต่เวอร์ชัน 6.10.6 เป็นต้นไป) ไม่สามารถบูตระบบของคุณได้ ให้ลบพารามิเตอร์นั้นและตรวจสอบการกำหนดค่าเคอร์เนลจริงหากต้องการแบบเรียลไทม์อย่างเคร่งครัด วิธีหนึ่งคือเปิดใช้งาน/กำหนดค่า CONFIG_PREEMPT_RT หรือติดตั้งเคอร์เนล RT สำหรับการแจกจ่ายของคุณ

ตรวจสอบเสมอว่า /sys/kernel/realtime เป็น 1 และ uname แสดง PREEMPT_RT หลีกเลี่ยงการรวมเอาความคาดหวังเรื่อง "ความหน่วงต่ำ" เข้ากับ "เวลาจริง" เนื่องจากทั้งสองอย่างนี้เป็นโปรไฟล์ที่แตกต่างกันและมีวัตถุประสงค์ที่แตกต่างกันหากคุณต้องการ RT แบบฮาร์ด ควรให้ความสำคัญกับเคอร์เนล RT ที่เสถียรและเครื่องมือวินิจฉัย (cyclictest/rtla) ก่อนที่จะแตะอาร์กิวเมนต์เชิงรุกใน bootloader

การตั้งค่าระบบ Linux แบบเรียลไทม์ในปัจจุบันเป็นเรื่องง่ายขึ้นด้วยการมาถึงของ PREEMPT_RT บนสายหลัก เนื่องจากมีแพ็คเกจ สูตร และสคริปต์ที่ช่วยประหยัดเวลาให้คุณได้หลายชั่วโมง เริ่มต้นด้วยการตรวจสอบด้วยไฟล์ไบนารี RT หากมี วัดด้วย cyclictest/rtla ปิดใช้งานตัวเลือกการดีบักที่ส่งผลเสียต่อเวลาแฝง ปรับลำดับความสำคัญ/IRQ และแยก CPU เมื่อเวิร์กโหลดของคุณต้องการหากคุณคอมไพล์ ให้ใช้สคริปต์ที่สร้างไฟล์ .deb และกำหนดขีดจำกัดผู้ใช้สำหรับงาน RT หากคุณใช้ GPU ของ NVIDIA โปรดจำตัวแปร IGNORE_PREEMPT_RT_PRESENCE ไว้ และหากกรณีของคุณต้องการการจำลองเสมือนแบบกำหนดตายตัว ACRN ที่มีการส่งผ่านแบบเฉพาะบน NUC ที่มี NVMe+SATA ถือเป็นรากฐานที่แข็งแกร่งสำหรับ RTVM ที่ตอบสนองได้ทันที