kernel

docker概述

我的未来我决定 提交于 2020-03-09 20:02:59
虚拟化: varmvare,virtualbox docker:container技术(以内核为支撑进行虚拟机)。不用安装操作系统直接通过宿主机的os虚拟化出应用 Docker 是一个 开源 的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现 虚拟化 。容器是完全使用 沙箱 机制,相互之间不会有任何接口; 一个完整的Docker有以下几个部分组成: dockerClient客户端 Docker Daemon守护进程 Docker Image镜像 DockerContainer容器 起源 Docker 是 PaaS 提供商 dotCloud 开源的一个基于 LXC 的高级容器引擎,源代码托管在 Github 上, 基于 go语言 并遵从Apache2.0协议开源。 Docker自2013年以来非常火热,无论是从 github 上的代码活跃度,还是 Redhat 在RHEL6.5中集成对Docker的支持, 就连 Google 的 Compute Engine 也支持 docker 在其之上运行。 一款开源软件能否在商业上成功,很大程度上依赖三件事 - 成功的 user case(用例), 活跃的社区和一个好故事。 dotCloud 自家的 PaaS 产品建立在 docker 之上,长期维护且有大量的用户

3、将uboot,kernel,rootfs下载到开发板上

心不动则不痛 提交于 2020-03-09 19:05:47
将uboot,kernel,rootfs下载到开发板上 1、为什么要下载 所谓下载,也称烧录,部署。 1.1、什么是u-boot Hi3518EV200 单板的 Bootloader 采用 U-boot。 u-boot是一种普遍用于嵌入式系统中的Bootloader,Bootloader是在操作系统运行之前执行的一小段程序,通过它,我们可以初始化硬件设备、建立内存空间的映射表,从而建立适当的软硬件环境,为最终调用操作系统内核做好准备。Boot Loader的主要运行任务就是将内核映象从硬盘上读到RAM中,然后跳转到内核的入口点去运行,即开始启动操作系统。系统在上电或复位时通常都从地址0x00000000处开始执行,而在这个地址处安排的通常就是系统的Boot Loader程序。 1.2、什么是kernel 烧录完uboot之后,开始烧录kernel。Kerne是指大多数操作系统的核心部分。它由操作系统中用于管理存储器、文件、外设和系统资源的那些部分组成。操作系统内核通常运行进程,并提供进程间的通信。操作系统必须要以内核为基础运行,内核提供最基本的对计算机的操作,并且让计算机底层尽量安全和容易管理。 1.3、 什么是rootfs 根文件系统是内核启动时所mount的第一个文件系统,内核代码映像文件保存在根文件系统中

解析kernel 2.6.24使用NMI中断对Hard lock的处理

删除回忆录丶 提交于 2020-03-08 16:06:38
CPU的NMI中断常用作Hard lock检测。无论CPU是否lock,硬件始终要保证NMI中断能够被响应。作为Hard lock检测的方法,当CPU硬件锁死后,其时钟中断可能无法被响应,导致时钟计数值无法变化。 在NMI中断处理时,通过判断当前时钟计数值是否与前一次NMI中断的时钟计数值相同来判断CPU硬件死锁。该过程可以用下图表示: 一. 时钟计数值的处理方式 对于X86,当时钟中断来临时,kernel都会在中断上文中对时钟计数器+1。在低分辨率模式时,计数器+1的处理过程如下: //arch/x86/kernel/time_32.c irqreturn_t timer_interrupt(int irq, void *dev_id) { /* Keep nmi watchdog up to date */ per_cpu(irq_stat, smp_processor_id()).irq0_irqs++; //... } 开启高分辨率模式后,在0xef本地APIC中断处理中对时钟计数值+1,其处理如下: //arch/x86/kernel/apic_32.c /* The guts of the apic timer interrupt */ static void local_apic_timer_interrupt(void) { int cpu = smp

强制重启Linux系统的几种方法

泪湿孤枕 提交于 2020-03-06 08:44:33
实际生产环境中某些情况下 Linux 服务器系统在出现致命错误需要远程进行重启,通过常规的 reboot 、 init 6 等方法无法正常重启(例如重启时卡在驱动程序里等情况),这时就需要通过下面介绍的几种特殊的方法进行强制重启。 注意 下面这些强制重启 Linux 的方法都是直接跳过 umount 文件系统及 sync 等操作,可能导致数据损坏,不在特殊情况下请勿使用。另外当然这些都是需要 root 超级用户权限的哦。 reboot 命令 直接通过运行 reboot -nf 命令,这样重启时可以指定跳过 init 的处理和 sync 操作,这样可以避免大多数情况下的问题。 magic SysRq key 方法 magic SysRq key 通过 proc 接口提供用户直接发底层命令给 kernel 的功能,可以实现关机、重启、宕机等操作,Linux kernel 需要开启 CONFIG_MAGIC_SYSRQ 才可以支持 magic SysRq key。 运行下面两条命令就可以直接强制重启系统: 1 2 [root@localhost ~] # echo 1 > /proc/sys/kernel/sysrq [root@localhost ~] # echo b > /proc/sysrq-trigger 相应的直接强制关机的命令: 1 2 [root@localhost ~]

