Netflix Blog-关于SVT-AV1

这篇文章 Introducing SVT-AV1: a scalable open-source AV1 framework 是出自 Netflix Technology Blog SVT-AV1是什么 ? SVT-AV1是2019年4月8日, Intel与Netflix合作开发的视频软件解码器,SVT Scalable Video Technology 是Intel的开源框架,Visual Cloud(视觉云)开发技术人员提供高性能的视频编码库。 视频标准历史 视频压缩标准两大组织: ITU-T and MPEG (ISO), 第一个成功的数字视频标准MPEG-2, 之后有 H.264/AVC是现代设备普遍支持的标准。 一些公司开发标准如Microsoft’s VC-1 and Google’s VPx 。 AOM(the Alliance for Open Media)意在生成一个先进的, 免税的视频解码器。 包括,Amazon, Apple, ARM, Cisco, Facebook, Google, IBM, Intel, Microsoft, Mozilla, Netflix, Nvidia, and Samsung, AOM在2018年发布了为AV1 解码器规范。 (对应的 ITU-T and MPEG组织退出了 HEVC(H.265, MEPG-H part2), 这个还是收税的) AV1编码器工具 libaom 目前是基于VP9,VP8基础上开发, 再google的git上通过AOM成员维护。 rav1e :open-source AV1 不过是用Rust语言编写的。 ...

2019-05-19 · 1 min · 137 words

查看Linux分区和硬盘空间命令

常用的硬盘分区及空间信息查看命令 lsblk: 列出所有的block设备, 但是只显示大小不显示使用率,还可以显示为挂在的设备 [root@centosgpt grub2]# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 100G 0 disk ├─sda1 8:1 0 2M 0 part ├─sda2 8:2 0 1G 0 part /boot ├─sda3 8:3 0 59G 0 part │ ├─centos-root 253:0 0 50G 0 lvm / │ ├─centos-swap 253:1 0 4G 0 lvm [SWAP] │ └─centos-home 253:4 0 5G 0 lvm /home ├─sda5 8:5 0 1G 0 part │ └─md0 9:0 0 2G 0 raid5 │ └─raidvg-raidlv 253:2 0 1.5G 0 lvm /srv/raidlvm sdb 8:16 0 20G 0 disk ├─sdb1 8:17 0 1M 0 part ├─sdb2 8:18 0 1G 0 part └─sdb3 8:19 0 19G 0 part └─ubuntu--vg-ubuntu--lv 253:3 0 4G 0 lvm sr0 11:0 1 748M 0 rom blkid 列出设备的属性比如uuid或者使用文件系统类型 ...

2019-05-18 · 3 min · 569 words

grub2 配置centos7,ubuntu

 一 虚拟机安装centos7,ubuntu配置grub2启动 1. 环境准备及安装 1. VMWARE 安装centos7 , 参考鸟哥私房菜第三章 2. 下载了Ubuntu最新的server版本。 3. 虚拟机增加硬盘(选用默认SCSI类型),安装 Ubuntu19, Ubuntu镜像文件挂载到VMWARE的CDROM。 4. VMWARE重启后按F12,修改BIOS中的Boot菜单项的启动顺序, 将CDROM上移到Hard disk上。 5. 重启虚拟机安装提示安装, 将Ubuntu安装到新增加的硬盘上。我安装 Ubuntu 按照LVM方式进行分区。 2. 配置 boot loader 软件grub2: 下面使用两种方式配置下grub2: 1). 通过grub2-mkconfig 自动扫描: 先看下本地磁盘的信息使用 lsblk命令 [root@centosgpt grub.d]# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 100G 0 disk ├─sda1 8:1 0 2M 0 part ├─sda2 8:2 0 1G 0 part /boot ├─sda3 8:3 0 59G 0 part ...

2019-05-16 · 5 min · 972 words

LeetCode - Merge Two Sorted Lists

