ARTS-week10
Algorithms
本周算法题:
count-and-say
思路:看题目看了好一会才理解,第i+1个字符串是第i个字符串的读法。
1 | class Solution { |
1 | class Solution { |
Review
本周阅读英文文章 Fingerprinting
IDFA:适用于IOS设备的广告标识符
AAID:适用于Android设备的Google广告ID
指纹识别在移动设备上的准确度通常低于桌面设备。一个原因是桌面浏览器提供了更多的数据(例如窗口大小),可用于唯一地标识用户。在移动设备上,特别是IOS及其有限数量的设备类型,用于指纹识别的数据更加有限。
Technique
记录一下本周在《深入剖析Kubernetes》中学习到的Linux Cgroups的知识。
Linux Cgroups(Linux Control Group)是Linux内核中用来为进程设置资源限制的一个重要功能。它主要作用就是限制一个进程组能够使用的资源上限,包括CPU、内存、磁盘、网络带宽等。此外Cgroups还能对进程进行优先级设置、审计、以及将进程挂起和恢复等操作。
在Linux中,Cgroups给用户暴露出来的操作接口是文件系统,即它以文件和目录的方式组织在操作系统的/sys/fs/cgroup
路径下。
在Ubuntu16.04中
1 | mount -t cgroup |
在 /sys/fs/cgroup下面有很多诸如 cpuset、cpu、 memory 这样的子目录,也叫子系统。而在子系统对应的资源种类下,可以看到该类资源具体可以被限制的方法。比如,对CPU子系统来说,我们就可以看到如下几个配置文件,这个指令是:
1 | ls /sys/fs/cgroup/cpu |
cfs_period和cfs_quota需要组合使用,可以用来限制进行在长度为cfs_period的一段时间内,只能被分配到总量为cfs_quota的CPU时间。
如何使用这样的配置文件?
1 | root@ubuntu:/sys/fs/cgroup/cpu$ mkdir container |
这个目录就称为一个”控制组”。操作系统会在新创建的container目录自动生成该子系统对应的资源限制文件。
后台执行:
1 | while : ; do : ; done & |
执行了一个死循环,将计算机的CPU打到100%,根据输出,可以看到PID是4662。
查看container目录下的文件,看到container控制组里的CPU quota还没有任何限制(即:-1),CPU period则是默认的100ms(100000 us)。
1 | cat /sys/fs/cgroup/cpu/container/cpu.cfs_quota_us |
通过修改文件内容来限制:
1 | echo 20000 > /sys/fs/cgroup/cpu/container/cpu.cfs_quota_us |
它意味着在每100ms的时间里,被该控制组限制的进程只能使用20ms的CPU时间,也就是说这个进程只能使用到20%的CPU带宽。
接下来将被限制的PID写入container组里的tasks文件,上面的设置就会对该进程生效:
1 | echo 4662 > /sys/fs/cgroup/cpu/container/tasks |
Share
本周分享在Ubuntu16.04上安装和使用Docker:
https://www.digitalocean.com/community/tutorials/how-to-install-and-use-docker-on-ubuntu-16-04