simple-webcache-trace.tcl
上传用户:rrhhcc
上传日期:2015-12-11
资源大小:54129k
文件大小:4k
源码类别:

通讯编程

开发平台:

Visual C++

  1. #
  2. #  Copyright (c) 1997 by the University of Southern California
  3. #  All rights reserved.
  4. #
  5. #  This program is free software; you can redistribute it and/or
  6. #  modify it under the terms of the GNU General Public License,
  7. #  version 2, as published by the Free Software Foundation.
  8. #
  9. #  This program is distributed in the hope that it will be useful,
  10. #  but WITHOUT ANY WARRANTY; without even the implied warranty of
  11. #  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  12. #  GNU General Public License for more details.
  13. #
  14. #  You should have received a copy of the GNU General Public License along
  15. #  with this program; if not, write to the Free Software Foundation, Inc.,
  16. #  59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
  17. #
  18. #  The copyright of this module includes the following
  19. #  linking-with-specific-other-licenses addition:
  20. #
  21. #  In addition, as a special exception, the copyright holders of
  22. #  this module give you permission to combine (via static or
  23. #  dynamic linking) this module with free software programs or
  24. #  libraries that are released under the GNU LGPL and with code
  25. #  included in the standard release of ns-2 under the Apache 2.0
  26. #  license or under otherwise-compatible licenses with advertising
  27. #  requirements (or modified versions of such code, with unchanged
  28. #  license).  You may copy and distribute such a system following the
  29. #  terms of the GNU GPL for this module and the licenses of the
  30. #  other code concerned, provided that you include the source code of
  31. #  that other code when and as the GNU GPL requires distribution of
  32. #  source code.
  33. #
  34. #  Note that people who make modified versions of this module
  35. #  are not obligated to grant this special exception for their
  36. #  modified versions; it is their choice whether to do so.  The GNU
  37. #  General Public License gives permission to release a modified
  38. #  version without this exception; this exception also makes it
  39. #  possible to release a modified version which carries forward this
  40. #  exception.
  41. #  $Header: /cvsroot/nsnam/ns-2/tcl/ex/simple-webcache-trace.tcl,v 1.2 2005/09/16 03:05:41 tomh Exp $
  42. # Demo of simple trace-driven web sim
  43. set ns [new Simulator]
  44. # Create topology/routing
  45. set node(c) [$ns node] 
  46. set node(e) [$ns node]
  47. set node(s) [$ns node]
  48. $ns duplex-link $node(s) $node(e) 1.5Mb 50ms DropTail
  49. $ns duplex-link $node(e) $node(c) 10Mb 2ms DropTail 
  50. $ns rtproto Session
  51. # HTTP logs
  52. set log [open "http.log" w]
  53. # Use PagePool/Proxy Trace
  54. set pgp [new PagePool/ProxyTrace]
  55. # Set trace files. There are two files; one for request stream, the other for 
  56. # page information, e.g., size and id
  57. #
  58. # XXX Assuming current directory is ~ns/tcl/ex. Use traces under ~ns/tcl/test
  59. $pgp set-reqfile "../test/webtrace-reqlog"
  60. $pgp set-pagefile "../test/webtrace-pglog"
  61. # Set number of clients that will use this page pool. It's used to assign
  62. # requests to clients
  63. $pgp set-client-num 1
  64. # Set the ratio of hot pages in all pages. Because no page modification
  65. # data is available in most traces, we assume a bimodal page age distribution
  66. $pgp bimodal-ratio 0.1
  67. # Dynamic (hot) page age generator
  68. set tmp [new RandomVariable/Exponential] ;# Age generator
  69. $tmp set avg_ 5 ;# average page age
  70. $pgp ranvar-dp $tmp
  71. # Static page age generator
  72. set tmp [new RandomVariable/Constant]
  73. $tmp set val_ 10000
  74. $pgp ranvar-sp $tmp
  75. set server [new Http/Server $ns $node(s)]
  76. $server set-page-generator $pgp
  77. $server log $log
  78. set cache [new Http/Cache $ns $node(e)]
  79. $cache log $log
  80. set client [new Http/Client $ns $node(c)]
  81. # XXX When trace-driven, don't assign a request interval generator
  82. $client set-page-generator $pgp
  83. $client log $log
  84. set startTime 1 ;# simulation start time
  85. set finishTime 50 ;# simulation end time
  86. $ns at $startTime "start-connection"
  87. $ns at $finishTime "finish"
  88. proc start-connection {} {
  89. global ns server cache client
  90. $client connect $cache
  91. $cache connect $server
  92. $client start-session $cache $server
  93. }
  94. proc finish {} {
  95. global ns log
  96. $ns flush-trace
  97. flush $log
  98. close $log
  99. exit 0
  100. }
  101. $ns run