กระบวนการ rcuos / rcuob คืออะไรที่ฉันเห็นอยู่ด้านบน


59

ฉันวิ่งขึ้นไปด้านบนและฉันเห็นกระบวนการ rcuos / rcuob มากมาย นี่คือตัวอย่างของผลลัพธ์ยอดนิยม:

top - 21:41:15 up 22 days, 19:20,  1 user,  load average: 0.00, 0.01, 0.05
Tasks: 332 total,   1 running, 331 sleeping,   0 stopped,   0 zombie
Cpu(s):  0.0%us,  0.0%sy,  0.0%ni, 99.9%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:  32910904k total,  2232224k used, 30678680k free,   246636k buffers
Swap: 33517564k total,        0k used, 33517564k free,  1048244k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
 3098 root      20   0 11.8g 113m 9.9m S    1  0.4  67:57.98 asterisk
   12 root      20   0     0    0    0 S    0  0.0   0:53.61 rcuos/3
 1130 root      39  19     0    0    0 S    0  0.0  78:26.78 kipmi0
 1735 root      20   0 15988  740  540 S    0  0.0  17:34.69 irqbalance
 1875 zabbix    20   0 89416 2472 1828 S    0  0.0  12:55.47 zabbix_agentd
    1 root      20   0 24316 2288 1336 S    0  0.0   0:05.06 init
    2 root      20   0     0    0    0 S    0  0.0   0:00.25 kthreadd
    3 root      20   0     0    0    0 S    0  0.0   0:02.40 ksoftirqd/0
    5 root       0 -20     0    0    0 S    0  0.0   0:00.00 kworker/0:0H
    6 root      20   0     0    0    0 S    0  0.0   0:00.00 kworker/u48:0
    8 root      20   0     0    0    0 S    0  0.0   4:55.92 rcu_sched
    9 root      20   0     0    0    0 S    0  0.0   1:31.03 rcuos/0
   10 root      20   0     0    0    0 S    0  0.0   0:54.04 rcuos/1
   11 root      20   0     0    0    0 S    0  0.0   0:53.16 rcuos/2
   13 root      20   0     0    0    0 S    0  0.0   0:45.96 rcuos/4
   14 root      20   0     0    0    0 S    0  0.0   0:41.84 rcuos/5
   15 root      20   0     0    0    0 S    0  0.0   0:02.56 rcuos/6
   16 root      20   0     0    0    0 S    0  0.0   0:07.25 rcuos/7
   17 root      20   0     0    0    0 S    0  0.0   0:12.06 rcuos/8
   18 root      20   0     0    0    0 S    0  0.0   0:12.14 rcuos/9
   19 root      20   0     0    0    0 S    0  0.0   0:11.21 rcuos/10
   20 root      20   0     0    0    0 S    0  0.0   0:05.66 rcuos/11
   21 root      20   0     0    0    0 S    0  0.0   1:39.42 rcuos/12
   22 root      20   0     0    0    0 S    0  0.0   0:35.66 rcuos/13
   23 root      20   0     0    0    0 S    0  0.0   0:26.46 rcuos/14
   24 root      20   0     0    0    0 S    0  0.0   0:00.88 rcuos/15
   25 root      20   0     0    0    0 S    0  0.0   0:00.30 rcuos/16
   26 root      20   0     0    0    0 S    0  0.0   0:31.93 rcuos/17
   27 root      20   0     0    0    0 S    0  0.0   0:18.58 rcuos/18
   28 root      20   0     0    0    0 S    0  0.0   0:20.53 rcuos/19
   29 root      20   0     0    0    0 S    0  0.0   0:44.95 rcuos/20
   30 root      20   0     0    0    0 S    0  0.0   0:01.92 rcuos/21
   31 root      20   0     0    0    0 S    0  0.0   0:00.24 rcuos/22
   32 root      20   0     0    0    0 S    0  0.0   0:05.01 rcuos/23
   33 root      20   0     0    0    0 S    0  0.0   0:00.00 rcu_bh
   34 root      20   0     0    0    0 S    0  0.0   0:00.00 rcuob/0
   35 root      20   0     0    0    0 S    0  0.0   0:00.00 rcuob/1
   36 root      20   0     0    0    0 S    0  0.0   0:00.00 rcuob/2
   37 root      20   0     0    0    0 S    0  0.0   0:00.00 rcuob/3
   38 root      20   0     0    0    0 S    0  0.0   0:00.00 rcuob/4
   39 root      20   0     0    0    0 S    0  0.0   0:00.00 rcuob/5
   40 root      20   0     0    0    0 S    0  0.0   0:00.00 rcuob/6
   41 root      20   0     0    0    0 S    0  0.0   0:00.00 rcuob/7
   42 root      20   0     0    0    0 S    0  0.0   0:00.00 rcuob/8
   43 root      20   0     0    0    0 S    0  0.0   0:00.00 rcuob/9
   44 root      20   0     0    0    0 S    0  0.0   0:00.00 rcuob/10
   45 root      20   0     0    0    0 S    0  0.0   0:00.00 rcuob/11
   46 root      20   0     0    0    0 S    0  0.0   0:00.00 rcuob/12
   47 root      20   0     0    0    0 S    0  0.0   0:00.00 rcuob/13
   48 root      20   0     0    0    0 S    0  0.0   0:00.00 rcuob/14
   49 root      20   0     0    0    0 S    0  0.0   0:00.00 rcuob/15
   50 root      20   0     0    0    0 S    0  0.0   0:00.00 rcuob/16
   51 root      20   0     0    0    0 S    0  0.0   0:00.00 rcuob/17
   52 root      20   0     0    0    0 S    0  0.0   0:00.00 rcuob/18
   53 root      20   0     0    0    0 S    0  0.0   0:00.00 rcuob/19
   54 root      20   0     0    0    0 S    0  0.0   0:00.00 rcuob/20
   55 root      20   0     0    0    0 S    0  0.0   0:00.00 rcuob/21
   56 root      20   0     0    0    0 S    0  0.0   0:00.00 rcuob/22
   57 root      20   0     0    0    0 S    0  0.0   0:00.00 rcuob/23
   58 root      RT   0     0    0    0 S    0  0.0   0:00.87 migration/0
   59 root      RT   0     0    0    0 S    0  0.0   0:08.47 watchdog/0
   60 root      RT   0     0    0    0 S    0  0.0   0:08.41 watchdog/1

