百度空间 | 百度首页 
 
查看文章
 
彻底优化nvidia显卡配置,启动系统休眠支持
2009-04-03 01:54
本文适用于nvidia的老显卡,不知道对拥有新的显卡的同学是否也有帮助?系统环境为Hiweed2.0rc3,为基于ubuntu8.10的精简版。在对linux系统进行自定义配置时经常会出现一些可能没想到的问题,往往会花很多时间,还是请大家三思而行。
前言:
自己的显卡为NVIDIA GForceMX 4000,性能比较差。在Hiweed2.0rc3下用mplayer播放电影时图像都会有些变形。
以前为了使系统可以在休眠后正确启动,曾在xorg.conf中加入了一条
Option "NvAGP" "1"
然后休眠就正常了。这两天查了下官方文档,发现如果只是这样设置,就会把显卡的AGP功能给彻底关掉了!
于是狠下心仔细读了一下nvidia的官方文档,并重新编译了一下mplayer和compiz,并发现了一些以前不知道的显卡优化方式。
主要包括:
a)启用nvidia显卡AGP的Fast Writes功能;
b)启用nvidia显卡的官方AGP驱动;
c)正确设置CPU的mtrr寄存器;
d)xorg.conf的进一步优化设置,compiz的设置,和mplayer的优化设置。

具体步骤:
1.去nvidia官网下载安装最新版的官方驱动。源里面的驱动有些BUG,在hiweed2.0rc3或ubuntu8.10中开启compiz后一些程序不能正常显示。如compiz开启后wine、pcman、emacs无法正常显示等。2009年03月9日新发布的驱动96.43.11解决了这些问题。在下面网址下载驱动:
http://www.nvidia.cn/object/unix_cn.html
驱动安装过程注意:
   1.1. 先备份一下老的/etc/X11/xorg.conf
   1.2. 如果系统自动安装过nvidia驱动,则要禁用卸载老的nvidia驱动
        如执行:
        $ sudo apt-get remove nvidia-glx-96
   1.3. 去文本终端执行
        $ sudo /etc/init.d/gdm stop
   1.4. 将备份的xorg.conf还原
   1.5. 运行安装新驱动
        $ sudo sh NVIDIA-Linux-x86-96.43.11-pkg1.run

特别注意以后每次升级xorg后都须再重新安装驱动一次!

2.重启到X11,查看当前是否启用了显卡的高级功能:
   $ xdpyinfo | grep -i composite
   $ glxinfo | grep -i direct
   $ cat /proc/driver/nvidia/agp/status
   $ cat /proc/mtrr
3.查看主板设置和先看是否支持AGP的Fast Writes功能,如果只是host-bridge不支持,则可以重启计算机查看修改BIOS里的Fast Writes设置。
   $ cat /proc/driver/nvidia/agp/host-bridge
   Host Bridge:   PCI device 1106:0204
   Fast Writes:   Supported
   SBA:    Supported
   AGP Rates:   8x 4x
   Registers:   0x1f000a1b:0x00000b12

   $ cat /proc/driver/nvidia/agp/card
   Fast Writes:   Supported
   SBA:    Supported
   AGP Rates:   8x 4x
   Registers:   0x1f000e1b:0x1f000312

4.修改内核module配置文件,启用显卡的Fast Writes功能。修改后如下:
   $ cat /etc/modprobe.d/options
   ..........
   # Enable AGP Fast Writes
   options nvidia NVreg_EnableAGPSBA=1 NVreg_EnableAGPFW=1

5.启用nvidia显卡自带的agp模块,需要禁用内核自带的agpgart模块。禁用agpgart后系统休眠功能即可正常。Supported AGP Chipsets 参见
http://cn.download.nvidia.com/XFree86/Linux-x86/96.43.11/README/appendix-f.html
修改后的配置文件如下:
   $ cat /etc/modprobe.d/blacklist-local
   blacklist nvidia
   #禁用AGPGART
   blacklist amd64_agp
   blacklist agpgart
   blacklist ipv6

   $ cat /etc/X11/xorg.conf
   ..........
   Section "Device"
     Identifier     "Configured Video Device"
     Driver         "nvidia"
     Option         "NvAGP" "1"
   EndSection
   ..........
