2011年2月12日 星期六

列印到 PDF

  1. 安裝 cups-pdf
  2. 新增印表機
列印後檔案放在 PDF 目錄下

Real-time Linux

Real-time 代表的不只是結果正確,還要在時限內完成,不然還是失敗,也就是事件有決定性 (deterministic)。或許只要使用夠快的硬體就能達到 real-time,但不同事情有不同的延遲要求,在較差的硬體,作業系統如何保證特定事情能在時限內即時完成?

作法是低優先權的 process 未完成前讓出 CPU 給高優先權 process 使用,叫做 preempty。程式在 userspace 原本就 preemptible,kernel 部份在 2.6 開始才有 CONFIG_PREEMPTY 支援,即使在執行 syscall,除了關掉 local interrupts (或持有 siplock),也可被高優先 process preempted。

preempty 時為了維持資料完整和正確,需要 critical section,lock 機制也會不同。uni-processor 的 spinlock,沒有 preempty 時用 no-op 就可以了,有 preempty 就不行。

preemption 可減少延遲,但也會減少 throughput,所以有個平衡點。

在 Linux 中有如下不同程度的 real-time 實作,從無到終極版 throughput 愈低,但愈具備決定性
  • CONFIG_PREEMPT_NONE:無
  • CONFIG_PREEMPT_VOLUNTARY:低優先權 process 自願讓出
  • CONFIG_PREEMPT:隱含在 spinlock, interrupt return code 裡讓出。使用 PREEMPT_RCU,前兩者則使用 CLASSIC_RCU
  • CONFIG_PREEMPT_RT:終極版,使用 preemptive 排程器
另外可導入真正的 RTOS,Linux 變成 RTOS 下的 idle task

參考
  1. Jserv's blog: 破除 Realtime GNU/Linux 的迷思 (Getting real (time) about embedded GNU/Linux 的譯註)
  2. Real-Time Linux Wiki
  3. Driver porting: the preemptible kernel
  4. Linux Device Drivers, Concurrency and Race Conditions
  5. https://www.codeblueprint.co.uk/2019/12/23/linux-preemption-latency-throughput.html
  6. CONFIG_SMP:Symmetric multiprocessing。SMP mutual exclusion 確保也可以用在 preemption。同一 CPU 內存取 per-CPU variables 要特別注意 preemption 時是否有 races 問題。其它 CPU 存取已處理,應該沒問題。
  7. CONFIG_HZ
  8. Spinlock 原始碼觀摩(—)
20200713 最後更新

SIP header Via

所有 SIP 訊息 都要有 Via,縮寫 v。一開始的 UAC 和後續途經的每個 proxy 都會疊加一個 Via 放傳送的位址,依序作為回應的路徑。 格式 sent-protocol sent-by [ ;branch= branch ][ ; 參數 ...] s...