กระบวนการเหล่านี้คืออะไร?


ผมคิดว่ากระบวนการเหล่านี้จะถูกกระบวนการเคอร์เนลที่เกี่ยวข้องกับRCU นี่คือลิงค์ที่มีประโยชน์เมื่อ: เข้าใจ RCU เมื่อกำหนดค่า Linux Kernelและคำถามเดียวกับของคุณอยู่ที่นี่
Lety

@sonicboom - การโพสต์ที่ดี - สิ่งที่เกี่ยวกับมันอาจจะเป็นประเภทของการดูเครื่องมือเกินไปด้วยเกี่ยวกับว่า coder สามารถรหัสอะไร (เขียนโดย ibm?) ... - นี่เป็นกรณีใหม่สำหรับ Snowden หรือไม่
dschinn1001

คำตอบ:


40

บทความสำคัญที่อธิบายถึงสิ่งนี้อยู่ที่นี่: https://lwn.net/Articles/522262/

สำหรับการซิงโครไนซ์ที่เร็วขึ้นโครงสร้างจำนวนมากในเคอร์เนลคือ "RCU" หรือ read-copy-update หลายเธรดสามารถอ่านพร้อมกันโดยไม่ปิดกั้นและเธรดที่ต้องการแก้ไขโครงสร้างสามารถทำได้อย่างรวดเร็วโดยการคัดลอกข้อมูลที่เกี่ยวข้องไปยังตำแหน่งใหม่และเปลี่ยนการอ้างอิง ("การลบ") อย่างไรก็ตามข้อมูลเก่าจะต้องใช้งานได้นานขึ้นเพื่อให้เธรดการอ่านสามารถทำงานได้สำเร็จ เมื่อข้อมูลเก่าไม่มีผู้อ่านทำงานอีกต่อไปในที่สุดก็สามารถลบได้ ("การเรียกคืน")

เธรด rcuos, rcuob อยู่ที่นั่นเพื่อจัดการส่วนการบุกเบิกของกระบวนการนี้ เคยถูกจัดการเป็นส่วนหนึ่งของซอฟต์แวร์ IRQ ซึ่งหมายความว่าสามารถใช้พลังงานตัวประมวลผลห่างจากกระบวนการผู้ใช้ที่สำคัญในเวลาที่ไม่เหมาะสม ด้วยการย้ายสิ่งนี้ไปยังเธรด rcu ** เฉพาะจำนวนมากระบบสามารถปรับได้เพื่อทำให้กระบวนการเรียกคืนนี้รบกวนน้อยลง

การลดความกระวนกระวายใจของระบบปฏิบัติการไม่ใช่วัตถุประสงค์ของเธรดเหล่านี้แม้ว่าอาจเป็นเหตุผลหลักที่มีอยู่


16

ตาม ubuntuforums พวกเขามาจาก "ลดความกระวนกระวายใจ OS" ซึ่งถูกเปิดใช้งานโดยเคอร์เนลธงต่อไปนี้

CONFIG_RCU_NOCB_CPU
CONFIG_RCU_NOCB_CPU_ALL
CONFIG_RCU_STALL_COMMON
CONFIG_RCU_USER_QS

ตั้งแต่ 13.10 (ทะลึ่ง) พวกเขาจะเปิดใช้งานโดยค่าเริ่มต้น

ดู:

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