题目: Merge two sorted linked lists and return it as a new list. The new list should be made by splicing together the nodes of the first two lists. Example: Input: 1->2->4, 1->3->4 Output: 1->1->2->3->4->4 解题: 新申请哨兵节点重组新的链表返回 。 比较两个链表选择较小的接入新链表,对于较长的链表,将其剩余部分接到新链表的尾部。 实现: struct ListNode* mergeTwoLists(struct ListNode* l1, struct ListNode* l2){ struct ListNode* result = (struct ListNode *)malloc(sizeof(struct ListNode) ); if (result == NULL){ return NULL; } result->next = NULL; struct ListNode* l3 = result; while(l1!=NULL && l2!=NULL){ if (l1->val<l2->val){ l3->next = l1; l1= l1->next; l3= l3->next; }else{ l3->next = l2; l2= l2->next; l3= l3->next; } } if (l1!=NULL){ l3->next = l1; } else if (l2!=NULL){ l3->next = l2; } return result->next; } 递归方式:比较两个链表当前节点较小节点,这个结点的next节点与另外一个链表的当前节点比较,更新next节点。终止条件,如果一个节点为空,则返回另外一个节点。 ...

2019-05-12 · 1 min · 148 words

LeetCode – Add Two Numbers

题目: You are given two non-empty linked lists representing two non-negative integers. The digits are stored in reverse order and each of their nodes contain a single digit. Add the two numbers and return it as a linked list. You may assume the two numbers do not contain any leading zero, except the number 0 itself. Example: Input: (2 -> 4 -> 3) + (5 -> 6 -> 4) Output: 7 -> 0 -> 8 Explanation: 342 + 465 = 807. 解题: 生成结果链表哨兵节点, 从输入两个链表的开始节点相加 再加上进位值 carry, 得到结果sum, sum/10 存放到变量进位结果变量carry中, 将sum%/10为当前位的值,存放到链表当前节点,同时两个输入链表,结果链表移动到下一个节点操作。 循环处理直到链表遍历完毕或者进位为0,返回哨兵节点的下一个节点。 ...

2019-05-12 · 2 min · 300 words

gethostbyname函数实现分析

DNS : DNS是一个分层级 (hierarchical ),分布式(decentralized)的网络数据库,完成主机名称和IP地址之间的相互映射。DNS名称空间包含一个树状结构,树根没有命名, 下面是树的最高层为顶级域名, 顶级域名包括: 顶级域名(gTLD),国家代码顶级域名(ccTLD), 国际化国家设施顶级域名(infrastructure TLD), 下面一层是权威域名服务器。其中权威域名服务器对DNS请求进行应答返回IP地址。 图片来自DNS wiki DNS协议: dns协议包含两部分: 1. 对DNS特定名称查询的查询、响应协议 2. 名称服务器用户交换数据库记录的协议(区域传输) 应用访问DNS通过地址解析器(resolver), 通常通过TCP,UDP协议通讯是需要将主机名转换为IPv4, IPv6地址。 gethostbname: 需要socket通过域名方式完成连接 , 可以通过API gethostbyname 函数完成。gethostbyname 函数是 glibc 库中提供一个域名解析的函数。 调用方法也相对简单,存在问题是范围结果是 static 类型变量,存在数据被覆盖的情况。 函数定义: #include <netdb.h> extern int h_errno; struct hostent *gethostbyname(const char *name); The hostent structure is defined in <netdb.h> as follows: struct hostent { char *h_name; /* official name of host */ char **h_aliases; /* alias list */ int h_addrtype; /* host address type */ int h_length; /* length of address */ char **h_addr_list; /* list of addresses */ } #define h_addr h_addr_list[0] /* for backward compatibility */ DEMO程序: ...

2019-05-11 · 5 min · 969 words

Netflix Blog - Tips for High Availability Spinnaker介绍

