GPU tăng tốc Chromium


11

Tôi đang chạy bản cài đặt mới của Xubfox 12.04 và tôi muốn biết làm cách nào tôi có thể kích hoạt khả năng tăng tốc GPU của thẻ nVidia bên trong Chromium ổn định mới nhất. Tôi muốn phát một tệp MP4 mà không cần CPU bắn tới 100%.

Tôi đã cài đặt mplayer và vdpau (và chúng hoạt động tốt), nhưng cho đến nay tôi vẫn chưa thể sử dụng chúng trong Chromium. Cách đây vài năm, tôi đã sử dụng tắc kè-mediaplayer nhưng plugin đã bị liệt vào danh sách đen ...

Có ý kiến ​​gì không?

Đây là đầu ra của glxinfo | grep render:

direct rendering: Yes
OpenGL renderer string: GeForce GT 520M/PCIe/SSE2
    GL_NV_blend_square, GL_NV_compute_program5, GL_NV_conditional_render, 
    GL_NV_parameter_buffer_object2, GL_NV_path_rendering, 
    GL_NVX_conditional_render, GL_NVX_gpu_memory_info, 

và đây là đầu ra của lspci | grep -i vga:

02:00.0 VGA compatible controller: NVIDIA Corporation GF119 [GeForce GT 520M] (rev a1)

Chromium đang đưa ra rất nhiều cảnh báo mỗi khi tôi mở trang, như bạn có thể thấy ở đây và tôi vừa tìm ra một vị trí dẫn đầu đầy hứa hẹn, bị lạc trong một biển cảnh báo về hiệu suất:

NVIDIA: could not open the device file /dev/nvidia0 (Operation not permitted).

Sau khi thêm người dùng vào nhóm video, Chromium hiện không thể phát MP4 cả (yup, thậm chí không sử dụng CPU). Tôi đã nhận được các thông báo lỗi như trước đây, nhưng một thông báo mới cũng xuất hiện:

[4296: 4296: 0827/100001: ERROR: gpu_video_decode_accelerator.cc (208)] Không được triển khai đạt được trong nội dung void :: **.

Tại sao việc sử dụng CPU của bạn tăng lên 100%? Ngay cả khi không có HWA (không có GPU), tôi có thể phát video mp4 thông qua Google Chrome và mức sử dụng CPU là <20%.

4
Video 1080p trên máy tính 4 năm tuổi, 300 đô la.
João Pereira

Câu trả lời:


7

TL; DR: Trừ khi bạn đã thử mọi thứ bên dưới và bây giờ bạn nhận được một màn hình đen gặp lỗi cố định đặc biệt này , bây giờ vấn đề của bạn sẽ được giải quyết. Nếu bây giờ bạn nhận được:

ERROR:gpu_video_decode_accelerator.cc(208)] Not implemented reached in void content::GpuVideoDecodeAccelerator::Initialize(media::VideoCodecProfile, IPC::Message\*) HW video decode acceleration not available.

sau khi thử mọi thứ bên dưới, sau đó bạn nên thử bắt đầu Chrome / ium bằng --disable-gpu-sandboxhoặc --blacklist-accelerated-compositing. Nếu vấn đề vẫn tồn tại, hoàn nguyên tất cả các thay đổi và thông báo lỗi chi tiết vấn đề của bạn là gì, những gì bạn đã cố gắng, và tất cả các dữ liệu có thể: about:gpu, about:version, các trình điều khiển bạn đang sử dụng, phiên bản kernel, vv Đối với những người mà vẫn muốn thử nghiệm của họ may mắn, sử dụng công tắc được đề cập trước đó, có vấn đề với thẻ AMD, phần "Buộc Chrome / ium sử dụng HWA" hoạt động cho bạn. Những người sử dụng trình điều khiển riêng của Nvidia hoặc xorg-ppa-edge, nên kiểm tra với Firefox và xem vấn đề có xảy ra ở đó không.