6.重启计算机,查看Fast Writes和AGP驱动是否已经功成:
   $ cat /proc/driver/nvidia/agp/status Status:   Enabled
   Driver:   NVIDIA
   AGP Rate:   8x
   Fast Writes:   Enabled
   SBA:    Enabled

7.参考mplayer文档,设置CPU的mtrr寄存器,详见 http://www.mplayerhq.hu/DOCS/HTML/zh_CN/mtrr.html
   $ cat /proc/mtrr
    reg00: base=0x00000000 (   0MB), size= 512MB: write-back, count=1
    reg01: base=0xc0000000 (3072MB), size= 64MB: write-combining, count=1
如果有上述输出结果第二行,则说明MTRR registers已经正确设置。不然,首先用下述方法的任一种找到显卡的显存地址:
   7.1. from X11 startup messages, for example:
      (--) PCI:*(0@1:0:0) nVidia Corporation NV18 [GeForce4 MX 4000] rev 193, Mem @ 0xfd000000/0, 0xc0000000/0, BIOS @ 0x????????/131072
   7.2. from /proc/pci (use lspci -v command):
       01:00.0 VGA compatible controller: nVidia Corporation NV18 [GeForce4 MX 4000] (rev c1)
      Flags: bus master, 66MHz, medium devsel, latency 248, IRQ 16
      Memory at fd000000 (32-bit, non-prefetchable) [size=16M]
      Memory at c0000000 (32-bit, prefetchable) [size=128M]
      [virtual] Expansion ROM at feae0000 [disabled] [size=128K]
      Capabilities: <access denied>
      Kernel driver in use: nvidia
      Kernel modules: nvidia, nvidiafb

上述输出指示显存开始地址为0xc0000000. 如果显卡显存为64M,则这样设置mtrr:
   # echo "base=0xc0000000 size=0x4000000 type=write-combining" > /proc/mtrr
注意重启之后就会失效,你需要设置一下自动启动脚本:
   $ cat /etc/init.d/setmtrr.sh
   #!/bin/sh
   #/etc/init.d/setmtrr.sh mtrr的显存设置
   case "$1" in
     start)
       echo "base=0xc0000000 size=0x4000000 type=write-combining" > /proc/mtrr
     ;;
     stop)
     ;;
   esac
   exit 0

   $ ll /etc/rc2.d/S26setmtrr
   lrwxrwxrwx 1 root root 22 2009-03-31 23:31 /etc/rc2.d/S26setmtrr -> /etc/init.d/setmtrr.sh

8.最后设置一下xorg.conf,参考下面引自compiz.org网站上的资料:
     Option "RenderAccel" "True"
     Option "AddARGBGLXVisuals" "True"
     Option "DamageEvents" "True"
     Option "UseEvents" "False"
     #Option "TripleBuffer" "True"
     Option "BackingStore" "True"
各选项具体含义请参见
http://wiki.compiz-fusion.org/Hardware/NVIDIA

9. 至此我的老显卡所能提供的功能应该就全部启用了。这样glxgear的结果有一定提升。

10.依据compiz.org中的文章编译安装最新的compiz,安装后用下面命令启用compiz。这样折腾之后速度爽多了。
   $ compiz --replace ccp & emerald --replace &
出现其他问题请参考:http://wiki.compiz-fusion.org/Troubleshooting

11.在启用compiz的3D桌面效果时想要使用休眠功能,注意须更改ccsm的另外一个默认设置,即要取消[常规选项]-[Display settings]的[Sync to VBLANK]。 (note that this leads to ugly tearing when watching videos). Unless this setting is set to false, the graphical interface (X11) tends to wake up with just a blank screen (possibly with a working mouse cursor).

12.自己编译安装mplayer最新svn版,然后在ccsm的[常规选项]中选中[取消重定向全屏窗口](对应的英文为unredirect_fullscreen_windows),默认没有选中。
完成后会发现在compiz开启的情况下,mplayer用xv全屏播放电影时的CPU使用率也只在18%!播放影片流畅了!

类别:linux技术资料 | 添加到搜藏 | 浏览() | 评论 (0)
 
最近读者:
 
网友评论:
发表评论:
姓 名:
网址或邮箱: (选填)
内 容:
验证码: 请点击后输入四位验证码,字母不区分大小写
      

     

©2009 Baidu