
曙海教學優(yōu)勢
本課程,秉承二十一年積累的教學品質(zhì),以項目實現(xiàn)為導向,面向企事業(yè)項目實際需要,老師將會與您分享設計的全流程以及工具的綜合使用經(jīng)驗、技巧。課程可定制,線上/線下/上門皆可,熱線:4008699035。
曙海培訓的課程培養(yǎng)了大批受企業(yè)歡迎的工程師。大批企業(yè)和曙海
建立了良好的合作關系,20多年來,合作企事業(yè)單位以達30多萬。曙海培訓的課程在業(yè)內(nèi)有著響亮的知名度。
本課程是打下內(nèi)核、驅動和系統(tǒng)編程基礎的課程,它主要講解Linux內(nèi)核最核心的進程調(diào)度、內(nèi)存管理和I/O模型。
第一章 進程
第一節(jié) 進程生命周期
Linux進程生命周期(就緒、運行、睡眠、停止、僵死)
僵尸是個什么鬼?
停止狀態(tài)與作業(yè)控制,cpulimit
內(nèi)存泄漏的真實含義
task_struct以及task_struct之間的關系
初見fork和僵尸
練習題
fork的例子
life-period例子,觀察僵尸
用cpulimit控制CPU利用率
第二節(jié) 進程的創(chuàng)建、退出和睡眠
fork、vfork、clone
寫時拷貝技術
Linux線程的實現(xiàn)本質(zhì)
進程0和進程1
進程的睡眠和等待隊列
孤兒進程的托孤,SUBREAPER
練習題
fork、vfork、Copy-on-Write例子
life-period例子,實驗體會托孤
pthread_create例子,strace它
徹底看懂等待隊列的案例
第三節(jié) 調(diào)度算法
1. CPU/IO消耗型進程
2. 吞吐率 vs. 響應
3. SCHED_FIFO、SCHED_RR
4. SCHED_NORMAL和CFS
5. nice、renice
6. chrt
練習題
運行2個高CPU利用率程序,調(diào)整他們的nice
用chrt把一個死循環(huán)程序調(diào)整為SCHED_FIFO
閱讀ARM的big.LITTLE架構資料,并論述為什么ARM要這么做?
第四節(jié) 多核調(diào)度、cgroup、實時性
多核下負載均衡
中斷負載均衡、RPS軟中斷負載均衡
cgroups和CPU資源分群分配
Android和NEON對cgroups的采用
Linux為什么不是硬實時的
preempt-rt對Linux實時性的改造
練習題
用time命令跑1個含有2個死循環(huán)線程的進程
用taskset調(diào)整多線程依附的CPU
創(chuàng)建和分群CPU的cgroup,調(diào)整權重和quota
cyclictest
第二章 內(nèi)存
1 硬件原理和分頁管理
CPU尋址內(nèi)存,虛擬地址、物理地址
MMU以及RWX權限、kernel和user模式權限
內(nèi)存的zone: DMA、Normal和HIGHMEM
Linux內(nèi)存管理Buddy算法
連續(xù)內(nèi)存分配器(CMA)
練習題
嘗試去更改一個const變量
meltdown實例
看/proc/buddyinfo
2 內(nèi)存的動態(tài)申請和釋放
slab、kmalloc/kfree、/proc/slabinfo和slabtop
用戶空間malloc/free與內(nèi)核之間的關系
mallopt
vmalloc
內(nèi)存耗盡(OOM)、oom_score和oom_adj
Android進程生命周期與OOM
練習題
看/proc/slabinfo,運行slabtop
運行mallopt.c程序:mallopt(M_TRIM_THRESHOLD)等
看/proc/vmallocinfo,grep ioremap映射
運行一個很耗費內(nèi)存的程序,觀察oom memory
通過oom_adj調(diào)整firefox的oom_score
3 進程的內(nèi)存消耗和泄漏
進程的VMA。
進程內(nèi)存消耗的4個概念:vss、rss、pss和uss
page fault的幾種可能性,major和minor
應用內(nèi)存泄漏的界定方法
應用內(nèi)存泄漏的檢測方法:valgrind和addresssanitizer
練習題
看一下進程的/proc//maps和smaps文件;
pmap一個進程;
把同一個程序運行2次,運行1次,觀察pss;再運行,得到2個進程,觀察代碼段的pss變化;
valgrind檢查內(nèi)存錯誤
4 內(nèi)存與I/O的交換
page cache
free命令的詳細解釋
read、write和mmap
file-backed的頁面和匿名頁
swap以及zRAM
頁面回收和LRU
練習題
把hello,python運行兩次,對比時間差;
free,cat /dev/sda > /dev/null, free,觀察變化,分析原因;
5 其他工程問題以及調(diào)優(yōu)
DMA和cache一致性
內(nèi)存的cgroup
性能方面的調(diào)優(yōu):page in/out, swapin/out
Dirty ratio的一些設置
Swappiness
練習題
vmstat;
smem -s swap -t -k –n
限制一個cgroup的memory,用cgexec把一個進程放到這個cgroup
第三章 I/O
第1節(jié) Linux I/O和網(wǎng)絡模型
阻塞
非阻塞
多路復用
Signal IO
異步IO
Libevent
練習題
針對globalfifo采用signalio訪問;
運行glibc-aio.c的案例;
運行libevent網(wǎng)絡程序案例;
運行epoll案例
第2節(jié) 典型文件系統(tǒng)
VFS
EXT2/3/4的layout
文件系統(tǒng)的日志與掉電保護
練習題
dump一個ext文件系統(tǒng);
分析各種日志方法的時序
第3節(jié) IO調(diào)度器
Linux block IO流程
IO調(diào)度和CFQ調(diào)度算法
ionice
cgroup與IO
練習題
ionice調(diào)整進程io優(yōu)先級,iotop觀察;
cgroup控制io
?