droplet的Blog

关于spinlock的二三事
由 droplet 在 周五, 2010-08-20 18:33 提交 编程实践spinlock是multicore编程里面最基本的一个同步机制,关于spinlock,有以下事实
1) 为什么需要spinlock?
spinlock需要忙等待,thread不能切换出去做其他事,这与其他一下同步机制,比如semaphore不太
一样。所以spinlock的用途和其他同步机制不同,比如从网卡收包,假设多个thread都可以从网卡收包,
并把收到的包放入一个队列,队列是用spinlock保护的,如果不忙等待,而是可以切换出去,就需要保存
当前thread的状态可以参数,也就是当前这个包需要找一个地方保存起来,然后这个thread才能切换出去
做其他事情,而新的thread调度进来之后,才能继续原来的工作(thread可以放到等待队列,然后被唤醒),
这个在realtime系统是不行的,因为packet需要被及时处理。如果处理的时间不能确定,latency就会很大,
会影响其他应用。
2) spinlock的各线程是相互竞争的,谁能获取锁是不确定的,但是机会是平等的。一个release lock,然后再
获取锁的thread,机会就比忙等待的线程小一点,因为cache flush也load instruct都需要时间。
3) 需要lock哪些东西?
使用spinlock的目的是为了在访问某个数据结构时,数据结构的状态是确定的,比如多个CPU同时执行
a += 1
这段代码不是原子的,如果没有spinlock,每个CPU在访问a是,它的状态都不是确定的,那么,最后的结果就是
不确定的。所以需要这个动作顺序地执行。如果程序的执行不依赖于数据结构的状态,那么就不需要锁。比如在
一个数组里面查找某个数
+--2--+--3--+-4---+-4---+

Toy vs tool
由 droplet 在 周四, 2010-08-12 18:57 提交 业界评论最近在www.youxia.org上看许多安全产品的介绍,感觉产品太多了,每一种都有许多厂家在做,而且还有很多oem等等。
很热闹,也很混乱。但是在这个行业能够立足,并且发展的,是那些做tool的公司,而不是做toy的公司。如果只是个玩具,
当然只要有基本的功能就可以了,但是要做在用户那里能够工作的产品,就需要很多产品化的东西。所谓的产品化,需要考虑
以下几个问题:
1)提供哪些功能,哪些是真正有用的功能?并不是功能越多就越厉害,多并不代表能用;在实验室里能用,并不代表在真实环境
里面能用;在小流量的情况下能用,并不代表在大流量下也能用。做出来的功能,不是为了当摆设,需要哪些,舍弃哪些,需要产品
定义的人好好考虑。
2)是否有可持续的roadmap。如果一个产品没有roadmap,那么认真的客户是不会考虑这个产品的。因为一个产品不可能一次就
做得很完美,不需要增加新的功能,不需要改善性能等等。出产品需要一个周期,在这个周期里面,需要给客户一些promise,一些
confidence,也就是说产品在不断改进之中。产品的未来是可预见的,这样用起来才放心。
3)持续改进的措施。需要从过去的错误或者经验里面学习。没一次产品升级,都能改进原来的不足和缺陷。在产品生命周期里面,对
bug/issue等等,有持续的跟踪。只有这样,才能学习和积累。否则当前做的事对未来一点帮助都没有,做了有什么意义。任何一个在
行业内领先的公司,都有比其他公司更多,更深的积累。不单是技术,也包括市场,服务等等。

Optimizing for instruction caches
由 droplet 在 周一, 2010-08-09 10:35 提交 编程实践
What is ALG for?
由 droplet 在 周三, 2010-08-04 14:47 提交 编程实践ALG(application level gateway)的作用是什么?
1)connectivity,也就是允许application的traffic 通过。特别是在application使用动态端口的情况下,policy/acl一般是
无法静态配置的,所以需要ALG动态地打开协议端口,允许traffic通过。
2)NAT aware,如果application是穿过nat box,需要ALG改动payload里面的地址,并建立地址与地址直接的映射,否则
application还是无法建立连接。这里无法连通的原因是地址不匹配,而不是access control。
3) security,这里面有几个含义。一是protocol验证,对非法的协议验证;二是防止DoS攻击。网络层是不知道具体的协议
是什么,而application层知道,所以可能控制的更精细。网络层的access control/dos等等,是第一道门,在application层,
可以更精确,也更准确。让ALG做这个事是勉为其难,不过到了application level,功能都是相通的,谁做都一样。

Preemptive or cooperative?
由 droplet 在 周二, 2010-08-03 13:58 提交 编程实践操作系统分为preemptive(抢占式)和cooperative(协作式),这两种方式各有利弊,preemptive
的好处是系统对外部事件可以快速响应,缺点是编程复杂,因为可以抢占,所以程序里面需要保护的
数据结构就很多;cooperative实现简单,编程简单,但是对外部事件的响应比较迟钝。
在网络系统里面,cooperative用的比较多,原因就是编程比较简单。
网络系统,是一个实时系统。因为packet在queue里面,如果不能被及时处理,就会产生丢包。所以在
data plane,会有包处理线程去polling 包队列。这就会产生一个问题:如果只去poll包,那么就无法响应
其他事件,比如console输入,输出等。如果有多个CPU,可以用专门的CPU去运行control plane,专门
的CPU去运行data plane。如果只有一个CPU,就需要在control plane和data plane之间分配好CPU资源。
在任何时刻,系统应该是可管理的,否则系统就不可控。
为了保证data plane的线程不会运行超过时间限制。一般都会注册一个watchdog,定时去检查watchdog的
变量,如果这个变量没有被更新,就会将线程crash并生成coredump。这样做的目的是防治线程死锁,死循环,或者
占用CPU太长。因为系统中需要处理的事情很多,不能让一件事情占用了所有的CPU资源。如何分配CPU资源,就需要
协作。任务之间是相互影响的,我们的工作是使任务之间平衡,某一项指标高并不代表系统性能的提升,这一点很
重要。所以在线程里面手动toggle watchdog,可能会增加本线程的执行时间,但是对其他任务就会有影响。
在cooperative的系统里面,系统的平衡不是自动达到的,需要任务之间的协调,这也是需要优化的地方。

spinlock, cache line align, performance
由 droplet 在 周一, 2010-08-02 14:56 提交 编程实践前几天同事碰到一个issue,spinlock死锁,原因是两个spinlock在定义的时候是紧挨着,也就是说,两个spinlock
在同一个cache line里面,在multicore系统里面,cacheline的更新需遵循MESI(Modified, Execlusive, Shared,
Invalid)协议。如果两个线程各得到其中一个锁而去获取另一个锁,这时就会出现死锁。
同一个Cache line的读写操作也会导致cache的颠簸,这里有一篇文章,描述了这种现象。
Cache is King -or- Things are about to get MESI
有关内存的话题,在mcore编程里面,永远都有新东西。

源代码分析工具
由 droplet 在 周一, 2010-07-26 16:54 提交 编程实践有没有一个工具,可以统计函数或变量引用的次数,在下面几种情况下,这个统计工具就很重要
1)inline函数统计。每个inline的调用次数,inline函数的长度等等。inline函数在编译时会被展开,这样会增加obj的大小。所以在
使用inline的时候,一定要控制inline函数的大小,10多行代码还可以接受,再多就不行了。如果inline在很多地方引用,展开之后的
规模也是很可观。obj文件增大,一个直接的后果就是增加了cache miss的机会,因为不可能把代码都load到cache里面。
2)宏的统计。最好是不要使用宏。如果一定要使用,最好不要用宏定义函数。宏的长度和引用计数也非常重要,它的影响与inline函数
类似。
3)函数的长度统计。每个函数有多少行代码。这个可能没有从obj文件里得到的代码长度有用,但是从源代码分析更方便一点,不用每次
都编译代码。
如果能从代码或者是obj文件里面发现重复的代码,这样对代码优化就很有帮助。尽量避免重复。这样对维护也有好处。

