系统概况: host 和 guest 都是用的 Ubuntu Server 16.04系统。 我的 host 机上有三块网卡2块有线网卡(接口 enp1s0 和 enp3s0)和1个无线网卡(接口 wls2s0)。 我的 host 机通过无线网卡连在一个路由器上,并因此能够连接到互联网,所在的网段是192.168.3.0\24,ip 固定为192.168.3.5。 其他两块有线网卡没有连接。 实验0: 效果: guest 与 guest、guest 与 host 之间可以互相 ping 通;guest 不能访问 host 所在路由器网段(192.158.3.0\24)。 方案: 在 host 中搭建了一个虚拟网桥,将 qemu-bridge-helper 工具在启动虚拟机时创建的虚拟网络接口 tap0[1,2…] 与 host 桥接在一起,我手动配置了他们的网段是192.168.4.0\24。 步骤: 1.配置 host 的 /etc/network/interfaces ,在其中加入以下内容,然后通过 /etc/init.d/networking restart 重启服务来创建网桥。 auto br0 iface […]

(发布于 April 3, 2013, 意译于12/9/2016) 原文链接 :https://lwn.net/Articles/545244/ 另一个版本的翻译(有些句子没有翻): http://kernel.taobao.org/index.php?title=%E5%86%85%E6%A0%B8%E6%9C%88%E6%8A%A52013-04#In-kernel_memory_compression 吐槽 : 我的天呐!!翻译完我才发现有人翻译过了,早知道我就不自己翻译了,痛苦死我了。。 PS :内容我还没有完全理解,仅供参考,以原文为准。 阿姆达尔定律告诉我们一个计算机系统肯定存在一个瓶颈。历史上,对于很多工作负载这个瓶颈都是cpu,所以人们在不断提升cpu性能。所以现在,渐渐地,ram成为了瓶颈。有时当数据在ram和disk之间来回传递时,cpu就在一边干瞪眼呢。增大ram有时并不是一个好的或者经济的做法,更快的I/O或者ssd可以缓解问题,但是不能消除这个瓶颈。 如果可以增大ram中数据的有效容量,不是很好吗?既然cpu闲置,也许我们可以拿闲置的cpu周期来专注这件事。这就是内核内压缩的目标:用闲置的cpu周期来做ram中的压缩和解压缩。 算上刚刚发布的zswap,现在有3个内核内实现的压缩方法在被建议merge到内核的内存管理(memory management, MM) 子系统:zram, zcache和zswap。乍一看可能会让人觉得一个就够了吧,但是他们三个却有很大的不同,可能面向着不同的用户群。所以就像现在内核中存在很多文件系统一样,有一天内核中也会存在多种压缩方案吧,不过这还得李纳斯大神和主要的内核开发者说了算。。。为了方便说明,本文把这些方案统称“zproject”,并对比了这些方案。我们先说明一些关键原则和压缩遇到的挑战。然后我们会从三个层次说明并详细地阐释这些zprojects设计上的不同选择,之后我们还讨论zprojects怎么和内核其他部分交互,最后给出结论。 压缩基础 要让压缩在内核中工作,内核必须把字节序列放入内存中再压缩,之后内存中也应保有压缩后的版本,以备这些数据被再次使用。压缩状态下的数据不能被读写,所以对压缩版本的数据再进行解压缩后才能继续读写这些数据。 字节序列压缩多少都可以,但还是以一个固定大小的单元压缩较方便。贯穿整个内核的一种基本的存储单元是page,一个page由PAGE_SIZE个字节组成,通常的linux支持的架构中,page的大小是4KB。如果这个page对准了PIGE_SIZE的地址分界,那么它就被称为page frame。对于每个page frame,内核在ram中都有相应的struct page结构。所有这三个zprojects都用page作为压缩的单元,并且通过开辟和管理page frames来存储压缩页。 有很多可用的压缩算法,但总的来说,高压缩比意味着高cpu周期,运行的快的算法一般压缩比较低。在时间效率和压缩率之间做出权衡很重要。这三种zprojects,默认都使用内核lib/文件夹中的LZO(1X)算法,这种算法做出了很好的权衡。然而,算法的选择还是很灵活的,也许cpu运行的算法还会被一些特殊架构的硬件压缩引擎取代呢。 一般,存在一些数据一会儿压缩一会儿解压缩的循环,数据序列大概和序列中的字节数成正比。因为页比较大,页压缩和解压缩都是很昂贵的操作,所以我们希望限制这些操作的数量。因此我们必须谨慎的选择哪些页要被压缩,尽可能找到那些可能会被再次用到同时最近不会用的页,以免把cpu时间浪费在重复的压缩然后立刻又解压缩上。因为压缩页不能直接访存某个字节,我们必须要保证内核清楚地辨识出哪个是压缩页,避免对压缩页中的字节尝试cpu的线性地址操作,同时保证压缩页可以被找到并可以在被访问时解压缩。

