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