FPGA操控SDRAM 所用FPGA芯片:EP2C8Q208C8
所用内存:H57V2562GTR-75C
顶层模块:
module sdram
(
clk,
ext_rst_n,
/**********************/
sdramclk,//SDRAM的引脚
ledpio,//发光二极管,打酱油的
addr,
ba,
cas_n,
cke,
cs_n,
dq,
dqm,
ras_n,
we_n,
/*****************/
flash_nce_n,
sram_nce_n
/******************/
);
/******************/
input clk;
input ext_rst_n;
output [7:0] ledpio;//八位流水
/**************************/
output [12:0] addr;
output [1:0] ba;
output cas_n;
output cke;
output cs_n;
inout [15:0] dq;
output [1:0] dqm;
output ras_n;
output we_n;
output sdramclk;
/**************************/
output flash_nce_n=1'b1;
output sram_nce_n=1'b1;
assign cs_n=1'b0;
assign cke=1'b1;
assign dqm=2'b00;
/****************************/
wire wr_n;
wire [4:0] cmd;
wire refquest;
wire rfinish;
wire wfinish;
sys_cmd s1
(
.clk(clk_100m),
.rst_n(ext_rst_n),
.wr_n(wr_n),//由数据产生模块决定现在是读还是写状态
.cmd(cmd),
.refquest(refquest),
.rfinish(rfinish),//读完成标志位,每完成一次读操作出现一次上升沿.wfinish(wfinish)//写完成标志位,每完成一次写操作出现一次上升沿);
/***************************/
wire [12:0] rowadd;
wire [8:0] caadd;
wire [15:0] indata;
wire [15:0] outdata;
sys_ctrl s2
(
.clk(clk_100m),
.cmd(cmd),
.rowadd(rowadd),//行地址输入
.caadd(caadd),//列地址输入
.indata(indata),//数据输入
.outdata(outdata),//从内存读回数据后,将数据输出
.addr(addr),
.ba(ba),
.cas_n(cas_n),
.dq(dq),
.ras_n(ras_n),
.we_n(we_n),
.refquest(refquest)
);
assign ledpio=outdata[7:0];
/*****************************/
wire clk_100m;
pll100m p1(
.inclk0(clk),
.c0(clk_100m),
.c1(sdramclk));
/*****************************/
dataproduce d1
(
.clk(clk_100m),
.wr_n(wr_n),
.data(indata),
.rowadd(rowadd),
.caadd(caadd),
.rst_n(ext_rst_n),
.rfinish(rfinish),//读完成标志位,每完成一次读操作出现一次上升沿
.wfinish(wfinish)//写完成标志位,每完成一次写操作出现一次上升沿
);
/******************************/
Endmodule
内存状态控制模块:
module sys_cmd
(
clk,
rst_n,
wr_n,
cmd,
refquest,//刷新请求位,为高时请求外部执行刷新操作
rfinish,//读完成标志位,每完成一次读操作出现一次上升沿
wfinish//写完成标志位,每完成一次写操作出现一次上升沿
);
/*************************/
parameter cnt_200us=20000;//SDRAM在开机时的初始化过程,上电后要有200us的输入稳定期
parameter inicycle=8;//200us以后就是要对所有L-Bank预充电,再往后给SDRAM 8次的刷新命令
parameter tRFC=6;//预刷新操作需要的等待时间要比预充电长的多,大约需要6个时钟周期(60ns)
parameter tRP=2;//在发出预充电命令之后,要经过一段时间才能允许发送RAS行有效命令打开
//新的工作行,这个间隔被称为tRP(Precharge command Period,预充电
有效周期)。
parameter tRCD=3;//在发送列读写命令时必须要与行有效命令有一个间隔
//这个间隔被定义为tRCD,即RAS to CAS Delay(RAS至CAS延迟),parameter CL=3;
parameter tWR=2;//数据的真正写入需要一定的周期。为了保证数据的可靠写入,
//都会留出足够的写入/校正时间(tWR,Write Recovery Time)
/***************************/
parameter INI=5'b00001;
parameter ININOP=5'b00010;
parameter PRECHARGEALL=5'b00011;//预充电
parameter PRECHARGEALLNOP=5'b00100;//预充电
parameter MRS=5'b00101;
parameter MRSNOP=5'b00111;
parameter REFRESH=5'b01000;
parameter REFRESHNOP=5'b01001;
//以上四个状态是用来初始化的
parameter RAS=5'b01010;
parameter RASNOP=5'b01011;
parameter CAS=5'b01100;
parameter CASNOP=5'b01101;
parameter R_W_PRECHARGE=5'b11110;//由于SDRAM的寻址具有独占性,所以在进行完读写操作后,
//如果要对同一L-Bank的另一行进行寻址,就要将原来有效(工作)的行关闭,重新发送行/列地址?
//L-Bank关闭现有工作行,准备打开新行的操作就是预充电(Precharge)。
//预充电可以通过命令控制,也可以通过辅助设定让芯片在每次读写操作之后自动进行预充电。?
parameter R_W_PRECHARGENOP=5'b10000;
/***************************/
parameter RE=5'b01110;//确定当前是读状态还是写状态
parameter WR=5'b01111;
parameter REWAIT=5'b10001;
parameter REFIN=5'b10010;
parameter WRFIN=5'b10011;
/*******************************/
parameter RECNT=782;//刷新周期为7.8125μs
/***************************/
input clk;
input rst_n;
input wr_n;
output [4:0] cmd;
output refquest;//刷新请求位,为高时请求外部执行刷新操作
output rfinish;//读完成标志位,每完成一次读操作出现一次上升沿
output wfinish;//写完成标志位,每完成一次写操作出现一次上升沿
/************************/
assign cmd=state;
reg [4:0] state;
reg [15:0] cnt;
reg [3:0] refreshcnt;//初始化要八个刷新周期,每个刷新周期70ns
/***************************/
reg [15:0] Tcnt;//刷新周期为7.8125μs
reg [3:0] Tcout;//而每次刷新所占用的时间为9个时钟周期
reg refquest;//刷新请求位,为高时请求外部执行刷新操作
reg refinish;//刷新完成标志位,高表示刷新完成,可以正常操作,否则要等待
reg rfinish;//读完成标志位,每完成一次读操作出现一次上升沿
reg wfinish;//写完成标志位,每完成一次写操作出现一次上升沿
always @ (posedge clk or negedge rst_n)
if(!rst_n)
begin
Tcnt<=16'b0;
Tcout<=4'b0;
refquest<=1'b0;
refinish<=1'b1;
end
else if(Tcnt>=RECNT)
begin
if(Tcout>=9)
begin
refquest<=1'b0;
refinish<=1'b1;//发出刷新请求并等待九个时钟周期后,刷新操作完成
Tcout<=4'b0;
Tcnt<=16'b0;
end
else
begin
refquest<=1'b1;
refinish<=1'b0;
Tcout<=Tcout+1'b1;
Tcnt<=Tcnt;
end
end
else
Tcnt<=Tcnt+1'b1;
/*****************************/
always @ (posedge clk or negedge rst_n)
begin
if(!rst_n)
begin
state<=INI;
cnt<=16'b0;
refreshcnt<=4'b0;
rfinish<=1'b0;
wfinish<=1'b0;
end
else if(refinish)
begin
case(state)
INI:
begin
if(cnt>=cnt_200us)//上电后要有200us的输入稳定期
begin
cnt<=16'b0;
state<=ININOP;
end
else
begin
cnt<=cnt+1'b1;
state<=state;
end
end
ININOP:
state<=PRECHARGEALL;
/****************************************/
PRECHARGEALL://所有L-Bank预充电
begin
state<=PRECHARGEALLNOP;
end
PRECHARGEALLNOP:
state<=REFRESH;
/****************************************/
REFRESH://预充电完成了就要连续进行八个预刷新
if(refreshcnt>=inicycle)//给SDRAM 8次的刷新命令
begin
refreshcnt<=4'b0;
state<=MRS;
end
else
begin
state<=REFRESHNOP;
refreshcnt<=refreshcnt+1'b1;
end
REFRESHNOP:
if(cnt>=tRFC)//预刷新操作需要的等待时间要比预充电长的多,大约需要6个时钟周期(60ns)
begin
cnt<=16'b0;
state<=REFRESH;
end
else
begin
cnt<=cnt+1'b1;
state<=state;
end
/****************************************/
MRS://模式寄存器设置
state<=MRSNOP;
MRSNOP:
state<=RAS;
/****************************************/
RAS://行有效
begin
state<=RASNOP;
rfinish<=1'b0;//读完成标志位,每完成一次读操作出现一次上升沿
wfinish<=1'b0;//写完成标志位,每完成一次写操作出现一次上升沿
end
RASNOP:
//在发送列读写命令时必须要与行有效命令有一个间隔
//这个间隔被定义为tRCD,即RAS to CAS Delay(RAS至CAS延迟),
if(cnt>=tRCD)
begin
if(wr_n)
state<=RE;//wr_n为高,对内存进行读操作
else
state<=WR;//wr_n为低,对内存进行写操作
cnt<=16'b0;
end
else
begin
cnt<=cnt+1'b1;
state<=state;
end
/****************************************/
RE://列读写
state<=REWAIT;
REWAIT://在CAS发出之后,仍要经过一定的时间才能有数据输出,
//从CAS与读取命令发出到第一笔数据输出的这段时间,被定义为CL(CAS Latency,CAS潜伏期)。
if(cnt>=CL)
begin
cnt<=16'b0;
state<=REFIN;
end
else
begin
cnt<=cnt+1'b1;
state<=state;
end
REFIN:
begin
state<=R_W_PRECHARGE;
rfinish<=1'b1;//读完成标志位,每完成一次读操作出现一次上升沿
end
/****************************************/
WR://列读写
state<=WRFIN;
WRFIN://数据的真正写入需要一定的周期。为了保证数据的可靠写入,
//都会留出足够的写入/校正时间(tWR,Write Recovery Time)
if(cnt>=tWR)
begin
cnt<=16'b0;
wfinish<=1'b1;//写完成标志位,每完成一次写操作出现一次上升沿
state<=R_W_PRECHARGE;
end
else
begin
cnt<=cnt+1'b1;
state<=state;
end
/********************************/
R_W_PRECHARGE:
state<=R_W_PRECHARGENOP;
R_W_PRECHARGENOP:
if(cnt>=tRP)//在发出预充电命令之后,要经过一段时间才能允许发送RAS行有效命令打开
//新的工作行,这个间隔被称为tRP(Precharge command Period,预充电有效周期)。
begin
cnt<=16'b0;
state<=RAS;
end
else
begin
cnt<=cnt+1'b1;
state<=state;
end
/****************************************/
endcase
end
else
state<=state;
end
/***************************/
Endmodule
操作内存接口模块:
module sys_ctrl
(
clk,
cmd,
rowadd,//行地址输入
caadd,//列地址输入
indata,//数据输入
outdata,//从内存读回数据后,将数据输出
/*************************/
addr,
ba,
cas_n,
dq,
ras_n,
we_n,
/***************************/
refquest
);
/***************************/
input clk;
input refquest;//刷新请求位,出现上升沿发出一条刷新命令input [4:0] cmd;
input [12:0] rowadd;
input [8:0] caadd;
input [15:0] indata;
output [15:0] outdata;
/************************/
output [12:0] addr;
output [1:0] ba;
output cas_n;
inout [15:0] dq;
output ras_n;
output we_n;//为低时,向内存写数据
/******************************/
reg [12:0] addr;
reg [1:0] ba; //这里只对第零个bank进行操作
reg cas_n;
reg [15:0] wrdata;//写数据寄存器
reg [15:0] redata;//读数据寄存器
reg ras_n;
reg we_n;
/**************************/
parameter INI=5'b00001;
parameter ININOP=5'b00010;
parameter PRECHARGEALL=5'b00011;//预充电
parameter PRECHARGEALLNOP=5'b00100;//预充电parameter MRS=5'b00101;
parameter MRSNOP=5'b00111;
parameter REFRESH=5'b01000;
parameter REFRESHNOP=5'b01001;
//以上四个状态是用来初始化的
parameter RAS=5'b01010;
parameter RASNOP=5'b01011;
parameter CAS=5'b01100;
parameter CASNOP=5'b01101;
parameter R_W_PRECHARGE=5'b10000;//由于SDRAM的寻址具有独占性,所以在进行完读写操作后,
//如果要对同一L-Bank的另一行进行寻址,就要将原来有效(工作)的行关闭,重新发送行/列地址。
parameter R_W_PRECHARGENOP=5'b10101;
/***************************/
parameter RE=5'b01110;//确定当前是读状态还是写状态
parameter WR=5'b01111;
parameter REFIN=5'b10010;
parameter REWAIT=5'b10011;
parameter WRFIN=5'b10100;
/*******************************/
reg [15:0] outdata;
always @ (posedge clk)
begin
wrdata<=indata;
outdata<=redata;
end
/***********************************/
assign dq=we_n?16'bz:wrdata;//为低时,向内存写数据,为高时从内存读数据(先设置为输出高阻态)
reg refquest_temp1;//检测refquest的上升沿
reg refquest_temp2;
always @ (posedge clk)
begin
refquest_temp1<=refquest;
refquest_temp2<=refquest_temp1;
if(~refquest_temp2&refquest_temp1)//刷新请求位,出现上升沿发出一条刷新命令begin
ras_n=1'b0;
cas_n=1'b0;
we_n=1'b1;
end
else if(!refquest)//refquest为高时,还处于刷新状态
begin
case(cmd)
ININOP:
begin
ras_n<=1'b1;
cas_n<=1'b1;
we_n<=1'b1;
end
/****************************************/
PRECHARGEALL://所有L-Bank预充电
begin
addr[10]<=1'b1;//A10则控制着是对指定的L-Bank还是所有的L-Bank
//(当有多个L-Bank处于有效/活动状态时)进行预充电
//前者需要提供L-Bank的地址,后者只需将A10信号置于高电平。
ras_n<=1'b0;
cas_n<=1'b1;
we_n<=1'b0;
end
PRECHARGEALLNOP:
begin
ras_n<=1'b1;
cas_n<=1'b1;
we_n<=1'b1;
end
/****************************************/
REFRESH://预充电完成了就要连续进行八个预刷新
begin
ras_n<=1'b0;
cas_n<=1'b0;
we_n<=1'b1;
end
REFRESHNOP:
begin
ras_n<=1'b1;
cas_n<=1'b1;
we_n<=1'b1;
end
/****************************************/
MRS://模式寄存器设置
//设置为突发读、单一写,突发传输方式为顺序,CAS潜伏期(CL)为3,突发长度为1
begin
addr<=13'b0001000110000;
ba<=2'b00;
MRSNOP:
begin
ras_n<=1'b1;
cas_n<=1'b1;
we_n<=1'b1;
end
/****************************************/
RAS://行有效
begin
ras_n<=1'b0;
cas_n<=1'b1;
we_n<=1'b1;
addr[12:0]<=rowadd;
ba<=2'b00;
end
RASNOP:
////在发送列读写命令时必须要与行有效命令有一个间隔
//这个间隔被定义为tRCD,即RAS to CAS Delay(RAS至CAS延迟),
begin
ras_n<=1'b1;
cas_n<=1'b1;
we_n<=1'b1;
end
/****************************************/
RE://列读写
begin
we_n<=1'b1;
ras_n<=1'b1;
cas_n<=1'b0;
addr[8:0]<=caadd;
addr[10]<=1'b0;//禁止自动充电
ba<=2'b00;
end
REWAIT://在CAS发出之后,仍要经过一定的时间才能有数据输出,
//从CAS与读取命令发出到第一笔数据输出的这段时间,被定义为CL(CAS Latency,CAS潜伏期)?
begin
ras_n<=1'b1;
cas_n<=1'b1;
we_n<=1'b1;
/******************************************/
REFIN:
redata<=dq;
/****************************************/
WR://列读写
begin
we_n<=1'b0;
ras_n<=1'b1;
cas_n<=1'b0;
addr[8:0]<=caadd;
addr[10]<=1'b0;//禁止自动充电
ba<=2'b00;
end
WRFIN://数据的真正写入需要一定的周期。为了保证数据的可靠写入,//都会留出足够的写入/校正时间(tWR,Write Recovery Time)
begin
ras_n<=1'b1;
cas_n<=1'b1;
we_n<=1'b1;
end
/****************************************/
R_W_PRECHARGE:
begin
ba<=2'b00;
ras_n<=1'b0;
cas_n<=1'b1;
we_n<=1'b0;
end
R_W_PRECHARGENOP:
begin
ras_n<=1'b1;
cas_n<=1'b1;
we_n<=1'b1;
end
/****************************************/
endcase
end
else//执行空操作,等待刷新完成
begin
ras_n<=1'b1;
cas_n<=1'b1;
we_n<=1'b1;
end
end
/************************/
Endmodule
数据产生模块:
module dataproduce
(
clk,
rfinish,//读完成标志位,每完成一次读操作出现一次上升沿
wfinish,//写完成标志位,每完成一次写操作出现一次上升沿
wr_n,
data,
rowadd,
caadd,
rst_n
);
/***********************/
input rfinish;//读完成标志位,出现上升沿表示一次读完成,需要接着地址加一,数据加一,并进行写操作
input wfinish;//写完成标志位,出现上升沿表示一次写完成,需要接着进行读操作
input rst_n;
input clk;
output wr_n;
output [15:0] data;
output [12:0] rowadd;
output [8:0] caadd;
/********************************/
reg [8:0] caadd;
reg[15:0] wrdata;
reg wr_n_temp;
reg rfinish_temp1;
reg rfinish_temp2;
reg wfinish_temp1;
reg wfinish_temp2;
/*********************************/
assign rowadd=13'b0;
assign wr_n=wr_n_temp;//给输入输出控制端赋值
assign data=wrdata;
reg [2:0] wrcnt;
reg [2:0] recnt;
reg [8:0] caaddtemp;
always @ (posedge clk)////连续写七个数据,然后连续读七个数据
begin
if(!rst_n)
begin
caadd<=9'b0;
caaddtemp<=9'b0;;
wr_n_temp<=1'b0;
wrdata<=16'b0;
wrcnt<=3'b0;
recnt<=3'b0;
end
else
begin
rfinish_temp1<=rfinish;
rfinish_temp2<=rfinish_temp1;
wfinish_temp1<=wfinish;
wfinish_temp2<=wfinish_temp1;
if(~wfinish_temp2&wfinish_temp1)//写完成标志位,出现上升沿表示一次写完成,需要接着进行读操作
begin
if(wrcnt>=3'b110)
begin
wr_n_temp<=1'b1;//下次进行读操作
caadd<=caaddtemp;//caaddtemp保存的是上一个读周期完成后的下一个地址
//也就是刚刚结束的这个写周期的开始地址
//这个设计比较关键,可以保证读写转换过程中地址不会乱
wrcnt<=3'b0;
end
else
begin
wrcnt<=wrcnt+1'b1;
if(wrdata==16'b1111111111111111)//数据加一
wrdata<=16'b0;
else
wrdata<=wrdata+1'b1;
if(caadd==9'b111111110)//地址加一
caadd<=9'b0;
else
caadd<=caadd+1'b1;
end
end
else if(~rfinish_temp2&rfinish_temp1)//读完成标志位,出现上升沿表示一次读完成,需要接着地址加一,数据加一,并进行写操作
begin
if(recnt>=3'b110)
begin
wr_n_temp<=1'b0;//下次进行写操作
if(caadd==9'b111111110)//地址加一
caadd<=9'b0;
else
caadd<=caadd+1'b1;
if(wrdata==16'b1111111111111111)//数据加一
wrdata<=16'b0;
else
wrdata<=wrdata+1'b1;
caaddtemp<=caadd+1'b1;
//caaddtemp保存的是刚刚结束的这个读周期的下一个地址,下一个写周期的开始地址就是这个地址
//这个设计比较关键,可以保证读写转换过程中地址不会乱
recnt<=3'b0;
end
else
begin
recnt<=recnt+1'b1;
caadd<=caadd+1'b1;;
end
end
end
end
/**********************************/
Endmodule
PLL设置:
SignalTap波形图:
参考资料:
1、《《高手进阶,终极内存技术指南》》;
2、
3、基于FPGA的SDRAM设计——SDRAM的初始化
Iperf使用说明 Iperf是一个TCP/IP和UDP/IP的性能测量工具,能够提供网络吞吐率信息,以及震动、丢包率、最大段和最大传输单元大小等统计信息;从而能够帮助我们测试网络性能,定位网络瓶颈。 参数说明 -s 以server模式启动,eg:iperf –s -c host以client模式启动,host是server端地址,eg:iperf -c 222.35.11.23 通用参数 -f [k|m|K|M] 分别表示以Kbits, Mbits, KBytes, MBytes显示报告,默认以Mbits为单位,eg:iperf -c 222.35.11.23 -f K -i sec 以秒为单位显示报告间隔,eg:iperf -c 222.35.11.23 –I 2 -l 缓冲区大小,默认是8KB,eg:iperf -c 222.35.11.23 -l 16 -m 显示tcp最大mtu值 -o 将报告和错误信息输出到文件eg:iperf -c 222.35.11.23 -o c:\iperflog.txt -p 指定服务器端使用的端口或客户端所连接的端口eg:iperf -s -p 9999;iperf -c 222.35.11.23 -p 9999
-u 使用udp协议 -w 指定TCP窗口大小,默认是8KB -B 绑定一个主机地址或接口(当主机有多个地址或接口时使用该参数) -C 兼容旧版本(当server端和client端版本不一样时使用) -M 设定TCP数据包的最大mtu值 -N 设定TCP不延时 -V 传输ipv6数据包 server专用参数 -D 以服务方式运行ipserf,eg:iperf -s –D -R 停止iperf服务,针对-D,eg:iperf -s –R client端专用参数 -d 同时进行双向传输测试 -n 指定传输的字节数,eg:iperf -c 222.35.11.23 -n 100000 -r 单独进行双向传输测试 -t 测试时间,默认10秒,eg:iperf -c 222.35.11.23 -t 5
SDRAM内存详解(经典) 我们从内存颗粒、内存槽位接口、主板和内存之间的信号、接口几个方面来详细阐述SDRAM内存条和主板内存系统的设计思路... 虽然目前SDRAM内存条价格已经接底线,内存开始向DDR和Rambus内存过渡。但是由于DDR内存是在SDRAM基础上发展起来的,所以详细了解SDRAM内存的接口和主板设计方法对于设计基于DDR内存的主板不无裨益。下面我们就从内存颗粒、内存槽位接口、主板和内存之间的信号接口几个方面来详细阐述SDRAM内存条和主板内存系统的设计思路。 内存颗粒介绍 对于DRAM(Dynamic Random Access Memory)内存我想凡是对于计算机有所了解的读者都不会陌生。这种类型的内存都是以一个电容是否充有电荷来作为存储状态的标志,电容冲有电荷为状态1,电容没有电荷为状态0。其最大优点是集成度高,容量大,但是其速度相对于SRAM (Static Random Access Memory) 内存来说慢了许多。目前的内存颗粒封装方式有许多种,本文仅仅以大家常见的TSSOP封装的内存颗粒为例子。 其各个管脚的信号定义和我们所使用的DIMM插槽的定义是相同的,对于不同容量的内存,地址信号的位数有所不同。另外一个需要注意的地方就是其供电电路。Vcc和Vss是为内存颗粒中的存储队列供电,而VccQ和VssQ是为内存颗粒中的地址和数据缓冲区供电。两者的作用不同。 我们对内存颗粒关心的问题主要是其颗粒的数据宽度(数据位数)和容量(寻址空间大小)。而对于颗粒自检、颗粒自刷新等等逻辑并不需要特别深入的研究,所以对此我仅仅是一笔带过,如果读者有兴趣的读者可以详细研究内存颗粒的数据手册。虽然内存颗粒有这么多的逻辑命令方式,但是由于目前北桥芯片和内存颗粒的集成度非常高,只要在布线和元器件的选择上严格按照内存规范来设计和制造,需要使用逻辑分析仪来调试电路上的差错的情况比较少,并且在设计过程中尽量避免出现这种情况。 168线DIMM内存插槽的信号定义 我们目前PC和Server使用的内存大都是168 Pins的SDRAM,区别只是其工作频率有的可能是100MHz频率,有的可能是133MHz频率的。但是只要是SDRAM,其DIMM插槽的信号定义是一样的。而这些引脚得定义就是设计内存条和主板所必须遵从的规范。 内存引脚主要分为如下几类:地址引脚、数据引脚(包含校验位引脚)、片选等控制信号、时钟信号。整个内存时序系统就是这些引脚上的信号配合产生。下面的表中就是内存插槽的引脚数量和引脚定义,对于一些没有定义或者是保留以后使用的信号就没有列出来。 符号功能详细描述 DQ [0-63] I/O 数据输入/输出 CB [0-7] I/O ECC内存的ECC校验输入/输出 A [0-13] I/O 地址选择 BA [0-1] Control Bank选择 CS [0-3] Control 片选信号 RAS Control 行地址选择信号 CAS Control 列地址选择信号 DQMB [0-7] Control 数据掩码控制(DQ Mask)高有效* WE Control 写允许信号 CK [0-3] Clock 时钟信号 CKE [0-1] Clock 时钟允许信号** REGE Control 寄存器 (Registered) 允许信号
Iperf使用文档 原理: 1.在服务器端运行命令: 在LINUX下命令:./iperf –s #此命令表示测试TCP模式下的速度 ./iperf –s –u #此命令表示测试UDP模式下的速度 在Windows下命令:iperf –s Iperf –s –u 2.在客户端运行命令: 在Windows下直接输入:iperf –c 服务器ip地址–w 500k #测试TCP模式下的速度,-w后 的参数必须加上,表示测试 100M的带宽 Iperf –c服务器ip地址-u –b 1000m #测试UDP模式下的速度,-b 后的参数必须加载上,默认情 况下UDP协议只测试1M速 率,改成1000M就是测千M 速度。 3.参数说明 -s 以server模式启动,eg:iperf –s -c host以client模式启动,host是server端地址,eg:iperf -c 222.35.11.23 通用参数 -f [kmKM] 分别表示以Kbits, Mbits, KBytes, MBytes显示报告,默认以Mbits为单位,eg:iperf -c 222.35.11.23 -f K -i sec 以秒为单位显示报告间隔,eg:iperf -c 222.35.11.23 -i 2 -p 指定服务器端使用的端口或客户端所连接的端口eg:iperf -s -p 9999;iperf -c 222.35.11.23 -p 9999 -u 使用udp协议 -B 绑定一个主机地址或接口(当主机有多个地址或接口时使用该参数) -C 兼容旧版本(当server端和client端版本不一样时使用) -t 测试时间,默认10秒,eg:iperf -c 222.35.11.23 -t 5 实例: 服务器端:TCP速率测试
I P e r f使用方法及经验 总结 Company Document number:WTUT-WT88Y-W8BBGB-BWYTT-19998
IPerf使用方法及经验总结 Iperf是一个网络性能测试工具,它拥有多个参数,可以测量TCP和UDP的带宽,延时抖动以及丢包率。 一安装 Iperf不需要安装,当需要用Iperf来测试网络中两个结点间的带宽时,只需把文件分别copy到这两台计算机的硬盘中。使用时,直接在命令行窗口中运行带各种参数的iperf命令即可。 二常用参数介绍 这里只介绍几个测试中需要经常使用的参数。更多参数的介绍可以在命令行窗口中输入 iperf –h 或 iperf -help查看。 参数说明 -s 以server模式启动,默认是TCP方式,eg:iperf –s -c host以client模式启动,host是server端地址,eg:iperf -c Note: 这里的server和client的概念跟我们在应用层的理解是相反的。举个例子,LAN和WAN之间,下行数据,我们通常会认为WAN端是server,LAN端是client. 在Iperf中,如果测试下行速率,则是把WAN端作为client,LAN端作为Server.这个一定要记住。 -t 测试时间,默认10秒, eg:iperf –c -t 100 -w 指定窗口大小,默认是8KB -i sec 以秒为单位间隔显示报告,eg:iperf -c -i 2 -u 使用udp协议 -b 指定bindwidth,仅适用于UDP,默认是1Mbit/sec
-l 缓冲区大小,默认是8KB, iperf –c -l 1000 Note:此值在测试UDP时非常重要,如果太小,将导致CFM hang up,如果太大,将导致UDP分片出错,CPE会频繁Down掉。建议此值在800-1200之间。(通过抓包可以看出包的大小). -n 指定传输的字节数, eg:iperf -c -n 100000 -p 指定服务器端或客户端所连接的端口 eg:iperf -s -p 9999; iperf -c -p 9999 三应用举例 测试描述:分别使用TCP和UDP Package测试WAN到LAN之间的下行速率 测试环境: 配置:启动DMZ TCP 1 在LAN端启动server,并修改Window大小 2 在WAN端启动多个Client,修改Window大小,测试时间为100秒,每两秒钟显示一次报告。本例中启动了3个client,其中一个显示如下: 3 运行3个client后,在Server端显示如下: 4 运行完毕后,Server端会统计出相关数据的平均值。
D D R 系列系列内存内存内存详解及硬件详解及硬件 设计规范 By: Michael Oct 12, 2010 haolei@https://www.wendangku.net/doc/c712724649.html,
目录 1.概述 (3) 2.DDR的基本原理 (3) 3.DDR SDRAM与SDRAM的不同 (5) 3.1差分时钟 (6) 3.2数据选取脉冲(DQS) (7) 3.3写入延迟 (9) 3.4突发长度与写入掩码 (10) 3.5延迟锁定回路(DLL) (10) 4.DDR-Ⅱ (12) 4.1DDR-Ⅱ内存结构 (13) 4.2DDR-Ⅱ的操作与时序设计 (15) 4.3DDR-Ⅱ封装技术 (19) 5.DDR-Ⅲ (21) 5.1DDR-Ⅲ技术概论 (21) 5.2DDR-Ⅲ内存的技术改进 (23) 6.内存模组 (26) 6.1内存模组的分类 (26) 6.2内存模组的技术分析 (28) 7.DDR 硬件设计规范 (34) 7.1电源设计 (34) 7.2时钟 (37) 7.3数据和DQS (38) 7.4地址和控制 (39) 7.5PCB布局注意事项 (40) 7.6PCB布线注意事项 (41) 7.7EMI问题 (42) 7.8测试方法 (42)
摘要: 本文介绍了DDR 系列SDRAM 的一些概念和难点,并分别对DDR-I/Ⅱ/Ⅲ的技术特点进行了论述,最后结合硬件设计提出一些参考设计规范。 关键字关键字::DDR, DDR, SDRAM SDRAM SDRAM, , , 内存模组内存模组内存模组, , , DQS DQS DQS, DLL, MRS, ODT , DLL, MRS, ODT , DLL, MRS, ODT Notes : Aug 30, 2010 – Added DDR III and the PCB layout specification - by Michael.Hao
Iperf使用方法 Iperf 是一个网络性能测试工具。Iperf可以测试TCP和UDP带宽质量。Iperf可以测量最大TCP带宽,具有多种参数和UDP特性。Iperf可以报告带宽,延迟抖动和数据包丢失。 Iperf使用方法与参数说明 参数说明 -s 以server模式启动,eg:iperf -s -c host 以client模式启动,host是server端地址,eg:iperf -c 222.35.11.23 通用参数 -f [k|m|K|M] 分别表示以Kbits, Mbits, KBytes, MBytes显示报告,默认以Mbits为单位,eg:iperf -c 222.35.11.23 -f K -i sec 以秒为单位显示报告间隔,eg:iperf -c 222.35.11.23 -i 2 -l 缓冲区大小,默认是8KB,eg:iperf -c 222.35.11.23 -l 16 -m 显示tcp最大mtu值 -o 将报告和错误信息输出到文件eg:iperf -c 222.35.11.23 -o c:\iperflog.txt -p 指定服务器端使用的端口或客户端所连接的端口eg:iperf -s -p 9999;iperf -c 222.35.11.23 -p 9999 -u 使用udp协议 -w 指定TCP窗口大小,默认是8KB -B 绑定一个主机地址或接口(当主机有多个地址或接口时使用该参数) -C 兼容旧版本(当server端和client端版本不一样时使用) -M 设定TCP数据包的最大mtu值 -N 设定TCP不延时 -V 传输ipv6数据包 server专用参数 -D 以服务方式运行ipserf,eg:iperf -s -D -R 停止iperf服务,针对-D,eg:iperf -s -R client端专用参数 -d 同时进行双向传输测试 -n 指定传输的字节数,eg:iperf -c 222.35.11.23 -n 100000 -r 单独进行双向传输测试 -t 测试时间,默认10秒,eg:iperf -c 222.35.11.23 -t 5 -F 指定需要传输的文件 -T 指定ttl值
内存时序设置详解 内容概要 关键词:内存时序参数设置 导言:是否正确地设置了内存时序参数,在很大程度上决定了系统的基本性能。本文详细介绍了内存时序相关参数的基本涵义及设置要点。 与传统的SDRAM相比,DDR(Dual date rate SDRSM:双倍速率SDRAM),最重要的改变是在界面数据传输上,其在时钟信号上升缘与下降缘时各传输一次数据,这使得DDR 的数据传输速率为传统SDRAM的两倍。同样地,对于其标称的如DDR400,DDR333,DDR266数值,代表其工作频率其实仅为那些数值的一半,也就是说DDR400 工作频率为200MHz。 FSB与内存频率的关系 首先请大家看看FSB(Front Side Bus:前端总线)和内存比率与内存实际运行频率的关系。 FSB/MEM比率实际运行频率 1/1 200MHz 1/2 100MHz 2/3 133MHz 3/4 150MHz 3/05 120MHz 5/6 166MHz 7/10 140MHz 9/10 180MHz 对于大多数玩家来说,FSB和内存同步,即1:1是使性能最佳的选择。而其他的设置都是异步的。同步后,内存的实际运行频率是FSBx2,所以,DDR400的内存和200MHz的FSB正好同步。如果你的FSB为240MHz,则同步后,内存的实际运行频率为240MHz x 2 = 480MHz。
FSB与不同速度的DDR内存之间正确的设置关系 强烈建议采用1:1的FSB与内存同步的设置,这样可以完全发挥内存带宽的优势。内存时序设置 内存参数的设置正确与否,将极大地影响系统的整体性能。下面我们将针对内存关于时序设置参数逐一解释,以求能让大家在内存参数设置中能有清晰的思路,提高电脑系统的性能。 涉及到的参数分别为: ?CPC : Command Per Clock ?tCL : CAS Latency Control ?tRCD : RAS to CAS Delay ?tRAS : Min RAS Active Timing ?tRP : Row Precharge Timing ?tRC : Row Cycle Time ?tRFC : Row Refresh Cycle Time ?tRRD : Row to Row Delay(RAS to RAS delay) ?tWR : Write Recovery Time ?……及其他参数的设置 CPC : Command Per Clock 可选的设置:Auto,Enable(1T),Disable(2T)。 Command Per Clock(CPC:指令比率,也有翻译为:首命令延迟),一般还被描述为DRAM Command Rate、CMD Rate等。由于目前的DDR内存的寻址,先要进行P-Bank的选择(通过DIMM上CS片选信号进行),然后才是L-Bank/行激活与列地址的选择。这个参数的含义就是指在P-Bank选择完之后多少时间可以发出具体的寻址的L-Bank/行激活命令,单位是时钟周期。
Iperf使用方法与参数说明 Iperf是一个网络性能测试工具。可以测试TCP和UDP带宽质量,可以测量最大TCP带宽,具有多种参数和UDP特性,可以报告带宽,延迟抖动和数据包丢失。Iperf在linux和windows平台均有二进制版本供自由使用。 参数说明 -s 以server模式启动,eg:iperf -s -c host以client模式启动,host是server端地址,eg:iperf -c 172.16.10.20 通用参数 -f [kmKM] 分别表示以Kbits, Mbits, KBytes, MBytes显示报告,默认以Mbits为单位,eg:iperf -c 172.16.10.20 -f K -i sec 以秒为单位显示报告间隔,eg:iperf -c 172.16.10.20-i 2 -l 缓冲区大小,默认是8KB,eg:iperf -c 172.16.10.20-l 16 -m 显示tcp最大mtu值 -o 将报告和错误信息输出到文件eg:iperf -c 172.16.10.20-o ciperflog.txt
-p 指定服务器端使用的端口或客户端所连接的端口eg:iperf -s -p 9999;iperf -c 172.16.10.20-p 9999 -u 使用udp协议 -w 指定TCP窗口大小,默认是8KB -B 绑定一个主机地址或接口(当主机有多个地址或接口时使用该参数) -C 兼容旧版本(当server端和client端版本不一样时使用) -M 设定TCP数据包的最大mtu值 -N 设定TCP不延时 -V 传输ipv6数据包 server专用参数 -D 以服务方式运行iperf,eg:iperf -s -D -R 停止iperf服务,针对-D,eg:iperf -s -R client端专用参数
详解内存工作原理及发展历程 RAM(Random Access Memory)随机存取存储器对于系统性能的影响是每个PC 用户都非常清楚的,所以很多朋友趁着现在的内存价格很低纷纷扩容了内存,希望借此来得到更高的性能。不过现在市场是多种内存类型并存的,SDRAM、DDR SDRAM、RDRAM等等,如果你使用的还是非常古老的系统,可能还需要EDO DRAM、FP DRAM(块页)等现在不是很常见的内存。 虽然RAM的类型非常的多,但是这些内存在实现的机理方面还是具有很多相同的地方,所以本文的将会分为几个部分进行介绍,第一部分主要介绍SRAM 和异步DRAM(asynchronous DRAM),在以后的章节中会对于实现机理更加复杂的FP、EDO和SDRAM进行介绍,当然还会包括RDRAM和SGRAM等等。对于其中同你的观点相悖的地方,欢迎大家一起进行技术方面的探讨。 存储原理: 为了便于不同层次的读者都能基本的理解本文,所以我先来介绍一下很多用户都知道的东西。RAM主要的作用就是存储代码和数据供CPU在需要的时候调用。但是这些数据并不是像用袋子盛米那么简单,更像是图书馆中用有格子的书架存放书籍一样,不但要放进去还要能够在需要的时候准确的调用出来,虽然都是书但是每本书是不同的。对于RAM等存储器来说也是一样的,虽然存储的都是代表0和1的代码,但是不同的组合就是不同的数据。 让我们重新回到书和书架上来,如果有一个书架上有10行和10列格子(每行和每列都有0-9的编号),有100本书要存放在里面,那么我们使用一个行的编号+一个列的编号就能确定某一本书的位置。如果已知这本书的编号87,
iperf的测试注意事项: 1、iperf不需要安装,只需要把iperf.exe拷贝到指定目录下(server和client 端各拷一个),然后“开始-->运行-->打开中输入"cmd"后确定” 服务器端示例: (示例中将iperf.exe拷贝到了E盘根目录) 按“Ctrl+C”可以马上退出iperf的运行。 客户端示例:(示例所输入的指令中的IP地址为server端的IP地址)
2、参数是大小写敏感的。 3、"iperf -h"就可以显示所有参数的含义信息。其中部分参数含义解释附后。 4、UDP的方式下,默认的发送带宽是1M,所以,需要用参数“-b”来指定发送带宽,如下图所示: 服务器端示例: 客户端示例: 详细参数说明如下: -s 以server模式启动,eg:iperf -s -c host以client模式启动,host是server端地址,eg:iperf -c 10.10.1.8 server专用参数 -D 以服务方式运行ipserf,eg:iperf -s -D -R 停止iperf服务,针对-D,eg:iperf -s -R client端专用参数 -d 同时进行双向传输测试 -n 指定传输的字节数,eg:iperf -c 10.10.1.8 -n 100000 -r 单独进行双向传输测试
-t 测试时间,默认10秒,eg:iperf -c 10.10.1.8 -t 5 -F 指定需要传输的文件 -T 指定ttl值(time-to-live) server和client端均可使用的通用参数: -l 缓冲区大小,默认是8KB,eg:iperf -c 10.10.1.8 -l 16 可以使用不同的包长,进行测试 -u 使用udp协议 -w 指定TCP窗口大小,默认是8KB 如果窗口太小,有可能丢包 -B 绑定一个主机地址或接口(当主机有多个地址或接口时使用该参数) -o 将报告和错误信息输出到文件eg:iperf -c 10.10.1.8-o c:\iperflog.txt -p 指定服务器端使用的端口或客户端所连接的端口eg:iperf -s -p 9999;iperf -c 10.10.1.8-p 9999 -C 兼容旧版本(当server端和client端版本不一样时使用) -M 设定TCP数据包的最大mtu值 -N 设定TCP不延时 -V 传输ipv6数据包 -m 显示tcp最大mtu值 -h 显示帮助信息(参数解释) -i sec 以秒为单位显示报告间隔,eg:iperf -c 222.35.11.23 -i 2 iperf是client端向server端发送数据 server端显示的是接收速率,最好加i参数,进行速率跟踪 client 显示的是发送速率 server 显示接收速率
内存这样小小的一个硬件,却是PC系统中最必不可少的重要部件之一。而对于入门用户来说,可能从内存的类型、工作频率、接口类型这些简单的参数的印象都可能很模糊的,而对更深入的各项内存时序小参数就更摸不着头脑了。而对于进阶玩家来说,内存的一些具体的细小参数设置则足以影响到整套系统的超频效果和最终性能表现。如果不想当菜鸟的话,虽然不一定要把各种参数规格一一背熟,但起码有一个基本的认识,等真正需要用到的时候,查起来也不会毫无概念。 内存种类 目前,桌面平台所采用的内存主要为DDR 1、DDR 2和DDR 3三种,其中DDR1内存已经基本上被淘汰,而DDR2和DDR3是目前的主流。 DDR1内存 第一代DDR内存 DDR SDRAM 是Double Data Rate SDRAM的缩写,是双倍速率同步动态随机存储器的意思。DDR内存是在SDRAM内存基础上发展而来的,仍然沿用SDRAM生产体系,因此对于内存厂商而言,只需对制造普通SDRAM的设备稍加改进,即可实现DDR内存的生产,可有效的降低成本。 DDR2内存
第二代DDR内存 DDR2 是DDR SDRAM 内存的第二代产品。它在DDR 内存技术的基础上加以改进,从而其传输速度更快(可达800MHZ ),耗电量更低,散热性能更优良。 DDR3内存 第三代DDR内存
DDR3相比起DDR2有更低的工作电压,从DDR2的1.8V降落到1.5V,性能更好更为省电;DDR2的4bit预读升级为8bit预读。DDR3目前最高能够1600Mhz的速度,由于目前最为快速的DDR2内存速度已经提升到800Mhz/1066Mhz的速度,因而首批DDR3内存模组将会从1333Mhz的起跳。 三种类型DDR内存之间,从内存控制器到内存插槽都互不兼容。即使是一些在同时支持两种类型内存的Combo主板上,两种规格的内存也不能同时工作,只能使用其中一种内存。 内存SPD芯片 内存SPD芯片 SPD(Serial Presence Detect): SPD是一颗8针的EEPROM(Electrically Erasable Programmable ROM 电可擦写可编程只读存储器), 容量为256字节,里面主要保存了该内存的相关资料,如容量、芯片厂商、内存模组厂商、工作速度等。SPD的内容一般由内存模组制造商写入。支持SPD的主板在启动时自动检测SPD中的资料,并以此设定内存的工作参数。 启动计算机后,主板BIOS就会读取SPD中的信息,主板北桥芯片组就会根据这些参数信息来自动配置相应的内存工作时序与控制寄存器,从而可以充分发挥内存条的性能。上述情况实现的前提条件是在BIOS设置界面中,将内存设置选项设为“By SPD”。当主板从内存条中不能检测到SPD信息时,它就只能提供一个较为保守的配置。 从某种意义上来说,SPD芯片是识别内存品牌的一个重要标志。如果SPD内的参数值设置得不合理,不但不能起到优化内存的作用,反而还会引起系统工作不稳定,甚至死机。因此,很多普通内存或兼容内存厂商为了避免兼容性问题,一般都将SPD中的内存工作参数设置得较为保守,从而限制了内存性能的充分发挥。更有甚者,一些不法厂商通过专门的读
经常听到有企业员工抱怨网络速度如何如何缓慢,也经常怀疑花费高昂金额租用来的网络链路是否真的物有所值而没有被电信部门缩水,还有时发现内网链路总是存在着这样或那样不稳定数据传输忽快忽慢的情况。这些问题都是困扰各位网络管理员的实际问题,今天笔者就从自己经验入手为各位讲解如何通过iperf让内网传输速度心知肚明。 一,网络带宽测量工具简介: 一般来说市面上常用的网络带宽及网络吞吐量测量工具主要有以下几种,包括iperf,netperf,chariot等专业的工具。通过他们我们可以实现测量有线网络两个结点或者无线网络任意两个结点之间的传输速度,测量的参数包括数据流方向,吞吐量以及稳定程度等。 当然经常关注我们IT168网络频道的读者都应该对chariot工具比较了解,毕竟我们之前已经有多篇文章介绍他的使用和测量技巧了。但是chariot在实际测量过程中操作过于复杂,很多功能对于我们这些普通用户来说都不太实际,所以在本文中笔者将为各位IT168读者介绍iperf这个工具,在操作上他比chariot更加简单更好上手,适合于初学者以及对网络带宽要求不高环境下的测量。 二,通过下载测量网络传输速度: 在介绍iperf工具的使用之前我们先来看看其他测量网络传输速度的方法,首先是下载法。这个也是大家最常用的方法,即通过到本地网络或本地ISP服务提供商的服务器上下载文件,从而通过传输速度判断自己的网络带宽。 例如笔者所在网络是通过网通服务提供商接入的,所以直接到网通服务器上下载相应的文件,为了保证测量的准确性,我们一般选择单个大容量文件下载测试,通过观察其下载平均值了解当前网络带宽情况。(如图1) 文件下载法是最简单的不借助任何工具即可完成的网络传输速度测量方法,不过这个方法也存在着比较大的误差,我们的测量结果也会随着选择服务器的网络状况变化而改变,特别是当选择了电信服务器时下载速度将没有任何说服力。而且服务器选择也比较麻烦,不能被限制速度也不能够被限制会话连接数。
内存的插法详解 信息 Intel xeon 5500系列处理器集成3个内存控制器,每个控制器控制一个通道,组成3通道内存,对内存的插法也有很多种情况,根据不同的插法可以达到性能和安全不同的效果,本文主要介绍HP ProLiant DL380G6 服务器内存的插法。 详细信息 内存槽位描述 如下图 内存选件 NOTE: 服务器不支持RDIMM 和UDIMM混插。如混插会导致服务器在BIOS初始化时停机。 服务器的内存子系统同时支持RDIMM 和UDIMM两种类型。如果提到DIMM时下面的信息适用于这两种类型。当特指RDIMM或UDIMM时,提到的信息只使用于那种类型。安装在服务器中的内存必须同种型号。 服务器支持下面的内存速率: 1. 单-rank和双-rank PC3-10600(DDR-1333) 内存运行在1333和1066MHz
2. 4- rank PC3-8500(DDR-1067)运行在1066MHz 根据处理器类型,安装的内存数量和安装的是UDIMM或者RDIMM,内存时钟速率可能会降低到1066或800MHz。更多的安装内存槽位影响信息,查看下面信息。 内存子系统架构 服务器的内存子系统划分为channels.每个处理器支持3个channel.每个channel支持3个内存。请看下面的表格 在Advanced ECC 模式中这种多channel 的架构提供了增强的性能。这种架构在Mirrored 和Lockstep 内存模式中同样适用。服务器支持RDIMM 和UDIMM。 通用内存安装准则 在所有的AMP模式中遵守下面的准则: 1.只有安装处理器对应的内存槽可以安装内存。 2.在多处理配置的机型中,为达到最大化性能的目的,尽可能均匀地分配所有处理器对应的内 存总容量。 3.不要混插UDIMM和RDIMM。 4.每个channel 最多支持两个UDIMM。 5.如果一个处理器安装了4-rank的内存,那么那个处理器的每个channel最多只能安装2条 内存。 6.如果一个channel 包含4-rank的内存,那么4-rank的内存必须首先被安装在这个 channel上。 内存频率请看下图
Iperf是一种用来测量网络带宽和网络质量的工具。Jperf与Iperf一起使用的话可以提供一个java写成的图形界面。 两个运行Iperf的主机将网络分成了两份 可以用以下方法测试连接的质量: - 延时(反应时间或者RTT):用ping命令量度 - jitter(延时变化):用 Iperf UDP 测试来量度 - 数据报丢失:用Iperf UDP 测试来量度 带宽可以通过TCP测试来量度 TCP (Transmission Control Protocol)与 UDP (User Datagram Protocol)的区别是:TCP检查数据包是否正确的传送给接受者,而UDP并不进行检查。所以UDP 的传送速度比TCP要快。 Tperf使用TCP与UDP的不同功能来提供网络连接的统计数据。 最后,Iperf可以很容易的安装在任何UNIX/Linux或者Microsoft Windows系统中。必须将一台主机设置为客户端,一台设置为服务器。 以下是Iperf安装在Linux以及Microsoft Windows系统中的截图。在这里,Linux 是Iperf客户端,Windows是 Iperf服务器端。当然,两个都用上Linux系统也是可以的。 Iperf tests: no arg. -b -r -d -w 缺省设置 数据格式 双向性带宽 同步双向性带宽 TCP窗口大小 -p, -t, -i -u, -b -m -M -P 端口,时间,间隔 UDP测试,带宽设置 显示最大片段大小 最大片段大小设置 平行测试
-h帮助Jperf: no arg. -d -u, -b 缺省设置 同步双向性带宽UDP测试,带宽设置 缺省Iperf设置 同时检查Jperf部分 初始状态,Iperf客户端使用TCP端口5001来连接Iperf服务器,Iperf显示的带宽是从用户到服务器之间的带宽。 如果想使用UDP测试,使用-u参数。 Iperf客户端的-d> 和-r参数可以用来测量双向性带宽。(详情见指导书) 客户端 #iperf -c 10.1.1.1 ------------------------------------------------------------ Client connecting to 10.1.1.1, TCP port 5001 TCP window size: 16384 Byte (default) ------------------------------------------------------------ [ 3] local 10.6.2.5 port 33453 connected with 10.1.1.1 port 5001 [ 3] 0.0-10.2 sec 1.26 MBytes 1.05 Mbits/sec 服务器端 #iperf -s ------------------------------------------------------------ Server listening on TCP port 5001 TCP window size: 8.00 KByte (default) ------------------------------------------------------------ [852] local 10.1.1.1 port 5001 connected with 10.6.2.5 port 33453 [ ID] Interval Transfer Bandwidth [852] 0.0-10.6 sec 1.26 MBytes 1.03 Mbits/sec 数据形式(-f参数)
安装Iperf 2011-03-20 11:42:49| 分类:Linux | 标签:|字号大中小订阅 ./configure -- configure for your machine make -- compile Iperf make install -- install Iperf, if desired iperf -s (on machine "https://www.wendangku.net/doc/c712724649.html,") iperf -c https://www.wendangku.net/doc/c712724649.html, (on some other machine) iperf -h (for help screen) iperf -v (for version information) 1、./configure 这一步可能会出问题,即系统没有安装g++,apt-get install g++; 安装完后可以重新编译Iperf,最简单的方法是使用以下命令: 1、make distclean 2、./configure 3、make
iperf for Linux 的安装与使用 来源: ChinaUnix博客日期:2008.07.03 14:47 (共有条评论) 我要评论 什么是Iperf? Iperf 是一个网络性能测试工具。Iperf可以测试TCP和UDP带宽质量。Iperf可以测量最大TCP带宽,具有多种参数和UDP特性。Iperf可以报告带宽,延迟抖动和数据包丢失。 编译与安装 Iperf2.0.2目前仅提供源码包的下载。当你下载到Iperf源码包后,在类unix系统上,需要先解压缩源码包,使用解压缩命令gzip或tar。解压后会产生新文件夹“Iperf-2.0.2”。Iperf2.0.2在以下操作系统中可以很好的被编译:Linux,SGI IRIX,HP-UX,Solaris,AIX,和Cray UNICOS。使用“make”命令编译Iperf源码。完整的编译命令如下: tar xvf iperf-2.0.2.tar.gz cd iperf-2.0.2 ./configure make 编译:yum list gcc-c++, yum install gcc-c++.版本
Jperf使用方法 Jperf是Iperf在windows系统下的一种拓展软件,从原来的DOS黑白显示增加了更加人性化的UI界面,下面对Jperf的使用方法做简单介绍。 一、软件安装 Jperf是基于JAVA平台开发的一款软件,在使用之前必须下载安装jre环境,否则将无法运行Jperf软件。 Jperf软件下载文件如图1,双击jperf.bat运行Jperf。 图1 Jperf文件 二、软件设置 软件分成client端和server端,需要两台电脑分别运行客户端和服务器,图2为Jperf 主要功能和设置界面。 图2 主要功能和设置 设置服务端:选择运行模式为server,在Client Limit中填写运行客户端的IP地址,保持其他设置不变,点击开始按钮。 图3 服务端设置 设置客户端:选择运行模式Client,在Server address中填写运行服务端的IP地址,Parallel Streams为并发数,可以根据测试情况任意填写。需要开始测试时点击开始按钮。
图4 客户端设置 在图5显示中Transmit设置为测试时间,Output Format为测试结果显示格式,这里推荐使用MBits,可以在测试结果中更加直观的显示结果。 图5 时间和显示设置 三、测试测试结果 在测试结果中,我们主要以客户端显示的结果为主要说明,这里我们将parallel Streams设置为10,Transmit设置为10秒,Output Format设置为MBits。保持服务端处于运行状态,并点击客户端的开始按钮。 随后在软件右侧会显示出得到的结果,如图6,该图中可以以图形界面和文本界面显示出测试结果。 [ ID] Interval Transfer Bandwidth [1844] 0.0-10.0 sec 11.1 MBytes 9.28 Mbits/sec /*线程1844,0至10秒共传输11.1MBytes,带宽9.28Mbps*/ [1748] 0.0-10.0 sec 11.1 MBytes 9.32 Mbits/sec [1812] 0.0-10.0 sec 11.0 MBytes 9.24 Mbits/sec [1860] 0.0-10.0 sec 11.2 MBytes 9.39 Mbits/sec [1764] 0.0-10.0 sec 11.2 MBytes 9.35 Mbits/sec [1780] 0.0-10.0 sec 11.1 MBytes 9.24 Mbits/sec [1796] 0.0-10.0 sec 11.2 MBytes 9.34 Mbits/sec [1732] 0.0-10.0 sec 11.2 MBytes 9.34 Mbits/sec [1828] 0.0-10.0 sec 11.2 MBytes 9.36 Mbits/sec [1876] 0.0-10.0 sec 11.2 MBytes 9.37 Mbits/sec [SUM] 0.0-10.0 sec 111 MBytes 93.2 Mbits/sec/*10秒总计传输111MBytes,总带宽为93.2Mbps*/
详解内存(RAM,SRAM,SDRAM)工作原理及发展历程 RAM(Random Access Memory)随机存取存储器对于系统性能的影响是每个PC用户都非常清楚的,所以很多朋友趁着现在的内存价格很低纷纷扩容了内存,希望借此来得到更高的性能。不过现在市场是多种内存类型并存的,SDRAM、DDR SDRAM、RDRAM等等,如果你使用的还是非常古老的系统,可能还需要EDO DRAM、FP DRAM(块页)等现在不是很常见的内存。 虽然RAM的类型非常的多,但是这些内存在实现的机理方面还是具有很多相同的地方,所以本文的将会分为几个部分进行介绍,第一部分主要介绍SRAM和异步DRAM(asynchronous DRAM),在以后的章节中会对于实现机理更加复杂的FP、EDO和SDRAM进行介绍等等。 存储原理: RAM主要的作用就是存储代码和数据供CPU在需要的时候调用。但是这些数据并不是像用袋子盛米那么简单,更像是图书馆中用有格子的书架存放书籍一样,不但要放进去还要能够在需要的时候准确的调用出来,虽然都是书但是每本书是不同的。对于RAM等存储器来说也是一样的,虽然存储的都是代表0和1的代码,但是不同的组合就是不同的数据。 让我们重新回到书和书架上来,如果有一个书架上有10行和10列格子(每行和每列都有0-9的编号),有100本书要存放在里面,那么我们使用一个行的编号+一个列的编号就能确定某一本书的位置。如果已知这本书的编号87,那么我们首先锁定第8行,然后找到第7列就能准确的找到这本书了。在RAM存储器中也是利用了相似的原理。 现在让我们回到RAM存储器上,对于RAM存储器而言数据总线是用来传入数据或者传出数据的。因为存储器中的存储空间是如同前面提到的存放图书的书架一样通过一定的规则定义的,所以我们可以通过这个规则来把数据存放到存储器上相应的位置,而进行这种定位的工作就要依靠地址总线来实现了。对于CPU来说,RAM就象是一条长长的有很多空格的细线,每个空格都有一个唯一的地址与之相对应。如果CPU想要从RAM中调用数据,它首先需要给地址总线发送地址数据定位要存取的数据,然后等待若干个时钟周期之后,数据总线就会把数据传输给CPU。下面的示意图可以帮助你很好的理解这个过程。
网络性能评估工具iperf3 Iperf 是一个网络性能测试工具。Iperf可以测试TCP和UDP带宽质量。Iperf 可以测量最大TCP带宽,具有多种参数和UDP特性。Iperf可以报告带宽,延迟抖动和数据包丢失。 一、安装 1、将iperf安装包上传到服务器/tmp/目录并解压 [root@localhost /]#cd /tmp/ [root@localhost tmp]#tar–zxvf iperf-3.0.5.tar.gz 2、编译并安装iperf [root@localhost tmp]# cd iperf-3.0.5 [root@localhost iperf-3.0.5]#./configure [root@localhost stress-1.0.4]#make [root@localhost stress-1.0.4]#make install 注意:运行iperf3 -s 遇到显示iperf3: error while loading shared libraries: libiperf.so.0: cannot open shared object file: No such file or directory 解决办法:运行以下指令: 1.cd / 2.find ./ | grep libiperf.so.0 3.echo $LD_LIBRARY_PATH 4.LD_LIBRARY_PATH=/usr/local/lib 5.LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib/libiperf.so.0 6.export LD_LIBRARY_PATH 7.iperf3 -s 二、Iperf使用方法 1、Iperf使用方法与参数说明 -s 以server模式启动,eg:iperf -s -c host 以client模式启动,host是server端地址,eg:iperf -c 222.35.11.23 通用参数 -f [k|m|K|M] 分别表示以Kbits, Mbits, KBytes, MBytes显示报告,默认以Mbits 为单位,eg:iperf -c 222.35.11.23 -f K