Try   HackMD

2024-05-07,14,18 討論簡記

課程期末專題

cheezad

CPU cycle 跟用 NOP Futex 來 sleep 差在哪?
前者會佔用 CPU,後者就像系統呼叫,呼叫完之後 CPU 就可以去執行其他東西

sched_setaffinity

Image Not Showing Possible Reasons
  • The image was uploaded to a note which you don't have access to
  • The note which the image was originally uploaded to has been deleted
Learn More →

thread pool

han1018

Q: Linux kernel 程式不能用 gdb debug,有推薦的工具嗎?

kgdb

idoleat

任務建立後先放在同一個 CPU 上稍後才 migrate,與直接將任務分配在指定 CPU 上的差異?
開機後只會先開一核,之後才叫其他核起來,把工作分配過去 -> load balacing
PELT 計算 load 作為 balance 依據
CPU Isolation 作為空出一個 CPU 來執行指定任務的方法

tsc 是什麼?time stamp counter
為什麼要 spin? 一直檢查滿了沒會有什麼問題?若是遇到 cache invalidated 就要一直做 cache coherence,動輒數百 CPU 週期,也增加 bus traffic

解決刪除與新增衝突的另一種思維:
預先訂立操作優先度,例如新增優先於刪除,在操作沒有順序時依據優先度決定誰成功。因為是預先定好的關係,不須額外同步,可以直接 local resolution。缺點就是會有操作被捨棄

YangYeh-PD

  1. 在測試 CPU Scheduler 中,我們可不可以忽略掉任務處理所需的最大時間?儘管不常發生?
    Image Not Showing Possible Reasons
    • The image was uploaded to a note which you don't have access to
    • The note which the image was originally uploaded to has been deleted
    Learn More →

不行。儘管這在統計上屬於 outlier,但只要發生一次,系統就會遲鈍。此外,如果發生在 hard real-time 的系統(如火箭上的 OS) 就會造成很嚴重的後果。
2. 在 CPU Scheduler heat map 中,為何每個 CPU core 所分配到的任務量不平均?

Image Not Showing Possible Reasons
  • The image was uploaded to a note which you don't have access to
  • The note which the image was originally uploaded to has been deleted
Learn More →

儘管配合 task migration 本來要讓任務分配給不同的 CPU 且達到負載平衡,但任務之間會有資料相依或依循特定的互動執行順序,並非彼此獨立,一旦某些關鍵服務的執行較長,且有顯著等待時,就會造成任務量分配不均的情形。
3. CPU scheduler 專題中有哪些可以解決的問題?
* 降低 CPU 最大延遲 (Largest Latency)。
* 嘗試判斷一個任務是否需要 migrate,以降低執行時間。

dcciou

IEEE 754
single precision
signed
xi = (int) 7 => 1112
1.11 * 2^2
127+2=129 -> 10000001 11000000
/
/
xf = (float) 7 => 0 [ exponent ] [ fraction ]
| |
+ sign bit ±>
NaN, +/-INF

xi * 8 ==> xi << 3 xi * 2 ==> xi << 1
xf * 8 ==> ? xf * 2 ==> 變更 exp

xi * 10 = (xi << 3) + (xi << 1)
xf * 10 => ?

TODO: 針對單精度浮點數運算,提出利用 bitwise 運算達到「乘 10」的操作 (不能用 mul)
x10 = x8x1.25 => 8 = 2^3 = 指數部分+3; 1.25部分則使用原本值+1/4原值 = 1.11+0.0111 = 10.0011,溢位 -> 1.00011 * 2 -> 指數再+1,得: 0 10000101 0001100~ (?

linux/kernel/printk/printk.c
(__printk_cpu_sync_try_get)
Reentrant mutex

https://hackmd.io/@sysprog/linux2020-zerocopy

zero-copy:
既然 zero-copy 實作效率高,為什麼不使用都 zero-copy 實作?
在什麼時候情境才需要使用 zero-copy 或非 zero-copy 的實作?

A B C
| ± try_lock
| |
acquire lock
|
xxxx
|
release lock |
acquire lock