Vấn đề về quyền của Nvidia

NVIDIA: không thể mở tệp thiết bị / dev / nvidia0 (Không được phép thao tác).

Điều này có nghĩa là bạn không thuộc videonhóm. Điều này được giải quyết dễ dàng như bạn có thể:

sudo adduser Hal video

Sau đó khởi động lại phiên của bạn và bạn đang ở đó.

Nguồn: http://forums.gentoo.org/viewtopic-p-7232328.html?sid=900a2d59cdb52e1a5f530598dfa1be24#7232328

Buộc Chrome / ium sử dụng HWA

Bạn nên kiểm tra about:gpuphần của mình trong Chrome / ium. Theo mặc định, Gia tốc CT của PC bị tắt và bạn chỉ có thể bật nó bằng cách ghi đè cài đặt trong about:flags.

  • Mở about:flagstrong thanh địa chỉ của bạn
  • Tìm kiếm danh sách ghi đè phần mềm ghi đè
  • Nhấp vào "Kích hoạt"
  • Khởi động lại Chrome / ium

Bạn cũng có thể bắt đầu sử dụng chrome chrome --ignore-gpu-blacklistnhưng phải làm như vậy mỗi lần không lý tưởng.

Đây là trang GPU của tôi

Đây là cờ của tôi


1
Chà, tôi đã kích hoạt "danh sách kết xuất phần mềm ghi đè" bằng chrome: // gpu, mở lại crom và mở một trang cục bộ chứa thẻ video nhúng HTML5 (nguồn là MP4) nhưng CPU vẫn hoạt động tốt hơn 100%. Sau đó, tôi đã cài đặt tắc kè-mediaplayer, khởi động lại và mở lại crom với tham số danh sách đen bỏ qua nhưng cũng không có may mắn như vậy. Còn ý tưởng nào khác không? Trạng thái tính năng đồ họa của tôi là giống hệt với bạn.
João Pereira

Tôi không chắc liệu giải mã video có thực sự hoạt động hay không. Tôi đang chạy Chrome 29 trên Ubuntu 12.04 và tôi thấy "Giải mã video tăng tốc không khả dụng trên Mac và Linux.: 137247, 133828", vì vậy tôi rất ngạc nhiên khi thấy bạn chuyển nó thành "Phần cứng được tăng tốc".
gertvdijk

Bây giờ, nếu chúng ta có thể khiến Chromium đặt tiền của mình vào nơi mà miệng anh ta ...
João Pereira

1
@Braiam Xin lỗi nếu tôi không thực sự rõ ràng - nó cũng hiển thị cho tôi, nhưng có vẻ như nó không hoạt động như trong đầu ra "vấn đề được phát hiện" (khi bị vô hiệu hóa tùy chọn buộc). Xem thêm báo cáo lỗi ( code.google.com/p/chromium/issues/detail?id=137247 )
gertvdijk

1
@gertvdijk Vâng, tôi đã xem báo cáo đó trước đây. Trên thực tế là một chính sách khá ngu ngốc: Chúng tôi không thích báo cáo lỗi, vì vậy chúng tôi (thực sự) từ từ kích hoạt các thẻ mà chúng tôi tin rằng không có vấn đề (là thiểu số) và khiến người dùng có thẻ hoạt động tốt chạy với chỉ 0,1% hiệu suất thực sự của họ.
Braiam

0

Giải pháp cho Giải mã video trên linux / chromium:

Chức năng GpuVideoDecodeAccelerator đã bị vô hiệu hóa trong mã linux của crom trong vài tháng (ngoại trừ ChromiumOS rõ ràng), do đó bạn sẽ phải vá crom như thế này:

https://bazaar.launchpad.net/~saiarcot895/chromium-browser/chromium-browser.utopic.beta/view/head:/debian/patches/enable_vaapi_on_linux.diff

hoặc sử dụng PPA tuyệt vời này:

