一、进程优先级
https://gityuan.com/2015/10/01/process-priority/
进程可划分为普通进程和实时进程,那么优先级与nice值的关系图:
优先级值越小表示进程优先级越高,3个进程优先级的概念:
-
静态优先级: 不会时间而改变,内核也不会修改,只能通过系统调用改变nice值的方法区修改。优先级映射公式:
static_prio = MAX_RT_PRIO + nice + 20
,其中MAX_RT_PRIO = 100,那么取值区间为[100, 139];对应普通进程; -
实时优先级:只对实时进程有意义,取值区间为[0, MAX_RT_PRIO -1],其中MAX_RT_PRIO = 100,那么取值区间为[0, 99];对应实时进程;
-
动态优先级: 调度程序通过增加或减少进程静态优先级的值,来达到奖励IO消耗型或惩罚cpu消耗型的进程,调整后的进程称为动态优先级。区间范围[0, MX_PRIO-1],其中MX_PRIO = 140,那么取值区间为[0,139];
nice值
nice∈[-20, 19],可通过adb直接修改某个进程的nice值: renice prio pid
- 查看进程子进程信息:
pstree -tnlap PID
- 修改进程的nice值,【-20,19】,越小优先级越高
adb shell renice -n -10 7386(pid 号)
- 看进程运行在那个核上:
ps -eo pid,args,psr
二、chrt修改线程优先级
usage: chrt [-Rmofrbi] {-p PID [PRIORITY] | [PRIORITY COMMAND...]}
Get/set a process' real-time scheduling policy and priority.
-p Set/query given pid (instead of running COMMAND)
-R Set SCHED_RESET_ON_FORK
-m Show min/max priorities available
Set policy (default -r): 对应调度策略
-o SCHED_OTHER -f SCHED_FIFO -r SCHED_RR
-b SCHED_BATCH -i SCHED_IDLE
查看进(线)程信息
# 查看对应实时进程的调度策略及优先级
chrt -p pid
修改非实时线程为实时线程
# 配置线程3715:调度策略为SCHED_RR,优先级为50
chrt -r -p 3715 50
三、Gstreamer命令
gst-launch-1.0 -e v4l2src ! queue ! x264enc ! h264parse ! queue ! qtmux0. alsasrc ! 'audio/x-raw,rate=44100,depth=16' ! audioconvert ! audioresample ! voaacenc ! aacparse ! qtmux ! filesink location=test.mp4
gst-launch-1.0 boscamsrc num-buffers=100 ! video/x-raw,format=YUY2,width=1280,height=720 ! v4l2convert disable-passthrough=true output-io-mode=dmabuf-import capture-io-mode=dmabuf ! video/x-raw,format=NV12,width=1920,height=1080,colorimetry=bt601 ! v4l2h265enc output-io-mode=dmabuf-import capture-io-mode=mmap extra-controls="cid,sequence_header_mode=1,video_gop_size=30" ! h265parse ! mp4mux ! filesink location=/data/output%d.mp4
gst-launch-1.0 -e alsasrc device=Capture_DVR_mic ! audioconvert ! lamemp3enc ! filesink location=/data/output.mp3
gst-launch-1.0 boscamsrc num-buffers=100 ! video/x-raw,format=YUY2,width=1280,height=720 ! v4l2convert disable-passthrough=true output-io-mode=dmabuf-import capture-io-mode=dmabuf ! video/x-raw,format=NV12,width=1920,height=1080,colorimetry=bt601 ! v4l2h265enc output-io-mode=dmabuf-import capture-io-mode=mmap extra-controls="cid,sequence_header_mode=1,video_gop_size=30" ! h265parse ! mux. alsasrc device=Capture_DVR_mic ! audioconvert ! lamemp3enc ! mux. mp4mux name=mux ! filesink location=/data/output%d.mp4