我发现。。shell脚本貌似不像C或者Python一样自带注释语法,不过拐弯抹角还是有一些方法的。。囧 方法1:利用逻辑语句 利用了逻辑语句的执行顺序,缺点是注释中不能出现括号,否则会报错! ###逻辑或前如果为真,后边的语句块自动不执行 #1 :||{ 注释内容… } #2 ((1))||{ 注释内容… } #3 true||{ 注释内容… } ###逻辑与前如果为假,后边的语句块自动不执行 #4 ((0))&&{ 注释内容… } <!–more–> #5 false&&{ 注释内容… } 方法2:利用Here Documents语法 利用了shell脚本的here documents的语法,注意<<后边是自己命名的,做到前后呼应即可,如下为两例,但是我测试的几种命名只有例1中的方法没有什么缺点,在例二或者其他命名中,如果出现反单引号`则可能会报错! #e.g. 1 :<<” 注释内容… ” #e.g. 2 :<< BLOCK 注释内容… BLOCK 方法3:利用sed命令 如果是使用vim编辑,利用sed语法,vim中的normal模式下: #全文注释: :0,$ s/^/#/ #m到n行注释: :m,n s/^/#/ #全文去注释: :0,$ s/^#// #m到n行去注释: :m,n s/^#// […]

最近由于需要实现从一个客户端电脑定时远程上传图片到阿里云服务器的功能,需要实现SCP的免密码传输。所以查资料并做了一个记录,希望对大家有帮助。 步骤 1.Client上某用户执行ssh-keygen命令,生成建立安全信任关系的证书 ssh-keygen -b 1024 -t rsa 这里如果~/.ssh/id_rsa.pub 已经存在,说明以前已经生成过,可以直接跳过这步。 2.将公钥证书id_rsa.pub内容复制到Server某用户的~/.ssh/authorized_keys目录中 ## 方法1 scp -p ~/.ssh/id_rsa.pub [username]@[server_ip]:[user_home]/.ssh/authorized_keys ## 方法2 client: cat ~/.ssh/id_rsa.pub #然后复制它 server: vim ~/.ssh/authorized_keys #然后粘贴保存 3.使用方法 #已经不需要输入密码 #比如ssh登录: <!–more–> ssh [user_name]@[ip_address] #再如scp传输文件: scp [path_to_file] [user_name]@[ip_address]:[dir_path]