这篇文章Tips for High Availability 是出自 Netflix Technology Blog 随着Netflix 用户增多,虽然没有出现扩展性问题,但Netflix一直设法提高服务的整体可用性 本文通过NetFlix的Spinnaker 平台实践为基础,介绍了一些最佳实践: 1. 区域部署: 2. 红黑部署: 3. 使用图形发布窗口; 4. 非工作日不触发自动部署; 5. 能够使用 Chaos Monkey; 6. 投产之前进行单元, 集成,冒烟测试; 7. 可以手工干预判断; 8. 发布测试通过的产品; 9. Page Owner通过页面找到能解决他的人; 10.知道如何快速完成发布的回退; 11. 部署成功应已应用状态正常为前提; 12. 部署成功后的自动项目组 13. 自动执行非典型部署, 而不是手工 14. 预先验证。 作者介绍的 Spinnaker 为Netflix 的持续交付平台, 他认为提到从错误中不断学习,并根据这些最佳实践创建相关工具或平台,从而达到提高服务的可用性的目标,同时将工程师解放出来去做更有价值,有意义的事情。

2019-05-11 · 1 min · 49 words

shell中的 2>&1

使用说明: strace跟踪应用程序时,有标准输出和错误输出,需要将程序执行的输出标准输出和错误输出重定向到一个日志文件中。 strace ./gethostbyname www.baidu.com > gethostbyname.default.log 2>&1 重定向说明: 在shell命令执行前, 输入,输出可以通过特殊符号设置完成重定向(redirected), 重定向允许命令文件可以复制, 打开,关闭。 复制文件操作符号格式如下 [n]>&word 1. 如果 n没有指定默认为1 (标准输出) 2. 如果word没有指定,重定向报错; 3. 如果word设置 ‘-’ , 文件标识符 n关闭 4. 如果n忽略,word也不是数字或‘-’,标准输入,输出重定向都被重定向到word。 验证: 准备: echo “hello” >txt1 验证: 主要验证一下3,4 3. cat txt1 > cat.log >&- cat: standard output: Bad file descriptor 4. cat txt1 txt2 >&cat.log cat cat.log hello cat: txt2: No such file or directory 参考: GNU Redirections Understanding Shell Script’s idiom: 2>&1

2019-05-11 · 1 min · 71 words

LeetCode - Design Linked List

Photo by Tim Swaan on Unsplash 题目: Design your implementation of the linked list. You can choose to use the singly linked list or the doubly linked list. A node in a singly linked list should have two attributes: val and next. val is the value of the current node, and next is a pointer/reference to the next node. If you want to use the doubly linked list, you will need one more attribute prev to indicate the previous node in the linked list. Assume all nodes in the linked list are 0-indexed. ...

2019-04-30 · 4 min · 735 words

编程规范问题导致SIGCLD 屏蔽失效

 进程出现状态进程,(zombie process )。对于创建多进程的场景, 子进程状态改变产生此信号, 对SIGCLD信号处理不当,会导致僵尸进程。 SIGCLD 是 System V(比较商业) 定义的一个信号 与SIGCHLD一样 。 一般处理方式: 1. 忽略SIGCLD信号; 2. 父进程调用wait等待所有子进程都终止。 应用属于多进程模式,父进程主要功能就是根据配置信息创建多个业务子进程, 我们选用了第一种方式。 在不同架构体系下, SIGCLD对应的数字是不一样的。 在LINUX-X86平台 , SIGCLD=17 ,应用屏蔽了小于20的信号量, 当迁移到AIX-SPARC SIGCLD(SIGHCLD)=20,原有应用屏蔽未生效。 目前采取了简单粗暴的方案, 调整上限为 SIGRTMAX. 编程不够规范导致,这一问题在: 皓哥推荐 的 C codeing stardard 中的 No Magic Numbersv , 中也提到了。 类似的一些代码规范, 如:代码大全 中12.7 提到了Named Constants 。 在实际编程中要避免使用文字量, 根据现有系统改造时, 要根据情况选用 const, enum, #define,在调用外部API也要使用具名变量方式,这样会使自己的代码更加规范整洁。 参考文档: signal(7)

2019-04-30 · 1 min · 56 words