https://launchpad.net/~saiarcot895/+archive/ubfox/chromium-beta

Đã thử nghiệm với libva trên Intel SandyBridge cho H264, hoạt động rất tốt. Không biết về VP8.

Theo yêu cầu ở đây là Bản vá đầy đủ:

Index: beta.vivid/content/common/gpu/media/gpu_video_decode_accelerator.cc
===================================================================
--- beta.vivid.orig/content/common/gpu/media/gpu_video_decode_accelerator.cc    2014-12-04 09:32:45.344607112 -0500
+++ beta.vivid/content/common/gpu/media/gpu_video_decode_accelerator.cc 2014-12-04 09:32:45.341607169 -0500
@@ -31,7 +31,7 @@
 #elif defined(OS_CHROMEOS) && defined(ARCH_CPU_ARMEL) && defined(USE_X11)
 #include "content/common/gpu/media/v4l2_video_decode_accelerator.h"
 #include "content/common/gpu/media/v4l2_video_device.h"
-#elif defined(OS_CHROMEOS) && defined(ARCH_CPU_X86_FAMILY) && defined(USE_X11)
+#elif (defined(OS_CHROMEOS) || defined(OS_LINUX)) && defined(ARCH_CPU_X86_FAMILY) && defined(USE_X11)
 #include "content/common/gpu/media/vaapi_video_decode_accelerator.h"
 #include "ui/gl/gl_context_glx.h"
 #include "ui/gl/gl_implementation.h"
@@ -272,7 +272,7 @@
       make_context_current_,
       device.Pass(),
       io_message_loop_));
-#elif defined(OS_CHROMEOS) && defined(ARCH_CPU_X86_FAMILY) && defined(USE_X11)
+#elif (defined(OS_CHROMEOS) || defined(OS_LINUX)) && defined(ARCH_CPU_X86_FAMILY) && defined(USE_X11)
   if (gfx::GetGLImplementation() != gfx::kGLImplementationDesktopGL) {
     VLOG(1) << "HW video decode acceleration not available without "
                "DesktopGL (GLX).";
Index: beta.vivid/content/content_common.gypi
===================================================================
--- beta.vivid.orig/content/content_common.gypi 2014-12-04 09:32:45.344607112 -0500
+++ beta.vivid/content/content_common.gypi  2014-12-04 09:32:45.341607169 -0500
@@ -769,7 +769,7 @@
         '<(DEPTH)/third_party/khronos',
       ],
     }],
