CPU cycle 跟用 NOP Futex 來 sleep 差在哪?
前者會佔用 CPU,後者就像系統呼叫,呼叫完之後 CPU 就可以去執行其他東西
sched_setaffinity
thread pool
Q: Linux kernel 程式不能用 gdb debug,有推薦的工具嗎?
kgdb
任務建立後先放在同一個 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。缺點就是會有操作被捨棄
不行。儘管這在統計上屬於 outlier,但只要發生一次,系統就會遲鈍。此外,如果發生在 hard real-time 的系統(如火箭上的 OS) 就會造成很嚴重的後果。
2. 在 CPU Scheduler heat map 中,為何每個 CPU core 所分配到的任務量不平均?
儘管配合 task migration 本來要讓任務分配給不同的 CPU 且達到負載平衡,但任務之間會有資料相依或依循特定的互動執行順序,並非彼此獨立,一旦某些關鍵服務的執行較長,且有顯著等待時,就會造成任務量分配不均的情形。
3. CPU scheduler 專題中有哪些可以解決的問題?
* 降低 CPU 最大延遲 (Largest Latency)。
* 嘗試判斷一個任務是否需要 migrate,以降低執行時間。
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