Saturday, November 24, 2012

Bài 4: Tạo file awk để vẽ đồ thị "Chiều dài hàng đợi và trễ truyền end to end"

Chủ đề: "Mô phỏng mạng bằng công cụ NS2"

Trong 3 bài trên mình đã hướng dẫn các bạn cách tạo ra các topo mạng, cách để chạy mô phỏng quá trình send packet trên NAM và cách thức để viết một file .awk để hiển thị trễ truyền end to end từ nguồn S1 đến đích D2 bằng Xgraph trên phần mềm mô phỏng mạng NS2. Trong bài này mình sẽ post một số file .awk để tính toán và hiển thị chiều dài hàng đợi, chiều dài hàng đợi trung bình và trễ truyền cho các link còn lại:

1. Chiều dài hàng đợi giữa router 1 và router2: queuesize1_2.awk

BEGIN {pkqueue = 0;}
{
fromnode= 6;
tonode = 7;
#Begin Header: Gan gia tri $i
event = $1; time = $2;
from = $3; to = $4;
pktype = $5; pksize = $6;
flags = $7; fid = $8;
src = $9; dst = $10;
seqnum = $11; pkid = $12;
#End Header
if ((event=="+") && (from==fromnode)) pkqueue++;
if ((event=="-") && (from==fromnode)) pkqueue--;
#if ((event=="d") && (from==fromnode)) pkqueue--;
printf time " " pkqueue "\n";
}
END {}
# Nếu chưa hiểu đoạn code này các bạn có thể đọc lại bài 3 để hiểu rõ hơn cách tạo và viết file .awk
Kết quả mô phỏng:

2. Chiều dài hàng đợi giữa router 2 và router 3: queuesize2_3.awk

BEGIN {pkqueue = 0;}
{
fromnode= 7;
tonode = 8;
#Begin Header: Gán giá trị $i
event = $1; time = $2;
from = $3; to = $4;
pktype = $5; pksize = $6;
flags = $7; fid = $8;
src = $9; dst = $10;
seqnum = $11; pkid = $12;
#End Header
if ((event=="+") && (from==fromnode)) pkqueue++;
if ((event=="-") && (from==fromnode)) pkqueue--;
#if ((event=="d") && (from==fromnode)) pkqueue--;
printf time " " pkqueue "\n";
}
END {} # && (to==tonode)

Kết quả mô phỏng:


3. Trễ truyền end to end giữa nguồn S2 và đích D3: delayflow2_3.awk

BEGIN {sent[5000];receiv[5000];delay[5000]}
{
fromnode= 1;
tonode = 5;
flow = 2;
#Begin Header: Gan cac gia tri $i
event = $1; time = $2;
from = $3; to = $4;
pktype = $5; pksize = $6;
flags = $7; fid = $8;
src = $9; dst = $10;
seqnum = $11; pkid = $12;
#End Header
if ((event == "+") && (from == fromnode) && (fid == flow)) sent[pkid] = time;
if ((event == "r") && (to == tonode) && (fid == flow))
{
receiv[pkid] = time;
delay[pkid] = receiv[pkid] - sent[pkid];
printf time " "delay[pkid] "\n";
}
}
END {}

Kết quả mô phỏng:

4. Chiều dài hàng đợi trung bình Queue1_2

# Chieu dai hang doi trung binh giữa router 1 và router 2: Nq1_2.awk

BEGIN{ FS - " "} {n1++} {s=s+$5} END {printf "Average of Queue1_2:""\n" s/n1 "\n";}

Lưu ý: Sau khi đã có các file .awk, để vẽ bằng Xgraph các bạn phải khai báo trong thủ tục finish tương tự như trong bài 3 đã hướng dẫn.


Tài liệu tham khảo tiếng Việt về mô phỏng trong NS2:
 -> Tài liệu 1: Tải về 
 -> Tài liệu 2: Tải về

Bài 5: File tổng hợp mô phỏng mạng bằng công cụ NS2
 -> Download file chạy .tcl và file .awk của Project này:
-> Download file .awk: Tải về
-> Download file .tcl: Tải về

