2024年6月14日 星期五

Linux System Load Average

Linux 的系統平均負載可在 uptimetop、cat /proc/loadavg、w(ho) 等看到,有三組數字,分別表示最近 1 分鐘、5 分鐘、和 15 分鐘的平均負載。

平均負載在 Linux kernel 紀錄在 avenrun[],每 5 秒更新一次,公式為

new = old * exp_n + active * (1 - exp_n)

採用定點表示,計算式變成

new = old * EXP_N + active * (FIXED_1 - EXP_N);
if (active >= old)
    new += FIXED_1 - 1;
new /= FIXED_1;

小數部份有 11 bits,相乘擴充為 22 bits,所以精確度為 10 bits 整數,加上 11 bits 小數。FIXED_1 為 1.0,是 (1<<11)。EXP_N 在 1 分鐘、5 分鐘、和 15 分鐘分別是

#define EXP_1   1884    /* 1/exp(5sec/1min) as fixed-point */
#define EXP_5   2014    /* 1/exp(5sec/5min) */
#define EXP_15  2037    /* 1/exp(5sec/15min) */

1/exp5/60 * FIXED_1 = 1884

包含 TASK_UNINTERRUPTIBLE?

參考

  1. Dr. Neil Gunther 的 UNIX Load Average Part 1: How It Works, Part 2: Not Your Average Average

https://hackmd.io/@RinHizakura/S1K4fQtaF

2024年6月2日 星期日

NVIS

NVIS (Near vertical incidence skywave)

同樣是 HF 頻率,DX 以低角度發射到電離層,反射到長距離外;而 NVIS 以接近垂直的角度射向電離層,再反射回周遭地帶,依天線效能、發射功率、電離層狀況,覆蓋範圍可達 400km。NVIS 為視距外 (泛指VHF,UHF),又未需長距離 DX 通訊內的近區通訊選擇。NVIS 的傳播特性接近直上直落,幾乎沒有阻礙關係,訊號衰減較傳統電波傳播少和比較穩定,適合小功率和電池操作的場合。NVIS 使用的是 F2 電離層,為此電波既要穿過 D layer,又不能讓之直飛太空,日夜以至不同季節,電離層狀況,太陽粒子周期等因素所用頻率皆不盡相同。一般只能使用1.8 – 7MHz。

https://www.vr2xkp.org/2023/07/30/天空之鏡-nvis-技術淺談/

Citizens band radio

Citizens band radio (市民頻段無線電、民用波段無線電台、CB無線電),在台灣CB頻率從26.965至27.405MHz之間,頻道間隔 10 kHz,共分40個波段頻道,第9頻道27.065MHz是緊急頻道,CB機的發射功率最高只能到5W。波長 11 米。使用手持機可通訊的視線距離約300至500公尺左右,使用基地天線收發大約通訊距離約1至5公里之間。27MHz 屬於 HF 頻帶,可經由電離層反射到遠方,電波一次的跳躍距離約500至800公里之間。

參考:https://www.radio.club.tw/forum.php?mod=viewthread&tid=9642

2024年4月13日 星期六

dn_expand()

擴展網域名稱 (dn, doamin name)。DNS 詢問或回覆訊息中的網域名稱,並沒有「.」,每個「.」隔開的 label 改為前面加 1-byte 欄位放 label 的長度。另外,先前出現的最長字尾,可以用訊息 offset 表示,來減少封包長度。dn_expand() 將其還原為原本完整的樣子。

int dn_expand( // 回傳處理的壓縮 dn 長度,錯誤回 -1
    const unsigned char *msg, // 訊息開始
    const unsigned char *eomorig, // 訊息結束
    const unsigned char *comp_dn, // 壓縮的 dn
    char *exp_dn, // buffer 放擴展後的 dn
    int length); // buffer 大小

