⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 00000006.htm

📁 一份很好的linux入门资料
💻 HTM
📖 第 1 页 / 共 4 页
字号:
<HTML><HEAD>  <TITLE>BBS水木清华站∶精华区</TITLE></HEAD><BODY><CENTER><H1>BBS水木清华站∶精华区</H1></CENTER>发信人:&nbsp;cybergene&nbsp;(活泼的基因),&nbsp;信区:&nbsp;Linux&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<BR>标&nbsp;&nbsp;题:&nbsp;The&nbsp;C10K&nbsp;problem&nbsp;<BR>发信站:&nbsp;BBS&nbsp;水木清华站&nbsp;(Mon&nbsp;Dec&nbsp;13&nbsp;14:03:09&nbsp;1999)&nbsp;<BR>&nbsp;<BR>&nbsp;<BR>The&nbsp;C10K&nbsp;problem&nbsp;<BR>&nbsp;<BR>It's&nbsp;time&nbsp;for&nbsp;web&nbsp;servers&nbsp;to&nbsp;handle&nbsp;ten&nbsp;thousand&nbsp;clients&nbsp;simultaneously,&nbsp;<BR>&nbsp;don't&nbsp;you&nbsp;think?&nbsp;After&nbsp;all,&nbsp;the&nbsp;web&nbsp;is&nbsp;a&nbsp;big&nbsp;place&nbsp;now.&nbsp;&nbsp;<BR>&nbsp;<BR>And&nbsp;computers&nbsp;are&nbsp;big,&nbsp;too.&nbsp;You&nbsp;can&nbsp;buy&nbsp;a&nbsp;500MHz&nbsp;machine&nbsp;with&nbsp;1&nbsp;gigabyte&nbsp;<BR>&nbsp;of&nbsp;RAM&nbsp;and&nbsp;six&nbsp;100Mbit/sec&nbsp;Ethernet&nbsp;card&nbsp;for&nbsp;<BR>$3000&nbsp;or&nbsp;so.&nbsp;Let's&nbsp;see&nbsp;-&nbsp;at&nbsp;10000&nbsp;clients,&nbsp;that's&nbsp;50KHz,&nbsp;100Kbytes,&nbsp;&nbsp;<BR>and&nbsp;60Kbits/sec&nbsp;per&nbsp;client.&nbsp;It&nbsp;shouldn't&nbsp;take&nbsp;any&nbsp;more&nbsp;<BR>horsepower&nbsp;than&nbsp;that&nbsp;to&nbsp;take&nbsp;four&nbsp;kilobytes&nbsp;from&nbsp;the&nbsp;disk&nbsp;and&nbsp;send&nbsp;&nbsp;<BR>them&nbsp;to&nbsp;the&nbsp;network&nbsp;once&nbsp;a&nbsp;second&nbsp;for&nbsp;each&nbsp;of&nbsp;ten&nbsp;thousand&nbsp;<BR>clients.&nbsp;(That&nbsp;works&nbsp;out&nbsp;to&nbsp;$0.30&nbsp;per&nbsp;client,&nbsp;by&nbsp;the&nbsp;way.&nbsp;Those&nbsp;&nbsp;<BR>$100/client&nbsp;licensing&nbsp;fees&nbsp;some&nbsp;operating&nbsp;systems&nbsp;charge&nbsp;are&nbsp;<BR>starting&nbsp;to&nbsp;look&nbsp;a&nbsp;little&nbsp;heavy!)&nbsp;So&nbsp;hardware&nbsp;is&nbsp;no&nbsp;longer&nbsp;the&nbsp;&nbsp;<BR>bottleneck.&nbsp;&nbsp;<BR>&nbsp;<BR>One&nbsp;of&nbsp;the&nbsp;busiest&nbsp;ftp&nbsp;sites,&nbsp;cdrom.com,&nbsp;actually&nbsp;can&nbsp;handle&nbsp;10000&nbsp;&nbsp;<BR>clients&nbsp;simultaneously&nbsp;through&nbsp;a&nbsp;Gigabit&nbsp;Ethernet&nbsp;pipe&nbsp;to&nbsp;its&nbsp;<BR>ISP.&nbsp;(&nbsp;Here's&nbsp;a&nbsp;somewhat&nbsp;dated&nbsp;page&nbsp;about&nbsp;their&nbsp;configuration.)&nbsp;Pipes&nbsp;&nbsp;<BR>this&nbsp;fast&nbsp;aren't&nbsp;common&nbsp;yet,&nbsp;but&nbsp;technology&nbsp;is&nbsp;improving&nbsp;<BR>rapidly.&nbsp;&nbsp;<BR>&nbsp;<BR>There's&nbsp;interest&nbsp;in&nbsp;benchmarking&nbsp;this&nbsp;kind&nbsp;of&nbsp;configuration;&nbsp;see&nbsp;the&nbsp;&nbsp;<BR>discussion&nbsp;on&nbsp;June&nbsp;28th&nbsp;1999&nbsp;on&nbsp;linux-kernel,&nbsp;in&nbsp;which&nbsp;people&nbsp;<BR>propose&nbsp;setting&nbsp;up&nbsp;a&nbsp;testbed&nbsp;that&nbsp;can&nbsp;be&nbsp;used&nbsp;for&nbsp;ongoing&nbsp;benchmarks.&nbsp;&nbsp;<BR>&nbsp;<BR>There&nbsp;appears&nbsp;to&nbsp;be&nbsp;interest&nbsp;in&nbsp;this&nbsp;direction&nbsp;from&nbsp;the&nbsp;NSF,&nbsp;too;&nbsp;see&nbsp;&nbsp;<BR>the&nbsp;Web100&nbsp;project.&nbsp;&nbsp;<BR>&nbsp;<BR>With&nbsp;that&nbsp;in&nbsp;mind,&nbsp;here&nbsp;are&nbsp;a&nbsp;few&nbsp;notes&nbsp;on&nbsp;how&nbsp;to&nbsp;configure&nbsp;operating&nbsp;&nbsp;<BR>systems&nbsp;and&nbsp;write&nbsp;code&nbsp;to&nbsp;support&nbsp;thousands&nbsp;of&nbsp;clients.&nbsp;The&nbsp;<BR>discussion&nbsp;centers&nbsp;around&nbsp;Unix-like&nbsp;operating&nbsp;systems,&nbsp;for&nbsp;obvious&nbsp;&nbsp;<BR>reasons.&nbsp;&nbsp;<BR>&nbsp;<BR>Book&nbsp;to&nbsp;Read&nbsp;First&nbsp;<BR>&nbsp;<BR>If&nbsp;you&nbsp;haven't&nbsp;read&nbsp;it&nbsp;already,&nbsp;go&nbsp;out&nbsp;and&nbsp;get&nbsp;a&nbsp;copy&nbsp;of&nbsp;Unix&nbsp;Network&nbsp;&nbsp;<BR>Programming&nbsp;:&nbsp;Networking&nbsp;Apis:&nbsp;Sockets&nbsp;and&nbsp;Xti&nbsp;(Volume&nbsp;<BR>1)&nbsp;by&nbsp;the&nbsp;late&nbsp;W.&nbsp;Richard&nbsp;Stevens.&nbsp;It&nbsp;describes&nbsp;many&nbsp;of&nbsp;the&nbsp;I/O&nbsp;&nbsp;<BR>strategies&nbsp;and&nbsp;pitfalls&nbsp;related&nbsp;to&nbsp;writing&nbsp;high-performance&nbsp;servers.&nbsp;<BR>It&nbsp;even&nbsp;talks&nbsp;about&nbsp;the&nbsp;'thundering&nbsp;herd'&nbsp;problem.&nbsp;&nbsp;<BR>&nbsp;<BR>I/O&nbsp;Strategies&nbsp;<BR>&nbsp;<BR>There&nbsp;seem&nbsp;to&nbsp;be&nbsp;four&nbsp;ways&nbsp;of&nbsp;writing&nbsp;a&nbsp;fast&nbsp;web&nbsp;server&nbsp;to&nbsp;handle&nbsp;many&nbsp;&nbsp;<BR>clients:&nbsp;&nbsp;<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp;1.Build&nbsp;the&nbsp;server&nbsp;code&nbsp;into&nbsp;the&nbsp;kernel.&nbsp;Novell&nbsp;and&nbsp;Microsoft&nbsp;are&nbsp;&nbsp;<BR>both&nbsp;said&nbsp;to&nbsp;have&nbsp;done&nbsp;this&nbsp;at&nbsp;various&nbsp;times,&nbsp;at&nbsp;least&nbsp;one&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NFS&nbsp;implementation&nbsp;does&nbsp;this,&nbsp;and&nbsp;khttpd&nbsp;does&nbsp;this&nbsp;for&nbsp;Linux&nbsp;and&nbsp;&nbsp;<BR>static&nbsp;web&nbsp;pages.&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The&nbsp;linux-kernel&nbsp;list&nbsp;has&nbsp;been&nbsp;discussing&nbsp;the&nbsp;pros&nbsp;and&nbsp;cons&nbsp;of&nbsp;this&nbsp;<BR>&nbsp;approach,&nbsp;and&nbsp;the&nbsp;consensus&nbsp;seems&nbsp;to&nbsp;be&nbsp;instead&nbsp;of&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;moving&nbsp;web&nbsp;servers&nbsp;into&nbsp;the&nbsp;kernel,&nbsp;the&nbsp;kernel&nbsp;should&nbsp;have&nbsp;the&nbsp;&nbsp;<BR>smallest&nbsp;possible&nbsp;hooks&nbsp;added&nbsp;to&nbsp;improve&nbsp;web&nbsp;server&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;performance.&nbsp;That&nbsp;way,&nbsp;other&nbsp;kinds&nbsp;of&nbsp;servers&nbsp;can&nbsp;benefit.&nbsp;See&nbsp;e.g.&nbsp;<BR>&nbsp;Zach&nbsp;Brown's&nbsp;remarks&nbsp;about&nbsp;userland&nbsp;vs.&nbsp;kernel&nbsp;http&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;servers.&nbsp;&nbsp;<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp;2.serve&nbsp;one&nbsp;client&nbsp;with&nbsp;each&nbsp;server&nbsp;thread,&nbsp;and&nbsp;let&nbsp;read()&nbsp;and&nbsp;&nbsp;<BR>write()&nbsp;block.&nbsp;(This&nbsp;is&nbsp;the&nbsp;only&nbsp;model&nbsp;supported&nbsp;by&nbsp;Java.)&nbsp;&nbsp;<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp;3.serve&nbsp;many&nbsp;clients&nbsp;with&nbsp;each&nbsp;server&nbsp;process&nbsp;or&nbsp;thread,&nbsp;set&nbsp;&nbsp;<BR>nonblocking&nbsp;mode&nbsp;on&nbsp;all&nbsp;network&nbsp;handles,&nbsp;and&nbsp;use&nbsp;select()&nbsp;or&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;poll()&nbsp;to&nbsp;tell&nbsp;which&nbsp;network&nbsp;handle&nbsp;has&nbsp;data&nbsp;waiting.&nbsp;This&nbsp;is&nbsp;the&nbsp;&nbsp;<BR>traditional&nbsp;favorite.&nbsp;It's&nbsp;still&nbsp;being&nbsp;improved;&nbsp;see&nbsp;e.g.&nbsp;Niels&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Provos'&nbsp;benchmarks&nbsp;with&nbsp;hinting&nbsp;poll&nbsp;and&nbsp;thttpd.&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;An&nbsp;important&nbsp;bottleneck&nbsp;in&nbsp;this&nbsp;method&nbsp;is&nbsp;that&nbsp;read()&nbsp;or&nbsp;sendfile()&nbsp;<BR>&nbsp;from&nbsp;disk&nbsp;blocks&nbsp;if&nbsp;the&nbsp;page&nbsp;is&nbsp;not&nbsp;in&nbsp;core&nbsp;at&nbsp;the&nbsp;moment;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;setting&nbsp;nonblocking&nbsp;mode&nbsp;on&nbsp;a&nbsp;disk&nbsp;file&nbsp;handle&nbsp;has&nbsp;no&nbsp;effect.&nbsp;&nbsp;<BR>Same&nbsp;thing&nbsp;goes&nbsp;for&nbsp;memory-mapped&nbsp;disk&nbsp;files.&nbsp;The&nbsp;first&nbsp;time&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;a&nbsp;server&nbsp;needs&nbsp;disk&nbsp;I/O,&nbsp;its&nbsp;process&nbsp;blocks,&nbsp;all&nbsp;clients&nbsp;must&nbsp;wait,&nbsp;<BR>&nbsp;and&nbsp;that&nbsp;raw&nbsp;nonthreaded&nbsp;performance&nbsp;goes&nbsp;to&nbsp;waste.&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Worker&nbsp;threads&nbsp;or&nbsp;processes&nbsp;that&nbsp;do&nbsp;the&nbsp;disk&nbsp;I/O&nbsp;can&nbsp;get&nbsp;around&nbsp;&nbsp;<BR>this&nbsp;bottleneck.&nbsp;One&nbsp;approach&nbsp;is&nbsp;to&nbsp;use&nbsp;memory-mapped&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;files,&nbsp;and&nbsp;if&nbsp;mincore()&nbsp;indicates&nbsp;I/O&nbsp;is&nbsp;needed,&nbsp;ask&nbsp;a&nbsp;worker&nbsp;to&nbsp;do&nbsp;<BR>&nbsp;the&nbsp;I/O,&nbsp;and&nbsp;continue&nbsp;handling&nbsp;network&nbsp;traffic.&nbsp;Jef&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Poskanzer&nbsp;mentions&nbsp;that&nbsp;Pai,&nbsp;Druschel,&nbsp;and&nbsp;Zwaenepoel's&nbsp;Flash&nbsp;web&nbsp;&nbsp;<BR>server&nbsp;uses&nbsp;this&nbsp;trick;&nbsp;they&nbsp;gave&nbsp;a&nbsp;talk&nbsp;at&nbsp;Usenix&nbsp;'99&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;on&nbsp;it.&nbsp;It&nbsp;looks&nbsp;like&nbsp;mincore()&nbsp;is&nbsp;available&nbsp;in&nbsp;BSD-derived&nbsp;Unixes&nbsp;&nbsp;<BR>like&nbsp;FreeBSD&nbsp;and&nbsp;Solaris,&nbsp;but&nbsp;is&nbsp;not&nbsp;part&nbsp;of&nbsp;the&nbsp;Single&nbsp;Unix&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Specification.&nbsp;&nbsp;<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp;4.serve&nbsp;many&nbsp;clients&nbsp;with&nbsp;each&nbsp;server&nbsp;process&nbsp;or&nbsp;thread,&nbsp;and&nbsp;use&nbsp;&nbsp;<BR>asynchronous&nbsp;I/O&nbsp;to&nbsp;avoid&nbsp;blocking.&nbsp;This&nbsp;has&nbsp;not&nbsp;yet&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;become&nbsp;popular,&nbsp;possibly&nbsp;because&nbsp;of&nbsp;poorly&nbsp;designed&nbsp;asynchronous&nbsp;&nbsp;<BR>I/O&nbsp;interfaces.&nbsp;Zach&nbsp;Brown&nbsp;(author&nbsp;of&nbsp;HoserFTPD)&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;thinks&nbsp;this&nbsp;might&nbsp;now&nbsp;be&nbsp;the&nbsp;way&nbsp;to&nbsp;go&nbsp;for&nbsp;highest&nbsp;performance;&nbsp;see&nbsp;<BR>&nbsp;his&nbsp;14&nbsp;April&nbsp;1999&nbsp;post&nbsp;to&nbsp;hftpd-users.&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;There&nbsp;are&nbsp;several&nbsp;flavors&nbsp;of&nbsp;asynchronous&nbsp;I/O:&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;the&nbsp;aio_&nbsp;interface&nbsp;(scroll&nbsp;down&nbsp;from&nbsp;that&nbsp;link&nbsp;to&nbsp;&nbsp;<BR>&quot;Asynchronous&nbsp;input&nbsp;and&nbsp;output&quot;),&nbsp;which&nbsp;associates&nbsp;a&nbsp;signal&nbsp;and&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;value&nbsp;with&nbsp;each&nbsp;I/O&nbsp;operation.&nbsp;Signals&nbsp;and&nbsp;their&nbsp;values&nbsp;are&nbsp;&nbsp;<BR>queued&nbsp;and&nbsp;delivered&nbsp;efficiently&nbsp;to&nbsp;the&nbsp;user&nbsp;process.&nbsp;This&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;is&nbsp;from&nbsp;the&nbsp;POSIX&nbsp;1003.1b&nbsp;realtime&nbsp;extensions,&nbsp;and&nbsp;is&nbsp;also&nbsp;&nbsp;<BR>in&nbsp;the&nbsp;Single&nbsp;Unix&nbsp;Specification,&nbsp;version&nbsp;2,&nbsp;and&nbsp;in&nbsp;glibc&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2.1.&nbsp;However,&nbsp;the&nbsp;generic&nbsp;glibc&nbsp;2.1&nbsp;implementation&nbsp;may&nbsp;have&nbsp;&nbsp;<BR>been&nbsp;written&nbsp;for&nbsp;standards&nbsp;compliance&nbsp;rather&nbsp;than&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;performance.&nbsp;&nbsp;<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Much&nbsp;of&nbsp;the&nbsp;overhead&nbsp;of&nbsp;calling&nbsp;poll()&nbsp;can&nbsp;be&nbsp;eliminated&nbsp;by&nbsp;&nbsp;<BR>using&nbsp;fcntl(fd,&nbsp;F_SETSIG,&nbsp;signum),&nbsp;which&nbsp;associates&nbsp;a&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;signal&nbsp;with&nbsp;each&nbsp;file&nbsp;descriptor,&nbsp;and&nbsp;raises&nbsp;that&nbsp;signal&nbsp;&nbsp;<BR>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -