高性能服务器架构 第四篇

转自:http://www.doserv.com/article/2012/0831/5299117.shtml

 

其他方面

我已经阐述完了影响性能的四个主要方面. 然而还有一些比较重要的方面需要说一说,大所属都可归结于你的平台或系统环境:

你的存储子系统在大数据读写和小数据读写,随即读写和顺序读写方面是如何进行?在预读和延迟写入方面做得怎样?

你使用的网络协议效率如何?是否可以通过修改参数改善性能?是否有类似于TCP_CORK, MSG_PUSH,Nagle-toggling算法的手段来避免小消息产生?

你的系统是否支持Scatter-Gather I/O(例如readv/writev)? 使用这些能够改善性能,也能避免使用缓冲链(见第一节数据拷贝的相关叙述)带来的麻烦. (说明:在dma传输数据的过程中,要求源物理地址和目标物理地址必须是连续的. 但在有的计算机体系中,如IA,连续的存储器地址在物理上不一定是连续的,则dma传输要分成多次完成. 如果传输完一块物理连续的数据后发起一次中断,同时主机进行下一块物理连续的传输,则这种方式即为block dma方式. scatter/gather方式则不同,它是用一个链表描述物理不连续的存储器,然后把链表首地址告诉dma master. dma master传输完一块物理连续的数据后,就不用再发中断了,而是根据链表传输下一块物理连续的数据,最后发起一次中断. 很显然 scatter/gather方式比block dma方式效率高)

你的系统的页大小是多少?高速缓存大小是多少?向这些大小边界进行对起是否有用?系统调用和上下文切换花的代价是多少?

你是否知道锁原语的饥饿现象?你的事件机制有没有"惊群"问题?你的唤醒/睡眠机制是否有这样糟糕的行为: 当X唤醒了Y, 环境立刻切换到了Y,但是X还有没完成的工作?

我在这里考虑的了很多方面,相信你也考虑过. 在特定情况下,应用这里提到的某些方面可能没有价值,但能考虑这些因素的影响还是有用的. 如果在系统手册中,你没有找到这些方面的说明,那么就去努力找出答案. 写一个测试程序来找出答案;不管怎样,写这样的测试代码都是很好的技巧锻炼. 如果你写的代码在多个平台上都运行过,那么把这些相关的代码抽象为一个平台相关的库,将来在某个支持这里提到的某些功能的平台上,你就赢得了先机.

对你的代码, "知其所以然", 弄明白其中高级的操作, 以及在不同条件下的花销. 这不同于传统的性能分析, 不是关于具体的实现,而是关乎设计. 低级别的优化永远是蹩脚设计的最后救命稻草. map注:下面这段文字原文没有,这是译者对于翻译的理解.

附录:奥德修斯Odysseus,又译"奥德赛",神话中伊塔刻岛国王,《伊利亚特》和《奥德赛》两大史诗中的主人公(公元前11世纪到公元前9世纪的希腊史称作"荷马时代". 包括《伊利亚特》和《奥德赛》两部分的《荷马史诗》,是古代世界一部著名的杰作). 奥德修斯曾参加过著名的特洛伊战争,在战争中他以英勇善战、足智多谋而著称,为赢得战争的胜利,他设计制造了著名的"特洛伊木马" (后来在西方成了“为毁灭敌人而送的礼物”的代名词). 特洛伊城毁灭后,他在回国途中又经历了许多风险,荷马的《奥德赛》就是奥德修斯历险的记述. "斯库拉和卡律布狄斯"的故事是其中最惊险、最恐怖的一幕.

相传,斯库拉和卡律布狄斯是古希腊神话中的女妖和魔怪,女妖斯库拉住在意大利和西西里岛之间海峡中的一个洞穴里,她的对面住着另一个妖怪卡律布狄斯. 它们为害所有过往航海的人. 据荷马说,女妖斯库拉长着12只不规则的脚,有6个蛇一样的脖子,每个脖子上各有一颗可怕的头,张着血盆大口,每张嘴有3 排毒牙,随时准备把猎物咬碎. 它们每天在意大利和西西里岛之间海峡中兴风作浪,航海者在两个妖怪之间通过是异常危险的,它们时刻在等待着穿过西西里海峡的船舶. 在海峡中间,卡律布狄斯化成一个大旋涡,波涛汹涌、水花飞溅,每天3次从悬崖上奔涌而出,在退落时将通过此处的船只全部淹没. 当奥德修斯的船接近卡律布狄斯大旋涡时,它像火炉上的一锅沸水,波涛滔天,激起漫天雪白的水花. 当潮退时,海水混浊,涛声如雷,惊天动地. 这时,黑暗泥泞的岩穴一见到底. 正当他们惊恐地注视着这一可怕的景象时,正当舵手小心翼翼地驾驶着船只从左绕过旋涡时,突然海怪斯库拉出现在他们面前,她一口叼住了6个同伴. 奥德修斯亲眼看见自己的同伴在妖怪的牙齿中间扭动着双手和双脚,挣扎了一会儿,他们便被嚼碎,成了血肉模糊的一团. 其余的人侥幸通过了卡律布狄斯大旋涡和海怪斯库拉之间的危险的隘口. 后来又历经种种灾难,最后终于回到了故乡——伊塔刻岛.

这个故事在语言学界和翻译界被广为流传。前苏联著名翻译家巴尔胡达罗夫就曾把"斯库拉和卡律布狄斯"比作翻译中"直译和意译". 他说: "形象地说,译者总是不得不在直译和意译之间迂回应变,犹如在斯库拉和卡律布狄斯之间曲折前行,以求在这海峡两岸之间找到一条狭窄然而却足够深邃的航道,以便达到理想的目的地——最大限度的等值翻译."

德国著名语言学家洪堡特也说过类似的话: "我确信任何翻译无疑地都是企图解决不可能解决的任务. 因为任何一个翻译家都会碰到一个暗礁而遭到失败,他们不是由于十分准确地遵守了原文的形式而破坏了译文语言的特点,就是为了照顾译文语言的特点而损坏了原文. 介于两者之间的做法不仅难于办到,而且简直是不可能办到."

历史上长久以来都认为,翻译只能选择两个极端的一种:或者这种——逐字翻译(直译); 或者那种——自由翻译(意译). 就好像翻译中的斯库拉和卡律布狄斯一样。如今斯库拉和卡律布狄斯已成为表示双重危险——海怪和旋涡的代名词,人们常说介于斯库拉和卡律布狄斯之间, 这就是说:处于两面受敌的险境,比喻危机四伏,用来喻指译者在直译和意译之间反复作出抉择之艰难.

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值