刚想玩玩kvm,结果分不清这几个命令。。搜了一下,记录下来,希望对大家有帮助。 摘抄 1 在老版本中有单独的qemu-kvm模块存在,结合qemu一起做虚拟机工作。在后续新版本中,已经将qemu-kvm模块完全合并到qemu中去。因此当需要使用kvm特性时候,只需要qemu-system-x86_64 启动命令中增加参数 –enable-kvm参数使能即可。 (http://blog.csdn.net/tantexian/article/details/41281171) 2 I asked the mailing list, here’s what I got: qemu-arch like /usr/local/bin/qemu-x86_64 is for running a program of that arch on the host machine of what ever arch, but not a virtual machine qemu-system-arch like /usr/local/bin/qemu-system-x86_64 is for running a system of that arch on the host […]

由于网上很多配置wifi的方式在我的伽利略开发板上都行不通,最后终于找到这个可以用的“冷门”办法: 系统配置 开发板: Intel Galileo gen2 无线网卡:PCI-e intel wifi link 5100 开发板系统: EGLIBC based Linux(download) 所用工具 硬件: usb无线网卡或者pci-e接口的无线网卡。 (注意如果你用的是和我一样的pci-e网卡,注意顺便买来天线接上,不然信号贼弱,这种网卡不接天线是不行的。) 软件: comman(开发板的完整版linux已经内置) 参考: 《connman百度百科》( http://baike.baidu.com/link?url=3C6RQqswxVvGMxNy7XA1-bWUBU6W0G7_Rvvsv2DRyv04nontgZ9oX7MRgeeNvMuRmjRMqf75_tqspSgjhb8Ysa )

紧接上篇文章(《Galileo开发板+微信公众平台实现简单的物联网家庭监控》( http://blog.jcix.top/2015-11-27/galileo_wechat/ ) ), 以下功能做了改进: * 实现了Galileo开发板上用USB摄像头+python版opencv监控并通过微信公众平台进行异常报警的功能。 * 通过connman实现了wifi网络的自动连接和随时修改功能。 * 通过post到服务器,实现了微信控制led灯亮、灭或者光控的功能。 视频监控功能的实现 (完整代码在github: https://github.com/zhangjaycee/galileo_pys/blob/master/cam_wechat.py ) 1.图像采集 galileo支持python的opencv库,这给简单的图像处理提供了极大的便利。 图像采集: cap = cv2.VideoCapture(0)#打开摄像头 cap.set(3,320) cap.set(4,240) while True: ret, frame = cap.read() 2.图像处理 我们要做键控,所以可以记录第一帧,然后通过帧间差别进行报警。 cap = cv2.VideoCapture(0) <!–more–> cap.set(3,320) cap.set(4,240) avg = None lastUploaded = datetime.datetime.now() motionCounter = 0 normal_count = 0 start_flag = 0 time.sleep(10) while True: […]

上次写的博客,介绍了下刚拿到galileo开发板的时候如何进行折腾。 上次折腾完后,因为我发现galileo本身和一个装着linux的arduino/pc一样,那么用它来实现一些物联网应用会比较简单,又赶上本学期的工程设计课作业,所以初步实现了一个能用微信监测室内温度和拍摄室内照片的小型物联网系统。 参考: 《鼓捣Galileo开发板的一些吐槽》( http://blog.jcix.top/2015-11-04/introduce_galileo/ ) 记录下实现过程。由于本人表述能力较差,采用简述加大量外部连接的方式进行记录。 系统功能 用微信获取室内当前温度或者一张较为实时的照片。 通过亮度传感器自动自动控制LED的亮、灭。 基本结构 系统实现最初的想法,就是让微信公众平台和开发板通过互联网直接进行信息传递,但是因为微信公众平台对我们所搭建服务器采用get和post方法进行通信,所以在没有公网ip的校园网环境,一般只能租云服务器或者VPS进行中转。 这样,系统的基本结构就变成了: 开发板外围<–>Galileo开发板<–>云服务器<–>微信公众平台<–>手机微信<–>用户 可见整个通信链将用户和外围器件连接起来,实现了简单的物联网。

这几天折腾伽利略开发板,写下一些吐槽,以便以后再看到这篇博客,仍然能记起这些值得吐槽的地方。。。也希望看到这篇博客的人能够因此少些吐槽( ╯□╰ )。。网上其实是有不少资源的,但是相对其他更热门的板子,显然找资料并不是和喝白开水一样简单,由于我表达能力较差,所以准备采用简述+大量站外链接的形式,给出一个希望不会让人误入歧途的引导。。。 介绍 Intel Galileo(点击查看中文官网),是一个兼容Arduino的x86平台的开源硬件产品。个人感觉应当注意的是,特点就是兼容Arduino和x86,这样我们既能够利用丰富的Arduino软硬件及社区资源,又能够在上边运行linux甚至windows系统,做出更复杂的系统。 相关介绍: 《x86 版的 Arduino 来了,Intel Galileo 开发板的体验、分析和应用【超长文多图】》(http://www.ifanr.com/388835 ) 《系出名門:Intel Galileo的十大特性》(http://www.leiphone.com/news/201406/intel-galileo.html ) (更多请自行百度/google) “Arduino模式” 略(自行百度) Arduino? no,Linux! Galileo可以在SD卡中装入完整版Linux镜像,一旦在装有完整版Linux镜像的SD卡插入时启动,会进入所安装的完整版Linux系统,否则,则会进入烧写入flash的裁剪版微型Linux系统。而只有安装了完整版Linux,Galileo才不仅仅只是一个Arduino。下图为Galileo开机启动过程: 参考: 《x86 版的 Arduino 来了,Intel Galileo 开发板的体验、分析和应用【超长文多图】》(http://www.ifanr.com/388835 )

环境:ubuntu 14.04 32bit 工具:psutil 对应的shell工具:ps top lsof netstat ifconfig who df kill nice free ionice iostat iotop uptime pidof tty taskset pmap 安装: 采用pip可以安装pip install psutil。(注意需要安装python-dev: sudo apt-get install python-dev) 用法举例: 获取信息 cpu信息: psutil.cpu_times() #cpu完整信息 psutil.cpu_count(logical=False) #cpu物理个数 logical默认为True即cpu逻辑个数 内存信息: mem = psutil.virtual_memory() <!–more–> print mem.total print mem.free print mem.swap_memory() # sswap分区信息 磁盘信息 网络信息 其他信息 进程管理 […]