壓縮的 dn 每個 label 第 1 byte 的 MSB 2-bit 是

  • 00 表示沒有壓縮,剩下 6-bit 是後續資料的長度,依照常長度將後續資料複製到 buffer,特殊字元前加 '\'、不可印的字元轉成 \ddd。
  • 11 表示有壓縮,剩下 6-bit 和下個 byte 合起來是訊息的 offset,檢查是否在範圍內,跳到 offset 繼續處理。
  • 其它為錯誤。

參考

  1. RFC 1035 4.1.4

2024年4月12日 星期五

LoRa Devices

Semtech SX1262 LoRa transceiver 比 SX1276 新,效能較好。基於 nRF52 比基於 ESP32 省電,但較貴。

  • SX1261, SX1262 and SX1268 sub-GHz radio transceivers,。
  • compliance with radio regulations ETSI EN 300 220, FCC CFR 47 Part 15, China regulatory requirements and the Japanese ARIB T-108. 頻率涵蓋150MHz ~ 960MHz 支援全世界主要 sub-GHz ISM bands。
  • FSK, GFSK, MSK, GMSK, LoRa and Long Range FHSS modulations。LoRa 最快 62.5kbps LoRa,FSK 最快 300kbps。
  • 170dB maximum link budget (SX1262 / 68)
  • +22dBm (SX1262/SX1268) 或 +15dBm (SX1261) high efficiency PA [傳送能力]
  • Low RX current of 4.6mA (???4.2 mA of active receive current consumption)
  • High sensitivity: down to -148dBm
  • 88dB blocking immunity at 1MHz offset
  • Co-channel rejection of 19dB in LoRa mode
  • Automatic Channel Activity Detection (CAD) with ultra-fast AFC

LoRa Modulation Parameter:• Modulation BandWidth (BW_L)• Spreading Factor (SF)• Coding Rate (CR)• Low Data Rate Optimization (LDRO)

Spreading Factor (SF):spread spectrum LoRa® modulation 是用多個 chip 代表一個 bit 資料。symbol rate (Rs)。SF = (nominal Rs)/(chip rate) = the number of symbols sent per bit of information.

Rs = BW/2SF

SF 5 = 25 = 32 chips/symbol

svrhost

 svrhost

2024年4月6日 星期六

Meshtastic

Meshtastic® 一個開放原始碼的組織,提供程式用 LoRa 無線裝置來建立傳輸文字訊息的低功率長距離 mesh 網路,存取界面可以是藍牙/Wi-Fi/Ethernet/Serial,不依賴其它通訊平台。

原理:rebroadcast

  • 未達 hop limit
  • 過濾重複的訊息 (保留最新 30 則嗎?)
  • 逾時沒回應重送,最多 3 次。

終點未連上用戶會存大約 30 則最新的訊息。

封包格式:Preamble (16) + LoRa Physical Header (2) + Packet Header (16) + Packet Data (max. 237)

  • Preamble:同步訊號頻率好開始傳資料。
  • LoRa Physical Header:Packet Length (1) + Sync Word (1)。Sync Word 0x2B 表示是 Meshtastic。
  • Packet Header:Destination NodeID (4) + Sender NodeID (4) + Packet ID (4) + Flags (1) + Channel Hash (1) + Padding (2)
    • 不加密,便於路由。
    • NodeID 是藍牙 MAC 位址後 4-byte,Destination NodeID 都 1 表示廣播。
    • Packet ID:和加密有關
    • Flags:3-bit Hop Limit,1-bit WantACK,1-bit ViaMQTT。WantACK 決定 reliable 傳送,等候終點回應。廣播行為不同,有收到 rebroadcast 就視為 ACK。
    • Channel Hash
  • Packet Data:最長 237,不含 protobuf overhead。超過 truncated。237 是因為 + 16 + 2 = 255?

CSMA/CD:傳送前進行 Channel Acitivity Detection (CAD),等候取自 contention window (CW) 的 random slot time。Channel 使用率越高 CW 越大,接收 SNR 越小,CW 越小。

限制 group member, 100 裝置以上。

  • 頻率
  • 機器位置靠近手機基地台,且有 B8 頻段,可以嘗試 RX Boosted Gain 選項關閉。

SIP header Via

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