ฉันจะ จำกัด การกำหนดเวลา CPU ใน FreeBSD 12 ได้อย่างไร


1

ผู้ดูแลระบบคนอื่น ๆ จัดการทรัพยากรของ CPU บนโฮสต์หลายคอร์ที่ใช้งานคุกได้อย่างไรเช่นการจัดสรรจำนวนคอร์ที่เหมาะสมสำหรับการใช้งานแบบเอกสิทธิ์เฉพาะโดยคุกเฉพาะและการจองจำนวนคอร์ที่เหมาะสมสำหรับการใช้งานพิเศษโดยระบบโฮสต์

TL; DR

ฉันเรียนรู้วิธีการจัดการโดยใช้ซีพียูrctl(8), /etc/rctl.conf, cpuset(1)และเครื่องมือที่เกี่ยวข้อง

ในการออกกำลังกายฉันกำลังทำงานกับระบบ 8-core ฉันต้องการอุทิศ CPUs 0-3 สำหรับการใช้งานโดยกระบวนการของระบบโฮสต์เท่านั้นและทำให้ CPUs 4-7 พร้อมใช้งานสำหรับกระบวนการที่ถูกจำคุกเพียงอย่างเดียว

ฉันกำลังเผชิญหน้ากับปัญหาพื้นฐานสองประการในภูมิทัศน์จิตของปัญหานี้ อย่างแรกคือเนื่องจากcpusetสามารถใช้ CPU mask เฉพาะกับเป้าหมายที่มีอยู่ (กระบวนการ, คุก, อะไรก็ตาม), ปัจจุบันฉันต้องเริ่มต้นคุกก่อนและจากนั้น จำกัด ชุด CPU ของมัน ซึ่งหมายความว่ากระบวนการที่ถูกจำคุกซึ่งวางไข่ก่อนสร้างcpusetข้อ จำกัด จะทำงานนอกชุด CPU หากกระบวนการที่ถูกจำคุกนั้นยาวนานกระบวนการเหล่านั้นจะต้องเริ่มต้นใหม่หลังจากที่cpusetถูกเรียกใช้เพื่อให้แน่ใจว่าคุกนั้นอยู่ภายในข้อ จำกัด

ประการที่สองด้วยเหตุผลที่คล้ายกันเป็น # 1 มันไม่ชัดเจนสำหรับฉันที่จะได้รับระบบโฮสต์เพื่อ จำกัด การใช้งาน CPU ของตัวเองเพื่อที่จะไม่ใช้ CPU ใด ๆ อีกครั้งเนื่องจากข้อ จำกัด ของชุด CPU จะต้องมีการสร้างขึ้นก่อนที่กระบวนการจะเกิดขึ้นดูเหมือนว่าinit(8)ตัวเองจะต้องเปิดตัวด้วยชุด CPU ที่ถูก จำกัด ฉันไม่พบกลไกใด ๆ ที่จะทำสิ่งนี้

เพื่อแก้ปัญหาแรกที่สามารถเริ่มต้นคุกด้วยcpusetข้อ จำกัดได้ทันทีไวยากรณ์นี้ไม่ทำงานใน/etc/jail.conf:

path                = "/jail/$name";

test {
  jid = 42;
# This is the default value before tweaking:
#  exec.start        = "/bin/sh /etc/rc";
#  restrict this jail to CPU7 only:
  exec.start        = "/usr/bin/cpuset -c -l 7 /bin/sh /etc/rc";
  host.hostname     = "test";
  ip4.addr          = "public|10.160.161.162";
  mount.devfs       = true;
  allow.raw_sockets = true;
  allow.sysvipc     = true;
}

แนวทางที่ไม่สำเร็จอีกวิธีหนึ่งคือการคืนค่าเริ่มต้นexec.startและเริ่มต้นคุกด้วย

# cpuset -c -l 7 service jail start test

เกี่ยวกับปัญหาที่สองคือการ จำกัด ระบบโฮสต์เพื่อป้องกันกระบวนการที่ไม่ถูกจำคุก (jail id = 0) จากการใช้ CPU ที่สงวนไว้สำหรับกระบวนการที่ถูกจำคุก (รหัสคุกของ> 0 ฉันไม่แน่ใจว่าจะเริ่มต้นที่ไหน ดูเหมือนว่าจะมีการ จำกัดinit(8)ตั้งแต่เริ่มแรกดังนั้นกระบวนการใดก็ตามที่เกิดขึ้นจะสืบทอดข้อ จำกัด ของ CPU เดียวกันแฮ็คที่สง่างามน้อยกว่าอาจใช้rctl.confเพื่อสร้างข้อ จำกัด ของ CPU ตามคลาสล็อกอินเฉพาะและกำหนดผู้ใช้ทั้งหมดให้ คลาสล็อกอินดูเหมือนว่าจะยังไม่สามารถ จำกัด daemons ของระบบที่เปิดใช้initก่อนที่จะrctlเริ่มต้นดูไร้เดียงสาrcorder(8)แสดงให้เห็นว่า rctl ทำงานค่อนข้างช้าในกระบวนการเริ่มทำงาน rc ที่ 127 จาก 166 ในระบบของฉัน:

# cd /etc/rc.d
# rcorder * | grep -xn rctl
127:rctl
# rcorder * | wc -l
     166

แนวทางและแนวทางปฏิบัติที่ดีที่สุดที่ได้รับการพัฒนาเพื่อแก้ไขปัญหาประเภทนี้คืออะไร ตอนนี้ฉันกำลังอ่านการสนทนาประวัติศาสตร์จาก 2014เกี่ยวกับปัญหาของการเริ่มต้นinit(8)ด้วย cpuset ที่เฉพาะเจาะจง น่าเสียดายที่โปรแกรมปะแก้ที่เสนอโดย OP ของเธรดนั้นไม่สามารถเข้าถึงได้อีกต่อไป

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.