CentOS7运行报错kernel:NMI watchdog: BUG: soft lockup - CPU#0 stuck for 26s

旧时模样 提交于 2020-03-06 08:41:53
CentOS内核,对应的文件是/proc/sys/kernel/watchdog_thresh。CentOS内核和标准内核还有一个地方不一样,就是处理CPU占用时间过长的函数,CentOS下是watchdog_timer_fn()函数。 如果你的内核是标准内核的话,可以通过修改/proc/sys/kernel/softlockup_thresh来修改超时的阈值 参考文献:https://zhidao.baidu.com/question/1829924822713415300.html 首先,这条信息可以输出,说明即使发生死锁或者死循环,还是有代码可以执行。第二,可以通过这个日志信息,找到对应的处理函数,这个函数所在的模块就是用来处理CPU被过度使用时用到的。所以通过这个事情,可以看到内核打印出的只言片语都有可能成为你解决问题的关键,一定要从重视这些信息,从中找出有用的东西。 我经常看的内核版本是官方的2.6.32内核,这个版本中我找到的函数是softlockup_tick(),这个函数在时钟中断的处理函数run_local_timers()中调用。这个函数会首先检查watchdog线程是否被挂起,如果不是watchdog线程,会检查当前占有CPU的线程占有的时间是否超过系统配置的阈值,即softlockup_thresh。如果当前占有CPU的时间过长

报错kernel:NMI watchdog: BUG: soft lockup - CPU#0 stuck for 26s

情到浓时终转凉″ 提交于 2020-03-06 08:40:59
近期在服务器跑大量高负载程序,造成cpu soft lockup。如果确认不是软件的问题。 解决办法: #追加到配置文件中 echo 30 > /proc/sys/kernel/watchdog_thresh #查看 [root@git-node1 data]# tail -1 /proc/sys/kernel/watchdog_thresh 30 #临时生效 sysctl -w kernel.watchdog_thresh=30 #内核软死锁(soft lockup)bug原因分析 Soft lockup名称解释:所谓,soft lockup就是说,这个bug没有让系统彻底死机,但是若干个进程(或者kernel thread)被锁死在了某个状态(一般在内核区域),很多情况下这个是由于内核锁的使用的问题。 vi /etc/sysctl.confkernel.watchdog_thresh=30 参考文章: CentOS内核,对应的文件是/proc/sys/kernel/watchdog_thresh。CentOS内核和标准内核还有一个地方不一样,就是处理CPU占用时间过长的函数,CentOS下是watchdog_timer_fn()函数。 如果你的内核是标准内核的话,可以通过修改/proc/sys/kernel/softlockup_thresh来修改超时的阈值 参考文献

宏内核、微内核和混合内核

孤街浪徒 提交于 2020-03-05 16:57:05
Monolithic Kernel 无论是Windows还是Linux等等,这些寻常使用的操作系统,都是用内核和管理和使用硬件的。 宏内核。 Monolithic,词典义是『单一的,庞大的』,简单理解,就是内核的所有功能,从文件系统,到内存管理,到CPU调度,等等等等,都放在内核态中。 这样做有一个很大的好处,那就是所有这些功能都在同一个地址空间下,大家做通信会非常方便,而且通信的成本肯定也是低的 ,实现起来会快糙猛一些。就是很莽很厉害。 但是,这样也会导致一些其他问题。我觉得最大的问题就是代码复杂度会提高。Linux Kernel的代码量太美不看。同时,这样也会导致容错性不是很好,只要一个地方出了问题,会导致整个Kernel都挂掉。 Micro Kernel 那既然Monolithic Kernel有这样的问题,做研究的人一定不会放过这样的好机会,于是就有了微内核的概念。所谓微内核,是指内核只提供最必要的功能,比如IPC,内存管理,CPU调度等等。而其他,诸如文件系统,网络IO等等,都放在用户态来实现。 这样做的好处首先是内核变小了,内核是常驻内存的,小了自然就节约了内存的空间。但是,这样的性能就会不如很莽很厉害的Monolithic Kernel要好,因为IPC通信的overhead还是有一些的。 Hybrid Kernel 那既然Micro Kernel和Monolithic

