编译方法: 1 tasm 3d.asm
2 tlink 3d.obj
3 exe2bin 3d.exe 3d.com
Assembler Program By Vulture.
3D-system example. Use the following formulas to rotate a point:
Rotate around x-axis
YT = Y * COS(xang) - Z * SIN(xang) / 256
ZT = Y * SIN(xang) Z * COS(xang) / 256
Y = YT
Z = ZT
Rotate around y-axis
XT = X * COS(yang) - Z * SIN(yang) / 256
ZT = X * SIN(yang) Z * COS(yang) / 256
X = XT
Z = ZT
Rotate around z-axis
XT = X * COS(zang) - Y * SIN(zang) / 256
YT = X * SIN(zang) Y * COS(zang) / 256
X = XT
Y = YT
Divide by 256 coz we have multiplyd our sin values with 256 too.
This example isn’t too fast right now but it’ll work just fine.
Current Date: 6-9-95 Vulture
IDEAL Ideal mode
P386 Allow 80386 instructions
JUMPS Tasm handles out of range jumps (rulez!:))
SEGMENT CODE Code segment starts
ASSUME cs:code,ds:code Let cs and ds point to code segment
ORG 100h Make a .COM file
START: Main program
mov ax,0013h Init vga
int 10h
mov ax,cs
mov ds,ax ds points to codesegment
mov ax,0a000h
mov es,ax es points to vga [Page]
lea si,[Palette] Set palette
mov dx,3c8h
xor al,al
out dx,al
mov dx,3c9h
mov cx,189*3
repz outsb
=== Set some variables ===
mov [DeltaX],1 Initial speed of rotation
mov [DeltaY],1 Change this and watch what
mov [DeltaZ],1 happens. It’s fun!
mov [Xoff],256
mov [Yoff],256 Used for calculating vga-pos
mov [Zoff],300 Distance from viewer
MainLoop:
call MainProgram Yep... do it all... -)
in al,60h Scan keyboard
cmp al,1 Test on ESCAPE
jne MainLoop Continue if not keypressed
=== Quit to DOS ===
mov ax,0003h Back to textmode
int 10h
lea dx,[Credits]
mov ah,9
int 21h
mov ax,4c00h Return control to DOS
int 21h Call DOS interrupt
=== Sub-routines ===
PROC WaitVrt Waits for vertical retrace to reduce \"snow\"
mov dx,3dah
Vrt:
in al,dx
test al,8
jnz Vrt Wait until Verticle Retrace starts
NoVrt:
in al,dx
test al,8
jz NoVrt Wait until Verticle Retrace ends
ret Return to main program
ENDP WaitVrt
PROC UpdateAngles
Calculates new x,y,z angles
to rotate around
mov ax,[XAngle] Load current angles
mov bx,[YAngle]
mov cx,[ZAngle]
add ax,[DeltaX] Add velocity
and ax,11111111b Range from 0..255
mov [XAngle],ax Update X
add bx,[DeltaY] Add velocity
and bx,11111111b Range from 0..255
mov [YAngle],bx Update Y
add cx,[DeltaZ] Add velocity
and cx,11111111b Range from 0..255
mov [ZAngle],cx Update Z
ret
ENDP UpdateAngles
PROC GetSinCos
Needed : bx=angle (0..255)
Returns: ax=Sin bx=Cos
push bx Save angle (use as pointer)
shl bx,1 Grab a word so bx=bx*2 [Page]
mov ax,[SinCos bx] Get sine
pop bx Restore pointer into bx
push ax Save sine on stack
add bx,64 Add 64 to get cosine
and bx,11111111b Range from 0..255
shl bx,1 *2 coz it’s a word
mov ax,[SinCos bx] Get cosine
mov bx,ax Save it bx=Cos
pop ax Restore ax=Sin
ret
ENDP GetSinCos
PROC SetRotation
Set sine &cosine of x,y,z
mov bx,[XAngle] Grab angle
call GetSinCos Get the sine&cosine
mov [Xsin],ax Save sin
mov [Xcos],bx Save cos
mov bx,[Yangle]
call GetSinCos
mov [Ysin],ax
mov [Ycos],bx
mov bx,[Zangle]
call GetSinCos
mov [Zsin],ax
mov [Zcos],bx
ret
ENDP SetRotation
PROC RotatePoint Rotates the point around x,y,z
Gets original x,y,z values
This can be done elsewhere
movsx ax,[Cube si] si = X (movsx coz of byte)
mov [X],ax
movsx ax,[Cube si 1] si 1 = Y
mov [Y],ax
movsx ax,[Cube si 2] si 2 = Z
mov [Z],ax
Rotate around x-axis
YT = Y * COS(xang) - Z * SIN(xang) / 256
ZT = Y * SIN(xang) Z * COS(xang) / 256
Y = YT
Z = ZT
mov ax,[Y]
mov bx,[XCos]
imul bx ax = Y * Cos(xang)
mov bp,ax
mov ax,[Z]
mov bx,[XSin]
imul bx ax = Z * Sin(xang)
sub bp,ax bp = Y * Cos(xang) - Z * Sin(xang)
sar bp,8 bp = Y * Cos(xang) - Z * Sin(xang) / 256
mov [Yt],bp
mov ax,[Y]
mov bx,[XSin]
imul bx ax = Y * Sin(xang)
mov bp,ax
mov ax,[Z]
mov bx,[XCos]
imul bx ax = Z * Cos(xang)
add bp,ax bp = Y * SIN(xang) Z * COS(xang) [Page]
sar bp,8 bp = Y * SIN(xang) Z * COS(xang) / 256
mov [Zt],bp
mov ax,[Yt] Switch values
mov [Y],ax
mov ax,[Zt]
mov [Z],ax
Rotate around y-axis
XT = X * COS(yang) - Z * SIN(yang) / 256
ZT = X * SIN(yang) Z * COS(yang) / 256
X = XT
Z = ZT
mov ax,[X]
mov bx,[YCos]
imul bx ax = X * Cos(yang)
mov bp,ax
mov ax,[Z]
mov bx,[YSin]
imul bx ax = Z * Sin(yang)
sub bp,ax bp = X * Cos(yang) - Z * Sin(yang)
sar bp,8 bp = X * Cos(yang) - Z * Sin(yang) / 256
mov [Xt],bp
mov ax,[X]
mov bx,[YSin]
imul bx ax = X * Sin(yang)
mov bp,ax
mov ax,[Z]
mov bx,[YCos]
imul bx ax = Z * Cos(yang)
add bp,ax bp = X * SIN(yang) Z * COS(yang)
sar bp,8 bp = X * SIN(yang) Z * COS(yang) / 256
mov [Zt],bp
mov ax,[Xt] Switch values
mov [X],ax
mov ax,[Zt]
mov [Z],ax
Rotate around z-axis
XT = X * COS(zang) - Y * SIN(zang) / 256
YT = X * SIN(zang) Y * COS(zang) / 256
X = XT
Y = YT
mov ax,[X]
mov bx,[ZCos]
imul bx ax = X * Cos(zang)
mov bp,ax
mov ax,[Y]
mov bx,[ZSin]
imul bx ax = Y * Sin(zang)
sub bp,ax bp = X * Cos(zang) - Y * Sin(zang)
sar bp,8 bp = X * Cos(zang) - Y * Sin(zang) / 256
mov [Xt],bp
mov ax,[X]
mov bx,[ZSin]
imul bx ax = X * Sin(zang)
mov bp,ax
mov ax,[Y]
mov bx,[ZCos]
imul bx ax = Y * Cos(zang)
add bp,ax bp = X * SIN(zang) Y * COS(zang) [Page]
sar bp,8 bp = X * SIN(zang) Y * COS(zang) / 256
mov [Yt],bp
mov ax,[Xt] Switch values
mov [X],ax
mov ax,[Yt]
mov [Y],ax
ret
ENDP RotatePoint
PROC ShowPoint
Calculates screenposition and
plots the point on the screen
mov ax,[Xoff] Xoff*X / Z Zoff = screen x
mov bx,[X]
imul bx
mov bx,[Z]
add bx,[Zoff] Distance
idiv bx
add ax,[Mx] Center on screen
mov bp,ax
mov ax,[Yoff] Yoff*Y / Z Zoff = screen y
mov bx,[Y]
imul bx
mov bx,[Z]
add bx,[Zoff] Distance
idiv bx
add ax,[My] Center on screen
mov bx,320
imul bx
add ax,bp ax = (y*320) x
mov di,ax
mov ax,[Z] Get color from Z
add ax,100d (This piece of code could be improved)
mov [byte ptr es:di],al Place a dot with color al
mov [Erase si],di Save position for erase
ret
ENDP ShowPoint
PROC MainProgram
call UpdateAngles Calculate new angles
call SetRotation Find sine &cosine of those angles
xor si,si First 3d-point
mov cx,MaxPoints
ShowLoop:
call RotatePoint Rotates the point using above formulas
call ShowPoint Shows the point
add si,3 Next 3d-point
loop ShowLoop
call WaitVrt Wait for retrace
xor si,si Starting with point 0
xor al,al Color = 0 = black
mov cx,MaxPoints
Deletion:
mov di,[Erase si] di = vgapos old point
mov [byte ptr es:di],al Delete it
add si,3 Next point
loop Deletion
ret
ENDP MainProgram
=== DATA ===
Credits DB 13,10,\"Code by Vulture / Outlaw Triad\",13,10,\"$\"
Label SinCos Word 256 values
dw 0,6,13,19,25,31,38,44,50,56 [Page]
dw 62,68,74,80,86,92,98,104,109,115
dw 121,126,132,137,142,147,152,157,162,167
dw 172,177,181,185,190,194,198,202,206,209
dw 213,216,220,223,226,229,231,234,237,239
dw 241,243,245,247,248,250,251,252,253,254
dw 255,255,256,256,256,256,256,255,255,254
dw 253,252,251,250,248,247,245,243,241,239
dw 237,234,231,229,226,223,220,216,213,209
dw 206,202,198,194,190,185,181,177,172,167
dw 162,157,152,147,142,137,132,126,121,115
dw 109,104,98,92,86,80,74,68,62,56
dw 50,44,38,31,25,19,13,6,0,-6
dw -13,-19,-25,-31,-38,-44,-50,-
56,-62,-68
dw -74,-80,-86,-92,-98,-104,-109,-115,-121,-126
dw -132,-137,-142,-147,-152,-157,-162,-167,-172,-177
dw -181,-185,-190,-194,-198,-202,-206,-209,-213,-216
dw -220,-223,-226,-229,-231,-234,-237,-239,-241,-243
dw -245,-247,-248,-250,-251,-252,-253,-254,-255,-255
dw -256,-256,-256,-256,-256,-255,-255,-254,-253,-252
dw -251,-250,-248,-247,-245,-243,-241,-239,-237,-234
dw -231,-229,-226,-223,-220,-216,-213,-209,-206,-202
dw -198,-194,-190,-185,-181,-177,-172,-167,-162,-157
dw -152,-147,-142,-137,-132,-126,-121,-115,-109,-104
dw -98,-92,-86,-80,-74,-68,-62,-56,-50,-44
dw -38,-31,-25,-19,-13,-6
Label Cube Byte The 3d points
c = -35 5x*5y*5z (=125) points
rept 5
b = -35
rept 5
a = -35
rept 5
db a,b,c
a = a 20
endm
b = b 20
endm
c = c 20
endm
Label Palette Byte The palette to use
db 0,0,0 63*3 gray-tint
d = 63
rept 63
db d,d,d
db d,d,d
db d,d,d
d = d - 1
endm
X DW ? X variable for formula
Y DW ?
Z DW ?
Xt DW ? Temporary variable for x
Yt DW ?
Zt DW ?
XAngle DW 0 Angle to rotate around x
YAngle DW 0
ZAngle DW 0
DeltaX DW ? Amound Xangle is increased each time
DeltaY DW ?
DeltaZ DW ?
Xoff DW ?
Yoff DW ?
Zoff DW ? Distance from viewer
XSin DW ? Sine and cosine of angle to rotate around
XCos DW ?
YSin DW ? [Page]
YCos DW ?
ZSin DW ?
ZCos DW ?
Mx DW 160 Middle of the screen
My DW 100
MaxPoints EQU 125 Number of 3d Points
Erase DW MaxPoints DUP (?) Array for deletion screenpoints
ENDS CODE End of codesegment
END START The definite end.... :)
You may use this code in your own productions but
give credit where credit is due. Only lamers steal
code so try to create your own 3d-engine and use
this code as an example.
Thanx must go to Arno Brouwer and Ash for releasing
example sources.
Ciao dudoz,
Vulture / Outlaw Triad
sar命令的用法很多,有时判断一个问题,需要几个sar命令结合起来使用,比如,怀疑CPU存在瓶颈,可用sar -u 和sar -q来看,怀疑I/O存在瓶颈,可用sar -b、sar -u和 sar-d来看
Sar
-A 所有的报告总和
-a 文件读,写报告
-B 报告附加的buffer cache使用情况
-b buffer cache使用情况
-c 系统调用使用报告
-d 硬盘使用报告
-g 有关串口I/O情况
-h 关于buffer使用统计数字
-m IPC消息和信号灯活动
-n 命名cache
-p 调页活动
-q 运行队列和交换队列的平均长度
-R 报告进程的活动
-r 没有使用的内存页面和硬盘块
-u CPU利用率
-v 进程,i节点,文件和锁表状态
-w 系统交换活动
-y TTY设备活动 sar –a 5 5
SCO_SV scosvr 3.2v5.0.5 PentII(D)ISA 06/07/2002
11:45:40 iget/s namei/s dirbk/s (-a)
11:45:45 6 2 2
11:45:50 91 20 28
11:45:55 159 20 18
11:46:00 157 21 19
11:46:05 177 30 35
Average 118 18 20
iget/s 每秒由i节点项定位的文件数量
namei/s 每秒文件系统路径查询的数量
dirbk/s 每秒所读目录块的数量
*这些值越大,表明核心花在存取用户文件上的时间越多,它反映着一些程序和应用文件系统产生的负荷。一般地,如果iget/s与namei/s的比值大于5,并且namei/s的值大于30,则说明文件系统是低效的。这时需要检查文件系统的自由空间,看看是否自由空间过少。 -b 报告缓冲区(buffer cache)的使用情况(buffer cache)-b 报告缓冲区的使用情况
sar -b 2 3
SCO_SV scosvr 3.2v5.0.5 PentII(D)ISA 06/07/2002
13:51:28 bread/s lread/s %rcache bwrit/s lwrit/s %wcache pread/s pwrit/s (-b)
13:51:30 382 1380 72 131 273 52 0 0
13:51:32 378 516 27 6 22 72 0 0
13:51:34 172 323 47 39 57 32 0 0
Average 310 739 58 58 117 50 0 0
bread/s 平均每秒从硬盘(或其它块设备)读入系统buffer的物理块数
lread/s 平均每秒从系统buffer读出的逻辑块数
%rcache 在buffer cache中进行逻辑读的百分比(即100% - bread/lreads)
bwrit/s 平均每秒从系统buffer向磁盘(或其它块设备)所写的物理块数
lwrit/s 平均每秒写到系统buffer的逻辑块数
%wcache 在buffer cache中进行逻辑写的百分比(即100% - bwrit/lwrit).
pread/sgu 平均每秒请求进行物理读的次数
pwrit/s 平均每秒请求进行物理写的次数
*所显示的内容反映了目前与系统buffer有关的读,写活。在所报告的数字中,最重要的是%rcache和%wcache(统称为cache命中率)两列,它们具体体现着系统buffer的效率。衡量cache效率的标准是它的命中率值的大小。
*如果%rcache的值小于90或者%wcache的值低于65,可能就需要增加系统buffer的数量。如果在系统的应用中,系统的I/O活动十分频繁,并且在内存容量配置比较大时,可以增加buffer cache,使%rcache达到95左右,%wcache达到80左右。
*系统buffer cache中,buffer的数量由核心参数NBUF控制。它是一个要调的参数。系统中buffer数量的多少是影响系统I/O效率的瓶颈。要增加系统buffer数量,则要求应该有较大的内存配置。否则一味增加buffer数量,势必减少用户进程在内存中的运行空间,这同样会导致系统效率下降。 sar -c 2 3
SCO_SV scosvr 3.2v5.0.5 PentII(D)ISA 06/07/2002
17:02:42 scall/s sread/s swrit/s fork/s exec/s rchar/s wchar/s (-c)
17:02:44 2262 169 141 0.00 0.00 131250 22159
17:02:46 1416 61 38 0.00 0.00 437279 6464
17:02:48 1825 43 25 0.00 0.00 109397 42331
Average 1834 91 68 0.00 0.00 225975 23651
scall/s 每秒使用系统调用的总数。一般地,当4~6个用户在系统上工作时,每秒大约30个左右。
sread/s 每秒进行读 *** 作的系统调用数量。
swrit/s 每秒进行写 *** 作的系统调用数量。
fork/s 每秒fork系统调用次数。当4~6个用户在系统上工作时,每秒大约0.5秒左右。
exec/s 每秒exec系统调用次数。
rchar/s 每秒由读 *** 作的系统调用传送的字符(以字节为单位)。
wchar/s 每秒由写 *** 作的系统调用传送的字符(以字节为单位)。
*如果scall/s持续地大于300,则表明正在系统中运行的可能是效率很低的应用程序。在比较
典型的情况下,进行读 *** 作的系统调用加上进行写 *** 作的系统调用之和,约是scall的一半左右。 sar -d 2 3
SCO_SV scosvr 3.2v5.0.5 PentII(D)ISA 06/07/2002
17:27:49 device %busy avque r+w/s blks/s avwait avserv (-d)
17:27:51 ida-0 6.93 1.00 13.86 259.41 0.00 5.00
ida-1 0.99 1.00 17.33 290.10 0.00 0.57
17:27:53 ida-0 75.50 1.00 54.00 157.00 0.00 13.98
ida-1 9.50 1.00 12.00 75.00 0.00 7.92
17:27:55 ida-0 7.46 1.00 46.77 213.93 0.00 1.60
ida-1 17.41 1.00 57.71 494.53 0.00 3.02
Average ida-0 29.85 1.00 38.14 210.28 0.00 7.83
ida-1 9.29 1.00 29.02 286.90 0.00 3.20
device 这是sar命令正在监视的块设备的名字。
%busy 设备忙时,运行传送请求所占用的时间。这个值以百分比表示。
avque 在指定的时间周期内,没有完成的请求数量的平均值。仅在队列被占满时取这个值。
r+w/s 每秒传送到设备或者从设备传送出的数据量。
blks/s 每秒传送的块数。每块512个字节。
avwait 传送请求等待队列空闲的平均时间(以毫秒为单位)。仅在队列被占满时取这个值。
avserv 完成传送请求所需平均时间(以毫秒为单位)
*ida-0和ida-1是硬盘的设备名字。在显示的内容中,如果%busy的值比较小,说明用于处理
传送请求的有效时间太少,文件系统的效率不高。要使文件系统的效率得到优化,应使%busy的数值相对高一些,而avque的值应该低一些。 sar -g 3 3
SCO_SV scosvr 3.2v5.0.5 PentII(D)ISA 06/13/2002
11:10:09 ovsiohw/s ovsiodma/s ovclist/s (-g)
11:10:12 0.00 0.00 0.00
11:10:15 0.00 0.00 0.00
11:10:18 0.00 0.00 0.00
Average 0.00 0.00 0.00
ovsiohw/s 每秒在串囗I/O硬件出现的溢出。
ovsiodma/s 每秒在串囗I/O的直接输入,输出信道高速缓存出现的溢出。
ovclist/s 每秒字符队列出现的溢出。 -m 报告进程间的通信活动(IPC消息和信号灯活动)情况
sar -m 4 3
SCO_SV scosvr 3.2v5.0.5 PentII(D)ISA 06/13/2002
13:24:28 msg/s sema/s (-m)
13:24:32 2.24 9.95
13:24:36 2.24 21.70
13:24:40 2.00 36.66
Average 2.16 22.76
msg/s 每秒消息 *** 作的次数(包括发送消息的接收信息)。
sema/s 每秒信号灯 *** 作次数。
*信号灯和消息作为进程间通信的工具,如果在系统中运行的应用过程中没有使用它们,那么由sar命令报告的msg 和sema的值都将等于0.00。如果使用了这些工具,并且其中或者msg/s大于100,或者sema/s大于100,则表明这样的应用程序效率比较低。原因是在这样的应用程序中,大量的时间花费在进程之间的沟通上,而对保证进程本身有效的运行时间必然产生不良的影响。 sar -n 4 3
SCO_SV scosvr 3.2v5.0.5 PentII(D)ISA 06/13/2002
13:37:31 c_hits cmisses (hit %) (-n)
13:37:35 1246 71 (94%)
13:37:39 1853 81 (95%)
13:37:43 969 56 (94%)
Average 1356 69 (95%)
c_hits cache命中的数量。
cmisses cache未命中的数量。
(hit %) 命中数量/(命中数理+未命中数量)。
*不难理解,(hit %)值越大越好,如果它低于90%,则应该调整相应的核心参数。 sar -p 5 3
SCO_SV scosvr 3.2v5.0.5 PentII(D)ISA 06/13/2002
13:45:26 vflt/s pflt/s pgfil/s rclm/s (-p)
13:45:31 36.25 50.20 0.00 0.00
13:45:36 32.14 58.48 0.00 0.00
13:45:41 79.80 58.40 0.00 0.00
Average 49.37 55.69 0.00 0.00
vflt/s 每秒进行页面故障地址转换的数量(由于有效的页面当前不在内存中)。
pflt/s 每秒来自由于保护错误出现的页面故障数量(由于对页面的非法存,取引起的页面故障)。
pgfil/s 每秒通过”页—入”满足vflt/s的数量。
rclm/s 每秒由系统恢复的有效页面的数量。有效页面被增加到自由页面队列上。
*如果vflt/s的值高于100,可能预示着对于页面系统来说,应用程序的效率不高,也可能分页参数需要调整,或者内存配置不太合适。 -q 报告进程队列(运行队列和交换队列的平均长度)情况
sar -q 2 3
SCO_SV scosvr 3.2v5.0.5 PentII(D)ISA 06/13/2002
14:25:50 runq-sz %runocc swpq-sz %swpocc (-q)
14:25:52 4.0 50
14:25:54 9.0 100
14:25:56 9.0 100
Average 7.3 100
runq-sz 准备运行的进程运行队列。
%runocc 运行队列被占用的时间(百分比)
swpq-sz 要被换出的进程交换队列。
%swpocc 交换队列被占用的时间(百分比)。
*如果%runocc大于90,并且runq-sz的值大于2,则表明CPU的负载较重。其直接后果,可能使系统的响应速度降低。如果%swpocc大于20,表明交换活动频繁,将严重导致系统效率下降。解决的办法是加大内存或减少缓存区数量,从而减少交换及页—入,页—出活动。 -r 报告内存及交换区使用情况(没有使用的内存页面和硬盘块)
sar -r 2 3
SCO_SV scosvr 3.2v5.0.5 PentII(D)ISA 06/14/2002
10:14:19 freemem freeswp availrmem availsmem (-r)
10:14:22 279729 6673824 93160 1106876
10:14:24 279663 6673824 93160 1106876
10:14:26 279661 6673824 93160 1106873
Average 279684 6673824 93160 1106875
freemem 用户进程可以使用的内存页面数,4KB为一个页面。
freeswp 用于进程交换可以使用的硬盘盘块,512B为一个盘块。 sar -u 2 3
SCO_SV scosvr 3.2v5.0.5 PentII(D)ISA 06/14/2002
10:27:23 %usr %sys %wio %idle (-u)
10:27:25 2 3 8 88
10:27:27 3 3 5 89
10:27:29 0 0 0 100
Average 2 2 4 92
%usr cpu处在用户模式下时间(百分比)
%sys cpu处在系统模式下时间(百分比)
%wio cpu等待输入,输出完成(时间百分比)
%idle cpu空闲时间(百分比)
*在显示的内容中,%usr和 %sys这两个值一般情况下对系统无特别影响,%wio的值不能太高,如果%wio的值过高,则CPU花在等待输入,输出上的时间太多,这意味着硬盘存在I/O瓶颈。如果%idle的值比较高,但系统响应并不快,那么这有可能是CPU花时间等待分配内存引起的。%idle的值可以较深入帮助人们了解系统的性能,在这种情况上,%idle的值处于40~100之间,一旦它持续低于30,则表明进程竞争的主要资源不是内存而是CPU。
*在有大量用户运行的系统中,为了减少CPU的压力,应该使用智能多串卡,而不是非智能多串卡。智能多串卡可以承担CPU的某些负担。
*此外,如果系统中有大型的作业运行,应该把它们合理调度,错开高峰,当系统相对空闲时再运行。 -v 报告系统表的内容(进程,i节点,文件和锁表状态)
sar -v 2 3
SCO_SV scosvr 3.2v5.0.5 PentII(D)ISA 06/14/2002
10:56:46 proc-sz ov inod-sz ov file-sz ov lock-sz (-v)
10:56:48 449/ 500 0 994/4147 0 1313/2048 0 5/ 128
10:56:50 450/ 500 0 994/4147 0 1314/2048 0 5/ 128
10:56:52 450/ 500 0 994/4147 0 1314/2048 0 5/ 128
proc-sz 目前在核心中正在使用或分配的进程表的表项数
inod-sz 目前在核心中正在使用或分配的i节点表的表项数
file-sz 目前在核心中正在使用或分配的文件表的表项数
ov 溢出出现的次数
lock-sz 目前在核心中正在使用或分配的记录加锁的表项数
*除ov外,均涉及到unix的核心参数,它们分别受核心参数NPROC,NIMODE,NFILE和FLOCKREC的控制。
*显示格式为:
实际使用表项/整个表可以使用的表项数
比如,proc-sz一列所显示的四个数字中,分母的100是系统中整个进程表的长度(可建立100个表项),分子上的24,26和25分别是采样的那一段时间所使用的进程表项。inod-sz,file-sz和lock-sz三列数字的意义也相同。
三列ov的值分别对应进程表,i节点表和文件表,表明目前这三个表都没有出现溢出现象,当出现溢出时,需要调整相应的核心参数,将对应表加大。 sar -w 2 3
SCO_SV scosvr 3.2v5.0.5 PentII(D)ISA 06/14/2002
11:22:05 swpin/s bswin/s swpot/s bswots pswch/s (-w)
11:22:07 0.00 0.0 0.00 0.0 330
11:22:09 0.00 0.0 0.00 0.0 892
11:22:11 0.00 0.0 0.00 0.0 1053
Average 0.00 0.0 0.00 0.0 757
swpin/s 每秒从硬盘交换区传送进入内存的次数。
bswin/s 每秒为换入而传送的块数。
swpot/s 每秒从内存传送到硬盘交换区的次数。
bswots 每秒为换出而传送的块数。
pswch/s 每秒进程交换的数量。
*swpin/s,bswin/s,swpot/s和bswots描述的是与硬盘交换区相关的交换活动。交换关系到系统的效率。交换区在硬盘上对硬盘的读,写 *** 作比内存读,写慢得多,因此,为了提高系统效率就应该设法减少交换。通常的作法就是加大内存,使交换区中进行的交换活动为零,或接近为零。如果swpot/s的值大于1,预示可能需要增加内存或减少缓冲区(减少缓冲区能够释放一部分自由内存空间)。 -y 报告终端的I/O活动(TTY设备活动)情况
sar -y 2 3
SCO_SV scosvr 3.2v5.0.5 PentII(D)ISA 06/14/2002
11:38:03 rawch/s canch/s outch/s rcvin/s xmtin/s mdmin/s (-y)
11:38:05 5 0 951 0 1 0
11:38:07 10 0 996 0 0 0
11:38:09 4 0 2264 0 0 0
Average 6 0 1404 0 1 0
rawch/s 每秒输入的字符数(原始队列)
canch/s 每秒由正则队列(canonical queue)处理的输入字符数。进行正则处理过程中,可以识别出一些有特殊意义的字符。比如,(中断字符),(退出符),(退格键)等。因此,canch/s中的计数不包括这些有特殊意义的字符。
outch/s 每秒输出的字符数。
rcvin/s 每秒接收的硬件中断次数。
xmtin/s 每秒发出的硬件中断次数。
mdmin/s 每秒modem中断次数。
*应该特别说明,sar命令可以对任意终端活动进行统计,所谓任意终端,是指任意tty设备。它们可以是串行终端,主控台,伪终端等等。
*在这几个量中,modem中断次数mdmin/s应该接近0。其它没有特殊要求,但如果每发送一个字符,中断的数量就动态地增加,这表明终端线出了差错,可能是接触不好。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)