Chú ý: Để máy tính hoạt động trơn tru và được bảo dưỡng tự động thường xuyên, các bạn nên cài một số phần mềm chăm sóc hệ thống. Mình đã và đang sử dụng phần mềm chăm sóc hệ thống Glary Utilities Pro và thấy rất tốt, các bạn có thể Download và cài đặt bản full có kèm theo Key (serial) đầy đủ ( đã test) rất đơn giản tại đây: Tải về 
- Để bảo vệ máy tính tốt hơn chống lại các phần mềm gián điệp, virus độc hại mà không ngốn quá nhiều tài nguyên máy tính ngay cả ở chế độ hoạt động và chế độ chờ, mình khuyến nghị các bạn cài đặt và sử dụng phần mềm diệt Virus Avast internet security( Kèm theo key/Serial đã test): Tại đây

Click Yes nếu bạn cảm thấy bài viết này hữu ích.- Thanks!

10 comments:

  1. Giải thuật tính độ dài hàng đợi của cậu theo mình là có vấn đề đó là ở đây, cậu chỉ xét xuất từ node nào mà ko xét đến node nào. Theo mình, để tính độ dài hàng đợi tức thời về cơ bản người ta không dùng file trace sinh ra mà họ dùng file sinh ra từ việc giám sát hàng đợi.
    Thân ái,

    ReplyDelete
    Replies
    1. Ah,Bạn quan sát file out.tr sẽ thấy tính độ dài hàng đợi chỉ cần node xuất hoặc node tới mà không cần cả 2. Việc dùng file sinh ra từ việc giám sát hàng đợi qua việc lấy mẫu hàng đợi theo khoảng thời gian định sẵn sẽ cho kết quả khác với pp mình trình bày. Mình thường dùng pp giám sát hàng đợi để tính chiều dài hàng đợi trung bình. Còn mục đích mình làm phương pháp trên là để thấy sự biến thiên của chiều dài hàng đợi theo trục thời gian. Rất vui khi được cùng thảo luận với bạn!

      Delete
    2. e ko hiểu sao a lại gán fromnode = 6, tonode=7 và tiếp là fromnode=7, tonode=8 và tiếp là...e không hiểu đoạn này, a giải thích giùm e được không !!1 E cảm ơn a

      Delete
    3. e ko hiểu sao a lại gán fromnode = 6, tonode=7 và tiếp là fromnode=7, tonode=8 và tiếp là...e không hiểu đoạn này, a giải thích giùm e được không !!1 E cảm ơn a

      Delete
  2. bạn làm ơn cho gửi cho t file Queue1_2.awk của bạn dk ko.mình đã thử chạy file tcl của bạn nhưng khi xem trong file .tr thì thấy kết quả lại bằng 0

    ReplyDelete
  3. Bạn cho mình hỏi cách đọc đồ thị xgraph như thế nào nhi??trả lời mình soứm nha,cám ơn bạn!

    ReplyDelete
    Replies
    1. Bạn tham khảo bài 3 trong chuỗi bài viết nhé!

      Delete
  4. bạn cho mình hỏi thêm là tại 0 lại có giá trị max nhỉ??bạn có viết là: asccii file chứa mỗi cặp giá trị x-y trên một dòng,có thể giải thích giúp mình ko.

    ReplyDelete
    Replies
    1. Bạn phóng to lên sẽ thấy tại 0 thì các giá trị đều bằng "0", chứ không phải max, giá trị max đạt được tại vị trí gần điểm "0" là do các gói đến tuân theo tiến trình poisson và tại đó đạt được số gói lớn do cả 3 nguồn cùng gửi đến.
      Về phần đồ thị Xgraph: Ví dụ lệnh xgraph f1.tr f2.tr sẽ vẽ ra trên cùng một hình đồ thị của file1 và file2.
      Thân!

      Delete
  5. bạn ơi , mình thấy trong đồ thị XGRAPH , nhưng ma mình ko biết phân tích thế nào là hàng đợi , là trễ dduongf truyền , cột ngang là cột thời gian , cột đứng là cột diển tả sổ gói phát đi phải ko bạn , như vậy thì chúng ta phân tích đồ thị thế nào ạ?

    ReplyDelete