Java NIO 底层原理

旧城冷巷雨未停 提交于 2020-03-05 10:06:43
目录 1.1. Java IO读写原理 1.1.1. 内核缓冲与进程缓冲区 1.1.2. java IO读写的底层流程 1.2. 四种主要的IO模型 1.3. 同步阻塞IO(Blocking IO) 1.4. 同步非阻塞NIO(None Blocking IO) 1.5. IO多路复用模型(I/O multiplexing) 1.6. 异步IO模型(asynchronous IO) 小结一下: 本文的知识,在《 Netty Zookeeper Redis 高并发实战 》 1.1. Java IO读写原理 无论是Socket的读写还是文件的读写,在Java层面的应用开发或者是linux系统底层开发,都属于输入input和输出output的处理,简称为IO读写。在原理上和处理流程上,都是一致的。区别在于参数的不同。 用户程序进行IO的读写,基本上会用到read&write两大系统调用。可能不同操作系统,名称不完全一样,但是功能是一样的。 先强调一个基础知识:read系统调用,并不是把数据直接从物理设备,读数据到内存。write系统调用,也不是直接把数据,写入到物理设备。 read系统调用,是把数据从内核缓冲区复制到进程缓冲区;而write系统调用,是把数据从进程缓冲区复制到内核缓冲区。这个两个系统调用,都不负责数据在内核缓冲区和磁盘之间的交换。底层的读写交换

Ninject依赖注入(一)

本秂侑毒 提交于 2020-03-04 21:17:23
Ninject学习笔记(一) Ninject学习笔记(一) 理解依赖注入 DI概念 什么是DI? DI是如何工作的? 什么是DI容器 使用Ninject 如何使用Ninject Ninject对象生命周期 暂时范围 单例范围 线程范围 请求范围 自定义范围 Ninject模块 从xml配置依赖(Ninject XML扩展) Ninject约定(Ninject Convention扩展) 选择程序集 选择组件 选择服务类型 绑定配置 理解依赖注入 DI概念 依赖注入,或者控制反转,降低代码耦合度。Ninject是一个轻量级.NET DI框架。 什么是DI? 一个例子,木匠伐木,需要工具斧子。 class Carpenter{ Axe axe = new Axe(); void Lumber() { axe.Cut(); }} 代码中,木匠依赖于斧子。此时需求变了,木匠买了木锯,那么上面的代码必须从新修改然后进行编译。再比如木匠比较爱惜工具,决定两种工具换着用,再比如,木匠决定提高生产率,购置了电锯等等。作为程序员来说,如果每次需求变更就重新编码,那么你会发现自己深陷沼泽地。 DI的出现就是为了解决这一问题的。它是一种编程方式,依赖关系不需要调用者来管理,统一由框架管理。“不要找我们,我们来找你”。 DI是如何工作的? 简简单单一句话——对接口编程,而不是对具体实现编程

核函数

﹥>﹥吖頭↗ 提交于 2020-03-03 15:51:29
一、常用核函数: 1.线性核函数 : 线性核函数(Linear Kernel)是多项式核函数的特例,优点是简洁,缺点是对线性不可分数据集没有解决办法。主要用于线性可分的情况,我们可以看到特征空间到输入空间的维度是一样的,其参数少速度快,对于线性可分数据,其分类效果很理想,因此我们通常首先尝试用线性核函数来做分类,看看效果如何,如果不行再尝试其他的。 2.多项式核函数: 多项式核函数(Polynomial Kernel)可以实现将低维的输入空间映射到高纬的特征空间,但是多项式核函数的参数多,当多项式的阶数比较高的时候,核矩阵的元素值将趋于无穷大或者无穷小,计算复杂度会大到无法计算。 3.高斯核函数(RBF) 高斯核函数(Gaussian Kernel)也叫径向基核函数(Radial Basis Function),是一种局部性强的核函数,该函数的形状为钟形曲线,参数\sigma控制曲线的宽度(胖瘦)。可以把输入特征向量扩展到无限维度的空间里。高斯核函数计算出来的值永远在0到1之间。其可以将一个样本映射到一个更高维的空间内,该核函数是应用最广的一个,无论大样本还是小样本都有比较好的性能,而且其相对于多项式核函数参数要少,因此大多数情况下在不知道用什么核函数的时候,优先使用高斯核函数。 4.sigmoid核函数 sigmoid核函数(Sigmoid Kernel)