您尚未登录。

#1 2014-01-18 20:31:54

cuihao
所在地: USTC, Hefei
注册时间: 2011-08-19
帖子: 1,222
个人网站

关于 bbswitch 与 bumblebee 的功能

想具体问一下这俩东西以及nvidia模块的具体功能。

目前据我的理解:
1、加载了 nvidia 模块,程序才能使用 N 卡。
2、bbswitch 控制独立显卡的开关。就算没有加载 nvidia,如果不用 bbswitch 关闭独显,独显还是开着的。另一方面,只有用 bbswitch 打开显卡,才能加载 nvidia 模块使用独显:

$ echo "ON" > /proc/acpi/bbswitch
$ modprobe  nvidia
$ echo "OFF" > /proc/acpi/bbswitch
$ dmesg | tail -n 1
[24316.529317] pci 0000:01:00.0: Refused to change power state, currently in D0
    # nvidia 加载时,不能关闭显卡
$ modprobe -r nvidia
$ echo "OFF" > /proc/acpi/bbswitch
$ dmesg | tail -n 1
[24519.589981] bbswitch: disabling discrete graphics
$ modprobe nvidia
modprobe: ERROR: could not insert 'nvidia': No such device
    # bbswitch 关闭显卡时,不能加载 nvidia

3、至于 bumblebee,是用户端的工具,包含守护进程和optirun工具,就是包装一下模块的加载(以及使用 virtualgl 复制图形什么的先忽略……),让用户用起来舒服点。用户调用 optirun 时,bumblebee 就会用 bbswitch 打开显卡并启用 nvidia 模块;调用完 bumblebee 再卸掉 nvidia 模块并用 bbswitch 关闭显卡。

至于和 Windows 的比较,似乎 Linux 下的自动化还是有些问题…… 比方说,Windows 下执行使用 OpenCL/CUDA 计算的程序(比如 BOINC 的 GPU 项目)时,就算不特别设置使用独显,也能启用独显计算。但 Linux 下就必须自己调 optirun 或是加载好模块,然后程序才能用显卡……

上面的理解有什么问题么?主要是我想鼓捣一下 BOINC 的独显计算的问题,毕竟一直开着独显也不是个事儿。


Site: CVHC.CC   Twitter: @cuihaoleo   Org: LUG@USTC
AD:  ~欢迎参与志愿计算~

离线

#2 2014-01-19 12:15:13

枫叶饭团
免费会员
所在地: C.C.
注册时间: 2011-08-27
帖子: 190
个人网站

Re: 关于 bbswitch 与 bumblebee 的功能

bbb的wiki我记得说过吧,它其实就是一个工具集而已,和windows的原生驱动完全不能比啊,一个用户空间,一个内核空间。

最近编辑记录 枫叶饭团 (2014-01-19 12:15:26)

离线

#3 2014-01-19 15:05:44

cuihao
所在地: USTC, Hefei
注册时间: 2011-08-19
帖子: 1,222
个人网站

Re: 关于 bbswitch 与 bumblebee 的功能

今天修改了某个 CUDA 程序,以一种极其丑陋的方式,让它成功开启显卡并进行计算了……

void when_exit (void)
{
    system("call_optirun OFF");
}

int main(int argc, char *argv[])
{
    system("call_optirun ON");
    atexit(when_exit);
    ......

然后call_optirun是个PATH下的脚本,功能是用optirun启动一个啥都不干的进程,或者关闭这个进程…… 就相当于打开显卡。
用户空间的工具,程序调用起来简直惨不忍睹……


Site: CVHC.CC   Twitter: @cuihaoleo   Org: LUG@USTC
AD:  ~欢迎参与志愿计算~

离线

#4 2014-01-19 15:14:51

依云
会员
所在地: a.k.a. 百合仙子
注册时间: 2011-08-21
帖子: 8,489
个人网站

Re: 关于 bbswitch 与 bumblebee 的功能

可以用 constructor 等做一个 .so,用 LD_PRELOAD 加载的喵~

离线

#5 2014-01-19 16:32:20

cuihao
所在地: USTC, Hefei
注册时间: 2011-08-19
帖子: 1,222
个人网站

Re: 关于 bbswitch 与 bumblebee 的功能

哦,这个 LD_PRELOAD 好像很有意思诶。
找找 cuda 的接口去……


Site: CVHC.CC   Twitter: @cuihaoleo   Org: LUG@USTC
AD:  ~欢迎参与志愿计算~

离线

#6 2014-01-19 16:55:23

依云
会员
所在地: a.k.a. 百合仙子
注册时间: 2011-08-21
帖子: 8,489
个人网站

Re: 关于 bbswitch 与 bumblebee 的功能

cuihao 说:

哦,这个 LD_PRELOAD 好像很有意思诶。
找找 cuda 的接口去……

启动和结束时跑条命令而已,不用找 cuda 的接口啦。
另外,推荐用 fork + execlp 代替 system

离线

#7 2014-01-19 17:05:55

cuihao
所在地: USTC, Hefei
注册时间: 2011-08-19
帖子: 1,222
个人网站

Re: 关于 bbswitch 与 bumblebee 的功能

bumblebee 还有个我觉得比较坑的地方。
若因为种种原因,optirun 之后没办法卸载模块关闭显卡,那显卡就那样开着了……
好歹也有个守护进程,就不能自己检查一下,没有占用就自己给关了。


Site: CVHC.CC   Twitter: @cuihaoleo   Org: LUG@USTC
AD:  ~欢迎参与志愿计算~

离线

#8 2014-01-19 17:09:23

cuihao
所在地: USTC, Hefei
注册时间: 2011-08-19
帖子: 1,222
个人网站

Re: 关于 bbswitch 与 bumblebee 的功能

百合仙子 说:
cuihao 说:

哦,这个 LD_PRELOAD 好像很有意思诶。
找找 cuda 的接口去……

启动和结束时跑条命令而已,不用找 cuda 的接口啦。
另外,推荐用 fork + execlp 代替 system

嗯,查一查~
现在用system只是应付一下…… 自己对UNIX编程不太了解,反正就system最好用。
毕竟system调optirun也挺丑的。想想还是自己modprobe、echo开关显卡吧。


Site: CVHC.CC   Twitter: @cuihaoleo   Org: LUG@USTC
AD:  ~欢迎参与志愿计算~

离线

页脚