基于遥控器,电视的操作界面
由 droplet 在 周日, 2010-07-25 16:04 提交 创业灵感如果把电视变成家庭娱乐中心,哪种操作方式会成为主流哪?
电脑用鼠标,键盘。
手机用触摸屏。
电视用的是遥控器。
在电视上用触摸屏,这个好像不太可取。因为一般都会教育小孩离电视远一点,而且触摸屏会把画面搞得很脏,用触摸屏也复杂了一点。
键盘,鼠标更是不适合远程操作,而且老人也不适应。
如果用遥控器来操作,那么用电脑或者手机的操作方式就不合适了。遥控器的操作界面应该比较简单,分类也很明确。polycom的视频会议系统就是用遥控器操作的,可以做为一个借鉴。

HTML5, video
由 droplet 在 周日, 2010-07-25 15:55 提交 创业灵感女儿最近送到宁夏避暑去了,但是又想看看她最近的变化,只能通过网络视频来看。没有别的手段,必须通过QQ视频。但是感觉QQ视频用起来不方便。它主要是为聊天设计的,并不是以视频通话为主,通话双方的窗口调整,摄像头的调整等等,都比较麻烦。如果能够提供基于WEB的视频通话,只要是注册用户,直接可以通过在web上点击就可以通话,这样用起来是不是更简单一点?
HTML5已经可以支持原生的video了,不需要插件支持,在这上面开发新的应用,会更方便。目前web2.0的互动还只是文字的互动,如果能够加入video/audio的互动,将会是一个新的应用。QQ这种即时通讯工具可以直接在web上实现,一个浏览器就可以搞定所有的东西。在未来三网合一的趋势下,把web直接在电视上用,应该是个很好的方向。

云计算的是与否?
由 droplet 在 周二, 2010-07-13 11:46 提交 业界评论什么是云计算,在网上可以搜索到很多定义。我们参考这个来看看云计算的特性
http://csrc.nist.gov/groups/SNS/cloud-computing/cloud-def-v15.doc
1)On-demand self-service:提供给用户扩展服务的接口
2)Broad network access:多种接入手段(这个有什么意义?)
3)Resource pooling:虚拟资源,包括计算,存储,网络,平台等等,支持多租户(不是多用户,这个要注意)
4)Rapid elasticity:弹性,可扩展
5)Measured Service:服务可计量(为了收钱:))
再加一条 6)Internet based(天生是为全球用户服务?)
在现实世界里,也有很多云计算的服务提供商,但是,云计算和我们目前所用的服务,有哪些区别哪?
以SaaS(software as a service)为例。现有的一些服务,比如
1)Webmail。有很多Webmail提供商,但是他们提供的是云计算服务吗? 这是多用户,而不是多租户。因为一个租户
需要的是独立的域名,而不是诸如hotmail.com或者是gmail.com的帐号。就算是有vip.sina.com也不行。一个租户需要
对自己管理的用户有控制权,否则SaaS就不成立。这么说来,SaaS只是为企业用户服务的吗?对于个人用户怎么办?是不是
所有的软件都能SaaS化哪?常见的例子,比如CRM(salesforce.com)一般都是企业用户用。但是Google docs哪?这个对
个人用户是免费的,对企业用户是收费的。Google docs对个人用户的功能和企业用户是一样的吗?如果一样,企业用户有必要
买这个服务吗?

最新评论
17 小时 23 分钟 前
1天 1 小时 前
1天 20 小时 前
2 天 19 小时 前
5 天 16 小时 前
5 天 17 小时 前
5 天 21 小时 前
1周 21 小时 前
1周 1天 前
2 周 1天 前