คำถามติดแท็ก cgroups

Linux cgroups (กลุ่มควบคุม) อนุญาตให้มีการ จำกัด และการบัญชีสำหรับทรัพยากรบนระบบรวมถึง CPU หน่วยความจำและบล็อก I / O

1
วิธีใช้ cgroups เพื่อ จำกัด กระบวนการทั้งหมดยกเว้นรายการที่อนุญาตให้ใช้กับ CPU ตัวเดียว
มีคำแนะนำเกี่ยวกับกลุ่ม cg จาก Red Hatซึ่งอาจเป็นประเภทที่มีประโยชน์ (แต่ไม่ตอบคำถามนี้) ฉันรู้วิธี จำกัด กระบวนการเฉพาะกับ CPU เฉพาะในระหว่างคำสั่งเพื่อเริ่มกระบวนการนั้นโดย: ก่อนอื่นให้ใส่ * ต่อไปนี้ใน/etc/cgconfig.conf: mount { cpuset = /cgroup/cpuset; cpu = /cgroup/cpu; cpuacct = /cgroup/cpuacct; memory = /cgroup/memory; devices = /cgroup/devices; freezer = /cgroup/freezer; net_cls = /cgroup/net_cls; blkio = /cgroup/blkio; } group cpu0only { cpuset { cpuset.cpus = 0; cpuset.mems …

4
sandboxing ที่ปลอดภัยที่สุดที่เป็นไปได้ง่ายที่สุด (ต้องการทรัพยากรที่ จำกัด )
ฉันกำลังทำงานในโครงการที่ใช้การจำลองแบบกระจาย: โค้ดโดยพลการถูกดำเนินการบนหลายโหนดและผลลัพธ์จะถูกรวบรวมและรวมในภายหลัง แต่ละโหนดเป็นอินสแตนซ์ของเครื่องเสมือน Ubuntu Linux และเรียกใช้กระบวนการหลักซึ่งดูแลการส่งต่อรหัสที่จะถูกดำเนินการไปยังกระบวนการของผู้ปฏิบัติงานจำนวนมาก (1 สำหรับแต่ละคอร์) คำถามนี้เกี่ยวกับวิธีการตรวจสอบให้แน่ใจว่าผู้ปฏิบัติงานแต่ละคนทำงานในสภาพแวดล้อมแบบ sandbox โดยไม่ต้องหันไปใช้อินสแตนซ์ของเครื่องเสมือนสำหรับแต่ละคน ข้อกำหนดที่แน่นอนสำหรับคนงานคือ: fs : ไม่มีสิทธิ์ในการเขียนสิทธิ์แบบอ่านอย่างเดียวถูก จำกัด ไว้ที่ไดเรกทอรีเดียว (และโฟลเดอร์ย่อย) สุทธิ : อนุญาตการสื่อสารในท้องถิ่นเท่านั้น (IPC, TCP, อะไรก็ตาม ... ) mem : ขีดสูงสุดในการใช้งานหน่วยความจำ (ไม่มีหน่วยความจำ swap) ฆ่าถ้าเกินขีด จำกัด mem cpu : อนุญาตให้ 1 คอร์เท่านั้น, ฆ่าถ้าเกินเวลาที่กำหนด ไม่ควรมีข้อ จำกัด อื่น ๆ : ผู้ปฏิบัติงานควรสามารถโหลดไลบรารีไดนามิก (จากโฟลเดอร์แบบอ่านอย่างเดียว), วางไข่เธรดหรือกระบวนการใหม่, เรียกฟังก์ชันระบบ, ecc …

1
ปิดการแลกเปลี่ยนสำหรับกระบวนการเดียวกับกลุ่ม cg หรือไม่
ฉันต้องการปิดการแลกเปลี่ยนสำหรับกระบวนการเดียวเท่านั้น Swap ควรทำงานได้ตามปกติสำหรับกระบวนการอื่น ฉันจะใช้สิ่งนี้กับกลุ่ม cg ได้อย่างไร

3
วิธีการสร้างกลุ่มผู้ใช้ด้วย systemd
ฉันใช้lxcตู้คอนเทนเนอร์ที่Arch Linuxไม่ได้รับสิทธิพิเศษมา นี่คือข้อมูลพื้นฐานของระบบ: [chb@conventiont ~]$ uname -a Linux conventiont 3.17.4-Chb #1 SMP PREEMPT Fri Nov 28 12:39:54 UTC 2014 x86_64 GNU/Linux มันเป็นเคอร์เนลที่กำหนดเอง / คอมไพล์ด้วยuser namespace enabled: [chb@conventiont ~]$ lxc-checkconfig --- Namespaces --- Namespaces: enabled Utsname namespace: enabled Ipc namespace: enabled Pid namespace: enabled User namespace: enabled Network namespace: enabled Multiple …

2
การควบคุม IO แบบบล็อกตามน้ำหนักสำหรับ VMs
ฉันใช้ KVM เพื่อจัดการเครื่องเสมือนของฉัน ฉันพยายาม จำกัด ทรัพยากรที่มีให้สำหรับ VMs ฉันสามารถ จำกัด CPU และหน่วยความจำที่จัดสรรสำหรับ VMs โดยใช้ libvirt / cgroups ตอนนี้ฉันต้องการควบคุมเวลาดิสก์ที่จัดสรรให้กับ VM แต่ละเครื่องโดยใช้น้ำหนักบางอย่าง ฉันดูการควบคุม blkio จากกลุ่ม cg เนื่องจาก VM เป็นเพียงกระบวนการลีนุกซ์ฉันจะสามารถใช้กลุ่ม cg ได้ แต่ฉันไม่แน่ใจว่ามันจะทำงานกับ IO แบบอะซิงโครนัสหรือไม่ ถ้าไม่มีใครสามารถแนะนำทางเลือกที่ดีได้หรือไม่?

1
ใช้ Linux cgroups เพื่อปรับสมดุลประสิทธิภาพของ CPU
ฉันมีระบบ Linux แบบดูอัลคอร์สองระบบติดตั้งโดยใช้ Linux cgroups ที่มีเคอร์เนลค่อนข้างเร็ว หนึ่งกำลังทำงาน Debian Squeeze, Ubuntu อื่น ๆ 11.04 Natty Narwhal ฉันได้รับภาระซีพียูกับ cgroups ทำงานได้ดีขึ้นเล็กน้อยในระบบ Debian แม้จะมีเคอร์เนลรุ่นเก่า แต่มันไม่เหมาะกับทุกสิ่งและความแปลกประหลาดที่ฉันถามเกี่ยวกับที่นี่เกิดขึ้นกับทั้งสองระบบ หากคุณอ่านการจัดการทรัพยากรใน Linux ด้วยกลุ่มควบคุมจะมีตัวอย่างแสดงวิธีการทำให้เกิดปัญหาอีกครั้ง นี่คือเวอร์ชั่นอูบุนตู (เรียกใช้ด้วยรูท): cd /sys/fs/cgroup/cpu [On Debian Squeeze start at /mnt/cgroups/cpu instead] mkdir low high echo 512 > low/cpu.shares echo 2048 > high/cpu.shares yes low > /dev/null …

1
cgroups โต้ตอบกับกระบวนการที่ไม่จัดกลุ่มได้อย่างไร
ฉันมี 3 กระบวนการในเครื่องแกนเดียว แต่ละขั้นตอนเหมือนกันและเผา CPU ให้เร็วที่สุดเท่าที่จะทำได้ สองของพวกเขา ( AและB) ถูกเปิดตัวด้วย cgexec ในกลุ่มที่แยกจากกันโดยมีการแชร์ตั้งไว้ที่ 512 และ 512 และที่สาม ( C) เปิดตัวเป็นประจำไม่ใช่ cgexec เมื่อทุกอย่างพร้อมใช้งานCได้รับ 66% ของ CPU ในขณะที่AและBแบ่ง 33% ถ้าฉันฆ่าCแล้วAและBจะได้รับ 50% ในแต่ละ (ตามคาด) ทำไมถึงCได้ 66% ฉันคาดว่าจะได้ 33% ต่อสถานการณ์นี้หรืออาจจะ 50% (C) 25% (A) และ 25% (B) 66% จะCไม่ได้ผลไม่ว่าฉันจะทำคณิตศาสตร์อย่างไร โดยทั่วไปฉันต้องการเข้าใจว่ากระบวนการเปิดตัวโดยไม่ต้องcgexecโต้ตอบกับกระบวนการที่เปิดตัวcgexecเมื่อมันมาถึงการแบ่งปันทรัพยากร (โดยเฉพาะ CPU แต่คำตอบทั่วไปจะได้รับการชื่นชมมากขึ้นถ้ามันไม่ซับซ้อนเกินไป)
12 cgroups 

4
การจัดการกลุ่ม cg ต้องการการเข้าถึงรูตหรือไม่?
ฉันพยายามทำงานกับกลุ่มควบคุมในระบบปฏิบัติการสองระบบ (Ubuntu และ CentOS) มีข้อกังวลเล็กน้อยที่ฉันอยากจะถาม ฉันพยายามสร้างกลุ่มควบคุมโดยใช้cgcreateคำสั่งและดูเหมือนว่าต้องมีการเข้าถึงรูทบนเครื่อง ตัวอย่างทั้งหมดที่ฉันเห็นมาแล้วไม่ได้พูดอะไรเกี่ยวกับการเป็นผู้ใช้รูทสำหรับการสร้างหรือแก้ไขกลุ่มควบคุม จำเป็นหรือไม่ที่จะต้องเป็นผู้ใช้รูท? เป้าหมายสุดท้ายคือการเขียนแอปพลิเคชัน C ++ ที่สร้างและจัดการกลุ่มควบคุมเพื่อควบคุมทรัพยากรโดยใช้ libcgroup API แต่แอปพลิเคชัน C ++ จะไม่ถูกเรียกใช้โดยผู้ใช้รูทใด ๆ อาจเป็นผู้ใช้ทั่วไปก็ได้

2
อะไรคือผลกระทบของลำดับความสำคัญและนโยบายของเธรดใน cpuset ที่ไม่มีการควบคุม
ฉันมีระบบลีนุกซ์ที่เราใช้ cgroups เพื่อสร้างสอง cpu_exclusive cpusets, A และ B และที่ที่เราโอนย้ายเธรดผู้ใช้ทั้งหมดและเคอร์เนลเธรดที่ไม่ได้ผูกทั้งหมดไปยัง cgroup ที่แนบกับ cpuset A สิ่งที่ทำงานใน cpuset A มีนโยบายที่แตกต่างกัน และลำดับความสำคัญที่แตกต่างกันและมีหลายเธรดที่ทำงานอยู่ใน cpuset A มากกว่าที่มีแกนใน cpuset A นอกจากนี้ยังมีโพรเซสที่ใช้งานอยู่จำนวนเล็กน้อยที่เชื่อมต่อกับ cpuset B ซึ่งจำนวนเธรดผู้ใช้ทั้งหมดในกระบวนการเหล่านี้ไม่เคยมากกว่าจำนวนคอร์ที่มีเฉพาะใน cpuset B เป้าหมายคือเพื่อป้องกันงานสำคัญเหล่านี้ที่ทำงานใน cpuset B จากกิจกรรมอื่น ๆ บนเครื่องและเพื่อลดความหน่วงในการประมวลผล ในการตั้งค่าเช่นนี้นโยบายการกำหนดเวลา / ลำดับความสำคัญของเธรดผู้ใช้ที่ทำงานใน cpuset B มีผลที่สังเกตได้หรือไม่? ระบุไว้แตกต่างกัน: จะเปลี่ยนนโยบายการตั้งเวลาของเธรด B cpuset จาก SCHED_OTHER เริ่มต้นเป็น SCHED_FIFO หรือ …

2
รับสัญญาณก่อนที่กระบวนการจะถูกฆ่าโดย OOM killer / cgroups
ในกลุ่มของเราเรากำลัง จำกัด ทรัพยากรกระบวนการของเราเช่นหน่วยความจำ ( memory.limit_in_bytes) ฉันคิดว่าในท้ายที่สุดแล้วมันก็จัดการผ่าน OOM killer ในเคอร์เนลลินุกซ์ (ดูเหมือนว่าโดยการอ่านซอร์สโค้ด ) มีวิธีรับสัญญาณก่อนที่กระบวนการของฉันจะถูกฆ่าหรือไม่? (เช่นเดียวกับ-notifyตัวเลือกสำหรับSGEqsubซึ่งจะส่งSIGUSR1ก่อนที่กระบวนการจะถูกฆ่า) ฉันอ่านเกี่ยวกับ/dev/mem_notify ที่นี่แต่ฉันไม่มี - ทุกวันนี้มีอย่างอื่นอีกไหม? ฉันอ่านสิ่งนี้ซึ่งดูเหมือนว่าจะค่อนข้างเกี่ยวข้อง ฉันต้องการอย่างน้อยก็ทิ้งร่องรอยกองเล็ก ๆ และบางทีข้อมูลการแก้ปัญหาที่มีประโยชน์อื่น ๆ - แต่บางทีฉันสามารถกู้คืนได้โดยการเพิ่มหน่วยความจำ หนึ่งแก้ปัญหาฉันกำลังใช้อยู่นี้สคริปต์เล็ก ๆซึ่งการตรวจสอบบ่อยถ้าผมสนิท (95%) เพื่อขีด จำกัด SIGUSR1และถ้าเป็นเช่นนั้นก็จะส่งกระบวนการ ใน Bash ฉันกำลังเริ่มต้นสคริปต์นี้ในพื้นหลัง ( cgroup-mem-limit-watcher.py &) เพื่อที่จะคอยดู procs อื่น ๆ ใน cgroup เดียวกันและจะหยุดทำงานโดยอัตโนมัติเมื่อกระบวนการ Bash หลักตาย

2
วิธีแก้ปัญหาความจำนี้อย่างสง่างาม?
ฉันมีแล็ปท็อปมาตรฐาน Linux (ทดสอบเดเบียน) ที่มีพาร์ทิชันสลับ ฉันทำการทดลองกับมันมากมาย บางส่วนของพวกเขากำลังหิวมากหน่วยความจำและวิธีการทำงานของ Linux โดยค่าเริ่มต้นเป็นปัญหาสำหรับฉัน ... ขอยกตัวอย่างโง่ ๆ : นั่งหน้าแล็ปท็อป เปิดเทอร์มินัล พิมพ์pythonจากนั้นa = [0]*100000000 ตอนนี้มีโอกาสสูงที่คุณจะมี RAM ไม่เพียงพอที่จะจัดการกับรายการใหญ่ Linux จะเติม RAM แล้วสลับและอีกสองสามนาทีต่อมา OOM killer จะถูกทริกเกอร์และฆ่าบริการแบบสุ่ม (เกือบ) และหวังว่าถ้าคุณกด Ctrl + C ในเวลาที่เหมาะสมpythonและถ้าเทอร์มินัล ยังคงมีสมาธิคอมพิวเตอร์จะตอบสนองอีกครั้ง ฉันต้องการบังคับใช้ขีด จำกัด หน่วยความจำบางส่วนเพื่อหลีกเลี่ยงการสลับที่ไม่พึงประสงค์และปฏิเสธสิทธิ์ในการจัดสรรหน่วยความจำมากกว่าที่ฉันมี (ใน RAM) หากความต้องการหน่วยความจำต่ำกว่าขีด จำกัด หรือรูตที่ถามแล้วให้ฆ่ากระบวนการหิวหน่วยความจำส่วนใหญ่ของผู้ใช้ใด ๆ ยกเว้นรูท ulimit -Sv [mem] ฉันได้ยินที่ด้านหลัง! โฮ้โฮ! "ใช้งานcgroupsผ่านcgexec!" …
10 memory  limit  cgroups  ulimit 

1
ตั้งค่าขีด จำกัด ทรัพยากรเริ่มต้นสำหรับผู้ใช้ทั้งหมดที่มีกลุ่ม systemd
ฉันสามารถตั้งค่าขีด จำกัด หน่วยความจำสำหรับผู้ใช้เช่น: systemctl set-property user-UID.slice MemoryHigh=24G มีวิธีการนี้สำหรับผู้ใช้ทุกคนหรือไม่? ฉันต้องการให้ผู้ใช้แต่ละคนได้รับ 24G ไม่ใช่ทั้งหมด 24G สำหรับกระบวนการผู้ใช้ทั้งหมด (ซึ่งฉันคิดว่าจะเป็นผลมาจากการตั้งค่าuser.sliceโดยตรง)

1
กระบวนการในกลุ่ม cg ต้องถูกตั้งค่าทุกการบู๊ตหรือไม่? ถ้าเป็นเช่นนั้นจะคงอยู่ได้อย่างไร
ฉันอ่านคำตอบสำหรับคำถามเกี่ยวกับการตั้งค่าขีด จำกัด สำหรับกระบวนการโดยใช้กลุ่ม cg ตัวอย่างที่กำหนดชุดข้อ จำกัด สำหรับกระบวนการ (ในตัวอย่างsshd) ในคำตอบ PID ของกระบวนการจะถูกตั้งค่าด้วยตนเอง สิ่งนี้จะยอมรับไม่ได้สำหรับวัตถุประสงค์ของฉันฉันต้องการให้กระบวนการเริ่มต้นจากแอปพลิเคชันที่กำหนดเพื่อให้มีการตั้งค่าขีด จำกัด เสมอไม่ว่าเมื่อใดที่พวกเขาเริ่มหรือ จำกัด ด้วยจำนวนกระบวนการเริ่มต้น บางทีมันอาจไม่ชัดเจนจากตัวอย่างว่าเกิดขึ้นได้อย่างไรดังนั้นคำอธิบายที่ชัดเจนหรือลิงก์ไปยังอันใดอันหนึ่งก็ยินดีด้วยเช่นกัน ตัวอย่างใน cgroups.txt เคอร์เนลที่ดูเหมือนว่าจะใช้รูปแบบเดียวกับที่กำหนดแล้วข้างต้น

2
ใช้ cgroup เพื่อ จำกัด การใช้หน่วยความจำของ virtualbox
ฉันกำลังพยายามใช้cgroup(กลุ่มควบคุม) เพื่อ จำกัด การใช้งานหน่วยความจำของ Virtualbox แต่ดูเหมือนจะไม่ทำงาน เครื่องของฉันคือ: $ uname -a Linux fc.bgi 2.6.40-4.fc15.i686 #1 SMP Fri Jul 29 18:54:39 UTC 2011 i686 i686 i386 GNU/Linux ฉันพยายามทำให้มันเป็นเช่นนี้: การสร้างกลุ่มใหม่ภายใต้ลำดับชั้นของหน่วยความจำ: $ cgcreate -g memory:vbox การตั้งค่า memory.limit_in_bytes สำหรับ vbox: $ cgset -r memory.limit_in_bytes=512M vbox การจัดกลุ่ม vbox ที่รัน pid เป็น vbox: $ cgclassify -g memory:vbox …
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.