Tiny Core Linux是一个只有22M大小,但功能齐全的桌面Linux操作系统。不像其它的Linux发行版,动辄几个G的大小。Tiny Core Linux可以全部运行在内存中,你可以体验一下,将OpenOffice和FireFox全部加载到内存中时,它们的运行速度有多快。Tiny Core Linux运行时刻只需要48M的内存甚至更少。
嵌入式Linux开发者可以在其基础之上进行裁剪了,图形界面都给你准备好了。
#Tiny Core Linux#
嵌入式,也有在linux环境和安卓环境编程的,这不算程序员吗。
匠人七号大家觉得嵌入式软件开发的人,算是程序员吗
在c语言里,如果需要在多个模块之间传递多个变量,该怎么做?
定义多个全局变量是一个方法,但是这种做法写法很不优雅,而且会破坏封装性。
那还有什么好办法吗?
有,参考下linux内核源代码就知道了。
linux内核源代码汇集了全球顶尖程序员的智慧,是可供我们参考的一个很好的sample code。
在linux内核的kswapd内核线程中,会对物理内存进行回收,整个回收过程逻辑复杂,需要多个模块通力合作,那他们就需要共享一些必要的变量来同步回收信息。
从balance_pgdat开始,在调用kswapd_shrink_node的时候,传进去了一个struct scan_control ,struct scan_control 里面包含了内存回收相关的诸多信息,包括:
- 本次回收需要回收的内存数量;
- 本次回收需要满足的page order目标;
- 本次回收的内存node的掩码,UMA只有一个内存node,NUMA则有多个内存node;
- 本次回收内存时扫描的LRU链表的优先级,这决定了每次扫描的页面数量;
- 到目前为止扫描过的页面的数量;
- 到目前为止回收的页面的数量;
这些信息构成了内存回收这个过程的上下文信息,通过把struct scan_control * 或者struct scan_control **在各个模块之间传递,就可以实现这个上下文信息的共享,从而共同实现linux内存的回收。
关注@简说linux ,学习c语言和linux内核源码。
#linux# #c语言# #C语言# #Linux# #操作系统# #嵌入式# #单片机# #运维# #IT# #程序员#
linux系统借助swap内存机制把青铜(磁盘)当成黄金(内存)来用。表面看起来好像占了很大便宜,其实不然。linux系统下swap内存使用过多,有可能会导致系统IO开销增加,进而影响系统的整体性能。那碰到此类性能问题,如何找到是哪个进程引发的呢?
用下面2个步骤简简单单找到答案:
1、先看整体。先通过free查看swap内存的总量、用量和余量
如果swap内存用量较大,说明值得怀疑,则继续下一步;
2、再看部分。谁会使用swap内存?肯定是进程啊。那怎么查看各个进程的swap内存的用量呢?
可以通过 smem -s swap -k 查看各个进程的实时的swap内存的用量。其中:
-s swap:表示对swap的内存用量进行由低到高的排序
-k:表示输出会附带单位是GB, MB,KB等
此外,从下图我们可以发现系统里的mysql应用也使用了不少的swap内存。大家想想看,这会给mysql的性能带来哪些影响?
另外,如果需要关闭或者减少swap内存的使用,我们有哪些办法?
总之,swap内存虽然看起来很美好,但是核心数据在swap内存和物理内存之间迁移还是有可能导致应用的不稳定。所以,有些应用比如像k8s、elasticsearch都不建议使用swap内存。
关于swap内存的原理、使用和优化方法已经收录在我的《linux性能调试和优化》专栏里。我会从linux swap内存的机制原理、指标介绍、工具使用和对应用性能的影响这几个方面来给大家介绍。
通过这种刻意的学习训练会让你在后续解决此类问题的时候游刃有余。
本专栏新上,8月22日前订阅本专栏可享受90.2元早鸟价格,另赠送《linux性能调试和优化》思维导图一份。
【特此承诺】:后续若出现更低价格,给大家退差额的部分!(仅限8月22日前订阅的客户)
#linux# #Linux# #操作系统# #运维# #c语言# #C语言# #嵌入式# #开发# #测试# #我要上微头条# #程序员# #嵌入式# #物联网# #互联网# #java# #Java# #单片机#