-    ['target_arch != "arm" and chromeos == 1 and use_x11 == 1', {
+    ['target_arch != "arm" and (chromeos == 1 or desktop_linux == 1) and use_x11 == 1', {
       'dependencies': [
         '../media/media.gyp:media',
         '../third_party/libyuv/libyuv.gyp:libyuv',
Index: beta.vivid/content/content_gpu.gypi
===================================================================
--- beta.vivid.orig/content/content_gpu.gypi    2014-12-04 09:32:45.344607112 -0500
+++ beta.vivid/content/content_gpu.gypi 2014-12-04 09:32:45.341607169 -0500
@@ -40,7 +40,7 @@
         ],
       },
     }],
-    ['target_arch!="arm" and chromeos == 1', {
+    ['target_arch!="arm" and (chromeos == 1 or desktop_linux == 1)', {
       'include_dirs': [
         '<(DEPTH)/third_party/libva',
       ],
Index: beta.vivid/content/content_tests.gypi
===================================================================
--- beta.vivid.orig/content/content_tests.gypi  2014-12-04 09:32:45.344607112 -0500
+++ beta.vivid/content/content_tests.gypi   2014-12-04 09:32:45.342607150 -0500
@@ -1556,7 +1556,7 @@
           },
         ]
     }],
-    ['chromeos==1 and use_x11 == 1 and target_arch != "arm"', {
+    ['(chromeos==1 or desktop_linux==1) and use_x11 == 1 and target_arch != "arm"', {
       'targets': [
           {
             'target_name': 'vaapi_h264_decoder_unittest',
Index: beta.vivid/content/public/common/content_switches.cc
===================================================================
--- beta.vivid.orig/content/public/common/content_switches.cc   2014-12-04 09:32:45.344607112 -0500
+++ beta.vivid/content/public/common/content_switches.cc    2014-12-04 09:32:45.342607150 -0500
@@ -930,7 +930,7 @@
 // Disable web audio API.
 const char kDisableWebAudio[]               = "disable-webaudio";

-#if defined(OS_CHROMEOS)
+#if defined(OS_CHROMEOS) || defined(OS_LINUX)
 // Disables panel fitting (used for mirror mode).
 const char kDisablePanelFitting[]           = "disable-panel-fitting";

Index: beta.vivid/content/public/common/content_switches.h
===================================================================
--- beta.vivid.orig/content/public/common/content_switches.h    2014-12-04 09:32:45.344607112 -0500
+++ beta.vivid/content/public/common/content_switches.h 2014-12-04 09:32:45.342607150 -0500
@@ -268,7 +268,7 @@

 CONTENT_EXPORT extern const char kDisableWebAudio[];

-#if defined(OS_CHROMEOS)
+#if defined(OS_CHROMEOS) || defined(OS_LINUX)
 CONTENT_EXPORT extern const char kDisablePanelFitting[];
 CONTENT_EXPORT extern const char kDisableVaapiAcceleratedVideoEncode[];
 #endif
Index: beta.vivid/media/media.gyp
===================================================================
--- beta.vivid.orig/media/media.gyp 2014-12-04 09:32:45.344607112 -0500
+++ beta.vivid/media/media.gyp  2014-12-04 09:32:45.342607150 -0500
@@ -672,7 +672,7 @@
           ],
         }],
         # For VaapiVideoEncodeAccelerator.
-        ['target_arch != "arm" and chromeos == 1 and use_x11 == 1', {
+        ['target_arch != "arm" and (chromeos == 1 or desktop_linux == 1) and use_x11 == 1', {
           'sources': [
             'filters/h264_bitstream_buffer.cc',
             'filters/h264_bitstream_buffer.h',
Index: beta.vivid/gpu/config/software_rendering_list_json.cc
===================================================================
--- beta.vivid.orig/gpu/config/software_rendering_list_json.cc  2014-12-04 09:32:45.344607112 -0500
+++ beta.vivid/gpu/config/software_rendering_list_json.cc   2014-12-04 09:32:45.343607131 -0500
@@ -508,8 +508,8 @@
     },
     {
       "id": 48,
-      "description": "Accelerated video decode is unavailable on Mac and Linux",
-      "cr_bugs": [137247, 133828],
+      "description": "Accelerated video decode is unavailable on Mac",
+      "cr_bugs": [133828],
       "exceptions": [
         {
           "os": {
@@ -525,6 +525,11 @@
           "os": {
             "type": "android"
           }
+        },
+        {
+          "os": {
+            "type": "linux"
+          }
         }
       ],
       "features": [
Index: beta.vivid/content/common/sandbox_linux/bpf_gpu_policy_linux.cc
===================================================================
--- beta.vivid.orig/content/common/sandbox_linux/bpf_gpu_policy_linux.cc    2014-12-04 09:32:45.344607112 -0500
+++ beta.vivid/content/common/sandbox_linux/bpf_gpu_policy_linux.cc 2014-12-04 09:32:45.343607131 -0500
@@ -21,6 +21,8 @@
 #include "base/logging.h"
 #include "base/memory/scoped_ptr.h"
 #include "build/build_config.h"
+// Auto-generated for dlopen libva libraries
+#include "content/common/gpu/media/va_stubs.h"
 #include "content/common/sandbox_linux/sandbox_bpf_base_policy_linux.h"
 #include "content/common/sandbox_linux/sandbox_seccomp_bpf_linux.h"
 #include "content/common/set_process_title.h"
@@ -30,6 +32,8 @@
 #include "sandbox/linux/seccomp-bpf-helpers/syscall_sets.h"
 #include "sandbox/linux/services/linux_syscalls.h"
 #include "sandbox/linux/syscall_broker/broker_process.h"
+#include "third_party/libva/va/va.h"
+#include "third_party/libva/va/va_x11.h"

 using sandbox::BrokerProcess;
 using sandbox::SyscallSets;
@@ -38,6 +42,14 @@
 using sandbox::bpf_dsl::ResultExpr;
 using sandbox::bpf_dsl::Trap;

+using content_common_gpu_media::kModuleVa;
+using content_common_gpu_media::InitializeStubs;
+using content_common_gpu_media::StubPathMap;
+
+// libva-x11 depends on libva, so dlopen libva-x11 is enough
+static const base::FilePath::CharType kVaLib[] =
+    FILE_PATH_LITERAL("libva-x11.so.1");
+
 namespace content {

 namespace {
@@ -238,19 +250,38 @@
     // Accelerated video dlopen()'s some shared objects
     // inside the sandbox, so preload them now.
     if (IsAcceleratedVideoEnabled()) {
-      const char* I965DrvVideoPath = NULL;
+      StubPathMap paths;
+      paths[kModuleVa].push_back(kVaLib);
+      if (!InitializeStubs(paths)) {
+        return false;
+      }

-      if (IsArchitectureX86_64()) {
-        I965DrvVideoPath = "/usr/lib64/va/drivers/i965_drv_video.so";
-      } else if (IsArchitectureI386()) {
-        I965DrvVideoPath = "/usr/lib/va/drivers/i965_drv_video.so";
+      // libva drivers won't get loaded even above two libraries get dlopened.
+      // Thus, libva calls will fail after post sandbox stage.
+      //
+      // To get the va driver loadded before sandboxing, upstream simply dlopen
+      // the hard-coded va driver path because ChromeOS is the only platform
+      // that Google want to support libva.
+      //
+      // While generic linux distros ship va driver as anywhere they want.
+      // Fortunately, the va driver will be loadded when vaInitialize() get
+      // called.
+      // So the following code is to call vaInitialize() before sandboxing.
+      Display* x_display = XOpenDisplay(NULL);
+      VADisplay va_display = vaGetDisplay(x_display);
+      if (!vaDisplayIsValid(va_display)) {
+        DVLOG(1) << "Failed to call vaGetDisplay()";
+        return false;
       }

-      dlopen(I965DrvVideoPath, RTLD_NOW|RTLD_GLOBAL|RTLD_NODELETE);
-      dlopen("libva.so.1", RTLD_NOW|RTLD_GLOBAL|RTLD_NODELETE);
-      dlopen("libva-x11.so.1", RTLD_NOW|RTLD_GLOBAL|RTLD_NODELETE);
-    }
-  }
+      int major_version, minor_version;
+      if (vaInitialize(va_display, &major_version, &minor_version)
+          != VA_STATUS_SUCCESS) {
+        DVLOG(1) << "Failed to call vaInitialize()";
+        return false;
+      }
+    }  // end of IsAcceleratedVideoDecodeEnabled()
+  }  // end of IsArchitectureX86_64() || IsArchitectureI386()

   return true;
 }

1
Trong khi điều này về mặt lý thuyết có thể trả lời câu hỏi, tốt hơn là nên bao gồm các phần thiết yếu của câu trả lời ở đây, và cung cấp liên kết để tham khảo.
MadMike

Ý tôi là bao gồm các bước về cách lấy nguồn, áp dụng bản vá và biên dịch nó. Hoặc về cách apt-add PPA và cài đặt trình duyệt.
MadMike 3/03/2015
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.