Mạng hàng đợi
Trang 1TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI Viện Điện Tử Viễn Thông
BÀI TẬP LỚN
Đề tài :Mạng hàng đợi
Giảng viên hướng dẫn: TS.Trần Thị Ngọc Lan
Nhóm : 08
Hà nội, tháng 12 năm 2014
Trang 2Mục lục
Trang
Chương I : Nghiên cứu sơ bộ 1.Giới thiệu
2.Tìm hiểu Omnet++ 2.1 Omnet++ là gì ?
2.2 Các thành phần chính của OMNET++
2.3 Ứng dụng
2.4 Mô hình trong OMNET++
2.5 Cấu trúc liên kết của một chương trình mô phỏng
3.Kế hoạch làm việc
Chương II : Phân tích hệ thống Chương III : Thiết kế hệ thống
1. Mô phỏng
2. Một số hình ảnh mô phỏng
3. Xử lí kết quả mô phỏng
4. Tính số lượng gói đi được đến đích
5. Lựa chọn tốc độ phục vụ µ nhỏ nhất để số gói truyền được đến đích là lớn nhất
Chương IV: Kết luận Tài Liệu Tham Khảo
Trang 3Chương I : Nghiên cứu sơ bộ
1.Giới thiệu
Trong môn Cơ sở truyền số liệu , chúng em đã được làm quen với phương pháp đánh giá hoạt động của một hệ thống thông tin bằng phương pháp phân tích toán học, đặc biệt là các mô hình liên quan đến hệ thống hàng đợi đơn, mạng hàng đợi Trong phần bài tập lớn này, chúng em được làm quen với một phương pháp khác
để đánh giá hiệu năng , đó là phương pháp mô phỏng Công cụ mô phỏng được sử dụng ở đây là : công cụ mô phỏng OMNET++ - công cụ mô phỏng mạng thông dụng nhất hiện nay
2 Tìm hiểu về OMNET++
2.1 OMNET++ là gì ?
OMNeT++ là viết tắt của cụm từ Objective Modular Network Testbed in C++ OMNeT++ là một ứng dụng cung cấp cho người sử dụng môi trường để tiến hành
mô phỏng hoạt động của mạng Mục đích chính của ứng dụng là mô phỏng hoạt động mạng thông tin, tuy nhiên do tính phổ cập và linh hoạt của nó, OMNeT++ còn được sử dụng trong nhiều lĩnh vực khác như mô phỏng các hệ thống thông tin phức tạp, các mạng kiểu hàng đợi (queueing networks) hay các kiến trúc phần cứng
OMNeT++ cung cấp sẵn các thành phần tương ứng với các mô hình thực tế Các thành phần này (còn được gọi là các module) được lập trình theo ngôn ngữ C++, sau đó được tập hợp lại thành những thành phần hay những mô hình lớn hơn bằng một ngôn ngữ bậc cao (NED) OMNeT++ hỗ trợ giao diện đồ hoạ, tương ứng với các mô hình cấu trúc của nó đồng thời phần nhân mô phỏng (simulation kernel) và các module của OMNeT++ cũng rất dễ dàng nhúng vào trong các ứng dụng khác
2.2 Các thành phần chính của OMNET++
• Thư viện phần nhân mô phỏng (simulation kernel)
• Trình biên dịch cho ngôn ngữ mô tả hình trạng (topology description language) -NED (nedc)
• Trình biên tập đồ hoạ (graphical network editor) cho các file NED (GNED)
Trang 4• Giao diện đồ hoạ thực hiện mô phỏng, các liên kết bên trong các file thực hiện
mô phỏng (Tkenv)
• Giao diện dòng lệnh thực hiện mô phỏng (Cmdenv)
• Công cụ (giao diện đồ hoạ) vẽ đồ thị kết quả vector ở đầu ra (Plove)
• Công cụ (giao diện đồ hoạ) mô tả kết quả vô hướng ở đầu ra (Scalars)
• Công cụ tài liệu hoá các mô hình
• Các tiện ích khác
• Các tài liệu hướng dẫn, các ví dụ mô phỏng
2.3 Ứng dụng
OMNeT++ là một công cụ mô phỏng các hoạt động mạng bằng các module được thiết kế hướng đối tượng OMNeT++ thường được sử dụng trong các ứng dụng chủ yếu như:
• Mô hình hoạt động của các mạng thông tin
• Mô hình giao thức
• Mô hình hoá các mạng kiểu hàng đợi
• Mô hình hoá các hệ thống đa bộ vi xử lý (multiprocesser) hoặc các hệ thống phần cứng theo mô hình phân tán khác (distributed hardware systems)
• Đánh giá kiến trúc phần cứng
• Đánh giá hiệu quả hoạt động của các hệ thống phức tạp
2.4 Mô hình trong OMNET++
Một mô hình trong OMNeT++ bao gồm các module lồng nhau có cấu trúc phân cấp
Độ sâu của của các module lồng nhau là không giới hạn, điều này cho phép người
sử dụng có thể biểu diễn các cấu trúc logic của các hệ thống trong thực tế bằng các cấu trúc mô hình Các module trao đổi thông tin với nhau thông qua việc gửi các message (message) Các message này có thể có cấu trúc phức tạp tuỳ ý Các module có thể gửi các message này theo hai cách, một là gửi trực tiếp tới địa chỉ nhận, hai là gửi đi theo một đường dẫn được định sẵn, thông qua các cổng và các kết nối
Trang 5Các module có thể có các tham số của riêng nó Các tham số này có thể được sử dụng để chỉnh sửa các thuộc tính của module và để biểu diễn cho topology của mô hình
Các module ở mức thấp nhất trong cấu trúc phân cấp đóng gói các thuộc tính Các module này được coi là các module đơn giản, và chúng được lập trình trong ngôn ngữC++ bằng cách sử dụng các thư viện mô phỏng
2.5 Cấu trúc liên kết của một chương trình mô phỏng
Trang 63 Kế hoạch làm việc
Sau khi đánh giá sơ bộ về thực trạng, yêu cầu đề ra, khả năng nhóm phát triển cũng như quá trình vận hành dự án có thể được phát triển theo trình tự:
Chương II : Phân tích hệ thống
Hệ thống gồm :
Mạng hàng đợi bao gồm 2 hàng đợi Q1 μ1= 80 (gói/s) và Q2 μ2= 50 (gói/s) Nguồn phát tuân theo phân bố Poisson với tham số λ=30 (gói/s)
Yêu cầu :
1 Hãy chạy kịch bản mô phỏng trên cho khoảng thời gian 5s và 200s Tính toán số lượng gói TB, Trễ trung bình trong mạng hàng đợi So sánh với kết quả mô phỏng
2 Giả sử hàng đợi 1 có chiều dài hàng đợi K =2 các hàng đợi khác vần có độ dài bằng vô cùng Các thông số khác giữ nguyên Hãy tính toán các tham số của hàng
đợi như: N, T và Nq, Tq của từng hàng đợi và tốc độ gói đến đích So sánh với kết
quảmô phỏng trong thời gian 200s
Trang 73 Giả sử hàng đợi 2 có chiều dài hàng đợi K =0 các hàng đợi khác vần có độ dài bằng vô cùng Các thông số khác giữ nguyên Hãy tính toán các tham số của hàng
đợi như: N, T và Nq, Tq của từng hàng đợi và tốc độ gói đến Q1 và Q2 So sánh
với kết quả mô phỏng trong thời gian 200s
Chương III : Thiết kế hệ thống
1 Mô phỏng :
Các bước tiến hành :
B1 : Chạy chương trình Omnet++ Tạo “new omnet++ project” , đặt tên cho
project mới vừa tạo.
B2 : Add thư viện “ queueinglib” vào project vừa tạo bằng cách: chuột phải
vào project properties project references queueinglib ok
B3 : Tạo file NED ( file này dùng để mô tả mạng )
B4 : Design Trên giao diện của file NED vừa tạo “Creat network type”.
Sau đó thiết kế mạng hàng đợi theo yêu cầu bài : 2 hàng đợi (Q1, Q2).Ở đây ta
còn thêm nguồn (source)và đích (sink) và delay(delay) trong mô phỏng, sau
đó kết nối chúng lại với nhau.
B5 : Tạo file omnetpp.ini (file cấu hình - các tham số được gán giá trị từ file
này) Chọn network tương ứng ở bước này
B6 : Trong file omnetpp.ini vừa tạo chọn mục “ Parameters“ add các tham
số thời gian như thời gian phục vụ , thời gian đến, số gói công việc Cài đặt
thời gian chạy mô phỏng thì vào General simulation time limit
B7 : Vào Run run configurations new_configuration
B8: Tạo file anf Sau đó vào Results kéo thả 2 file ( sca và vec ) Xem các
thông số thu được.
B9 : Chạy mô phỏng.
Trang 82 Một số hình ảnh mô phỏng :
2.1.Tạo file ned để mô tả cấu trúc mạng hàng đợi:
Code :
[General]
network = manghangdoi
sim-time-limit = 200s
**.source.interArrivalTime = exponential(1s/20)
**.source.stopTime = 200s
*.delay.delay = 1s/1000000
*.source.startTime = 0s
*.Q2.serviceTime = exponential(1s/50)
*.Q2.tyle = 1/2
*.Q1.serviceTime = exponential(1s/80)
*.Q1.tyle = 1/4
Code hàng đợi thay đổi :
//
// This file is part of an OMNeT++/OMNEST simulation example //
// Copyright (C) 2006-2008 OpenSim Ltd.
//
// This file is distributed WITHOUT ANY WARRANTY See the file // `license' for details on this and other legal matters //
Trang 9#include "Queue.h"
#include "Job.h"
namespace queueing {
Define_Module( Queue );
Queue::Queue()
{
jobServiced = NULL;
endServiceMsg = NULL;
}
Queue::~Queue()
{
delete jobServiced ;
}
void Queue::initialize()
{
droppedSignal = registerSignal( "dropped" );
queueingTimeSignal = registerSignal( "queueingTime" );
queueLengthSignal = registerSignal( "queueLength" );
emit( queueLengthSignal , 0);
busySignal = registerSignal( "busy" );
emit( busySignal , 0);
endServiceMsg = new cMessage( "end-service" );
fifo = par( "fifo" );
capacity = par( "capacity" );
queue setName( "queue" );
}
void Queue::handleMessage(cMessage *msg)
{
if (msg== endServiceMsg )
{
endService( jobServiced );
if ( queue empty())
{
jobServiced = NULL;
emit( busySignal , 0);
}
else
{
jobServiced = getFromQueue();
emit( queueLengthSignal , length());
simtime_t serviceTime = startService( jobServiced ); scheduleAt( simTime()+serviceTime, endServiceMsg ); }
}
else
{
Trang 10Job *job = check_and_cast< Job *>(msg);
arrival(job);
if (! jobServiced )
{
// processor was idle
jobServiced = job;
emit( busySignal , 1);
simtime_t serviceTime = startService( jobServiced );
scheduleAt( simTime()+serviceTime, endServiceMsg );
}
else
{
// check for container capacity
if ( capacity >=0 && queue length() >= capacity )
{
EV << "Capacity full! Job dropped.\n" ;
if (ev.isGUI()) bubble( "Dropped!" );
emit( droppedSignal , 1);
delete job;
return;
}
queue insert( job );
emit( queueLengthSignal , length());
job->setQueueCount(job->getQueueCount() + 1);
}
}
if (ev.isGUI()) getDisplayString().setTagArg( "i" ,1, ! jobServiced ? "" : "cyan3" ); }
Job *Queue::getFromQueue()
{
Job *job;
if ( fifo )
{
job = ( Job *) queue pop();
}
else
{
job = ( Job *) queue back();
// FIXME this may have bad performance as remove uses linear search
queue remove(job);
}
return job;
}
int Queue::length()
{
return queue length();
}
void Queue::arrival(Job *job)
{
job->setTimestamp();
Trang 11simtime_t Queue::startService(Job *job)
{
// gather queueing time statistics
simtime_t d = simTime() - job->getTimestamp();
emit( queueingTimeSignal , d);
job->setTotalQueueingTime(job->getTotalQueueingTime() + d);
EV << "Starting service of " << job->getName() << endl; job->setTimestamp();
return par( "serviceTime" ).doubleValue();
}
void Queue::endService(Job *job)
{
EV << "Finishing service of " << job->getName() << endl; simtime_t d = simTime() - job->getTimestamp();
job->setTotalServiceTime(job->getTotalServiceTime() + d); double tl=par( "tyle" );
int test = bernoulli (tl,0);
if (test)
send( jobServiced , "out" ,0);
else send( jobServiced , "out" ,1);
}
void Queue::finish()
{
}
}; //namespace
2.2 Thiết lập các thông số và lựa chọn cấu hình :
Trang 12Cài đặt các thông số mô phỏng :
2.3 Một số hình ảnh chạy mô phỏng :
Trang 132.4 File elog
3 Xử lí kết quả mô phỏng:
3.1.Lý thuyết liên quan:
3.1.1 Lý thuyết mạng hàng đợi :
Một mạng hàng đợi được định nghĩa bằng k nút mạng, mỗi nút mạng i là một hệ thống hàng đợi đơn bao gồm 1 hàng đợi và ci server Các yêu cầu
đi vào hàng đợi tại một số nút xác định và đi ra từ một số nút khác
Điều khiển luồng và kiểm soát tắc nghẽn trong mạng
Sau khi được phục vụ xong ở một nút mạng yêu cầu có thể:
Trang 14- Rời khỏi nút mạng
- Đi vào nút kế tiếp
- Quay trở lại nút nó đã đi qua trước đó
Giả thiết dòng lưu lượng đi vào nút i tuân theo phân bố Poisson với tham số λ1 Tốc độ phục vụ của server tại nút mạng j tuân theo phân bố Poisson với tham số μj
Xác suất để 1 yêu cầu sau khi rời nút i được gửi tới nút j là rij( gọi là xác
suất định tuyến), xác suất để nó rời khỏi mạng là ri0.
3.1.2 Hàng đợi M/M/1
Lược đồ trạng thái:
Chuỗi Markov của hàng đợi M/M/1.
Tiến trình đến và tiến trình phục vụ có thuộc tính Markov (tiến trình không nhớ, tức trạng thái tiếp theo chỉ phụ thuộc trạng thái hiện tại, nhưng độc lập với việc nó đã có được như thế nào)
- Thời gian giữa hai lần đến và thời gian phục vụ tuân theo phân bố mũ
- Hệ thống có 1 server, dung lượng đệm là vô hạn
- Tốc độ gói đến là λ (gói/s)
- Tốc độ phục vụ là μ (gói/s)
- Mật độ lưu luợng: ρ =
- Số lượng gói trung bình trong hệ thống: N=
- Số luợng gói trung bình trong server: Ns =P(N≥1)= 1-P(N=0) = 1- (1- ρ) = ρ
Trang 15-Số lượng gói trung bình trong hàng đợi: Nq = N - Ns = -Thời gian trung bình lưu trong hệ thống của mỗi gói: T = =
3.1.3 Hàng đợi M/M/1/K
Lược đồ trạng thái:
Chuối Markov của hàng đợi M/M/1/k
Với số khách hàng là k
Pn=.Po; 0<=n<=k
Pn=
L=-Xác suất khách hang đến hệ thống bị từ chối là Pk
Pk=
Tốc độ đến thực tế λ=λ(1- Pk)
3.2 Tính toán lý thuyết
Tính toán các tham số N, T và Nq, Tq của từng hàng đợi
1/ 1 = + +
2=
Trang 161 = = x 20 =
2 = 2 = 2 x 20 = 40
1 = =
2 = =
Hàng đợi Q1:
N1 = = = 2
Trễ TB : T – Ts = - = - = 0,025
Hàng đợi Q2 :
N2 = = = 4
Trễ TB : T – Ts = - = - = 0,08
Số gói trung bình trong hệ thống : N = N1+ N2 = 2+4= 6 Trễ trung bình : 0,025 +0,08 = 0,105
2/ Hàng đợi Q1 có k = 2
xác suất khách hàng đến bị từ chối : Pk =1kx =
Ta có:
1 = + +
x(1-2=
Tính lại 1 = ,2 =
1 =
2 = 0,58
Hàng đợi Q1: N1 = + = 1,015
T1 = = 0,026
Trang 17Nq1 = N1 = = 0,43
Tq1 = 0,011
Hàng đợi Q2 : N2 = = 1,4
T2 = = 0,048
Nq2 = N2 – Ns2 = 1,4 - = 0,82
Tq2 = T2 – Ts2 = 0,048 – = 0,028
3/ Hàng đợi Q2 có k = 0
Hàng đợi Q2
N= = 0,44
Ta có:
1/ 1 = + +
2= (1-0,44)
1 = 37
Hàng đợi Q1 :
N1 = =
T1 = = 0,023
Nq1 = N1 – Ns1 = 0,86 - = 0,4
Tq1 = T1 – Ts1 = 0,023 – = 0,0105
Câu 1:
Trang 18Câu 2:
Câu 3
Nhận xét kết quả mô phỏng với lý thuyết
- Dựa vào các số liệu thu được từ mô phỏng và so sánh với lý thuyết, chúng em nhận thấy với thời gian chạy mô phỏng nhỏ thì kết quả sai lệch lớn so với lý thuyết Khi tăng thời gian chạy kịch bản lên, thì kết quả mô phỏng gần với lý thuyết hơn Trong trường hợp này ta xét với thời gian chạy mô phỏng 5s và 200s có kết quả như trên
Đánh giá và kết luận :
Qua số liệu tính toán theo lý thuyết và kết quả mô phỏng, ta nhận thấy:
-Với thời gian mô phỏng 5s thì kết quả mô phỏng có sai số khá nhiều so với lý thuyết
- Với thời gian mô phỏng 200s thì kết quả mô phỏng xấp xỉ với tính toán theo lý thuyết
Trang 19Chương IV : Kết Luận
Trong môn Cơ sở truyền số liệu , chúng em đã được làm quen với phương pháp đánh giá hoạt động của một hệ thống thông tin bằng phương pháp phân tích toán học, đặc biệt là các mô hình liên quan đến hệ thống hàng đợi đơn, mạng hàng đợi Trong phần bài tập lớn này, chúng em được làm quen với một phương pháp khác để đánh giá hiệu năng , đó
là phương pháp mô phỏng Công cụ mô phỏng được sử dụng ở đây là : công cụ mô phỏng OMNET++ - công cụ mô phỏng mạng thông dụng nhất hiện nay Do hạn chế về mặt thời gian cũng như là kiến thức, bài làm không thể tránh khỏi những thiếu sót, chúng
em mong được sự nhật xét, đánh giá của Cô giáo
Cuối cùng, chúng em xin chân thành cảm ơnCô: TS Trần Thị Ngọc Lan đã tận tình
hướng dẫn chúng em trong bài tập lớn này !
Tài liệu tham khảo
[1] website: http://vntelecom.org/diendan/showthread.php?t=7968
[2] website: http://www.omnetpp.org/home/videos
[3] website: http://www.scribd.com/doc/31770594/Omnet-Tieng-Viet
[4] Sách: Cơ sở mạng thông tin-Viện điện tử viễn thông,ĐHB HN