Высокая загрузка ЦП при использовании Chrome / FF или проигрывании видео с YouTube в Ubuntu 18.04

Я создал сценарий Python, который упрощает весь процесс на основе ответов здесь.

Сохраните сценарий ниже как reset_usb.py или клонируйте это репо: https://github.com/mcarans/ resetusb /.

Использование:

python reset_usb.py help: Показать эту справку

sudo python reset_usb.py list: Список всех USB-устройств

sudo python reset_usb.py path / dev / bus / usb / XXX / YYY: Сброс устройства USB с использованием пути / dev / bus / usb / XXX / YYY

sudo python reset_usb.py search "search термины ": поиск устройства USB с использованием условий поиска в строке поиска, возвращаемых списком, и сбойное сопоставление устройства

sudo python reset_usb.py listpci: список всех USB-устройств PCI

sudo python reset_usb.py pathpci /sys/bus/pci/drivers/.../XXXX:XX:XX.X: Сброс устройства PCI USB с использованием пути /sys/bus/pci/drivers/.../XXXX:XX:XX. X

sudo python reset_usb.py searchpci «условия поиска»: поиск устройства PCI USB с использованием условий поиска в строке поиска, возвращаемых listpci, и сброс соответствия ng device

#!/usr/bin/env python import os import sys from subprocess import Popen, PIPE import fcntl instructions = ''' Usage: python reset_usb.py help : Show this help sudo python reset_usb.py list : List all USB devices sudo python reset_usb.py path /dev/bus/usb/XXX/YYY : Reset USB device using path /dev/bus/usb/XXX/YYY sudo python reset_usb.py search "search terms" : Search for USB device using the search terms within the search string returned by list and reset matching device sudo python reset_usb.py listpci : List all PCI USB devices sudo python reset_usb.py pathpci /sys/bus/pci/drivers/.../XXXX:XX:XX.X : Reset PCI USB device using path sudo python reset_usb.py searchpci "search terms" : Search for PCI USB device using the search terms within the search string returned by listpci and reset matching device ''' if len(sys.argv) < 2: print(instructions) sys.exit(0) option = sys.argv[1].lower() if 'help' in option: print(instructions) sys.exit(0) def create_pci_list(): pci_usb_list = list() try: lspci_out = Popen('lspci -Dvmm', shell=True, bufsize=64, stdin=PIPE, stdout=PIPE, close_fds=True).stdout.read().strip().decode('utf-8') pci_devices = lspci_out.split('%s%s' % (os.linesep, os.linesep)) for pci_device in pci_devices: device_dict = dict() categories = pci_device.split(os.linesep) for category in categories: key, value = category.split('\t') device_dict[key[:-1]] = value.strip() if 'USB' not in device_dict['Class']: continue for root, dirs, files in os.walk('/sys/bus/pci/drivers/'): slot = device_dict['Slot'] if slot in dirs: device_dict['path'] = os.path.join(root, slot) break pci_usb_list.append(device_dict) except Exception as ex: print('Failed to list pci devices! Error: %s' % ex) sys.exit(-1) return pci_usb_list def create_usb_list(): device_list = list() try: lsusb_out = Popen('lsusb -v', shell=True, bufsize=64, stdin=PIPE, stdout=PIPE, close_fds=True).stdout.read().strip().decode('utf-8') usb_devices = lsusb_out.split('%s%s' % (os.linesep, os.linesep)) for device_categories in usb_devices: if not device_categories: continue categories = device_categories.split(os.linesep) device_stuff = categories[0].strip().split() bus = device_stuff[1] device = device_stuff[3][:-1] device_dict = {'bus': bus, 'device': device} device_info = ' '.join(device_stuff[6:]) device_dict['description'] = device_info for category in categories: if not category: continue categoryinfo = category.strip().split() if categoryinfo[0] == 'iManufacturer': manufacturer_info = ' '.join(categoryinfo[2:]) device_dict['manufacturer'] = manufacturer_info if categoryinfo[0] == 'iProduct': device_info = ' '.join(categoryinfo[2:]) device_dict['device'] = device_info path = '/dev/bus/usb/%s/%s' % (bus, device) device_dict['path'] = path device_list.append(device_dict) except Exception as ex: print('Failed to list usb devices! Error: %s' % ex) sys.exit(-1) return device_list if 'listpci' in option: pci_usb_list = create_pci_list() for device in pci_usb_list: print('path=%s' % device['path']) print(' manufacturer=%s' % device['SVendor']) print(' device=%s' % device['SDevice']) print(' search string=%s %s' % (device['SVendor'], device['SDevice'])) sys.exit(0) if 'list' in option: usb_list = create_usb_list() for device in usb_list: print('path=%s' % device['path']) print(' description=%s' % device['description']) print(' manufacturer=%s' % device['manufacturer']) print(' device=%s' % device['device']) print(' search string=%s %s %s' % (device['description'], device['manufacturer'], device['device'])) sys.exit(0) if len(sys.argv) < 3: print(instructions) sys.exit(0) option2 = sys.argv[2] print('Resetting device: %s' % option2) # echo -n "0000:39:00.0" | tee /sys/bus/pci/drivers/xhci_hcd/unbind;echo -n "0000:39:00.0" | tee /sys/bus/pci/drivers/xhci_hcd/bind def reset_pci_usb_device(dev_path): folder, slot = os.path.split(dev_path) try: fp = open(os.path.join(folder, 'unbind'), 'wt') fp.write(slot) fp.close() fp = open(os.path.join(folder, 'bind'), 'wt') fp.write(slot) fp.close() print('Successfully reset %s' % dev_path) sys.exit(0) except Exception as ex: print('Failed to reset device! Error: %s' % ex) sys.exit(-1) if 'pathpci' in option: reset_pci_usb_device(option2) if 'searchpci' in option: pci_usb_list = create_pci_list() for device in pci_usb_list: text = '%s %s' % (device['SVendor'], device['SDevice']) if option2 in text: reset_pci_usb_device(device['path']) print('Failed to find device!') sys.exit(-1) def reset_usb_device(dev_path): USBDEVFS_RESET = 21780 try: f = open(dev_path, 'w', os.O_WRONLY) fcntl.ioctl(f, USBDEVFS_RESET, 0) print('Successfully reset %s' % dev_path) sys.exit(0) except Exception as ex: print('Failed to reset device! Error: %s' % ex) sys.exit(-1) if 'path' in option: reset_usb_device(option2) if 'search' in option: usb_list = create_usb_list() for device in usb_list: text = '%s %s %s' % (device['description'], device['manufacturer'], device['device']) if option2 in text: reset_usb_device(device['path']) print('Failed to find device!') sys.exit(-1)
1
задан 2 November 2019 в 13:27

1 ответ

Я также использую Ubuntu 18.04, и у меня есть тот же самый четырехъядерный процессор, только у меня есть IntelВ® HD Graphics 620 (озеро Kaby GT2), который является, вероятно, частью скорости Вашей видеокарты NVIDIA.

, Короче говоря "Я могу подтвердить, что Системный монитор является самым точным по сравнению с вершина , так как это может отобразить использование всего ЦП в режиме реального времени одновременно, тогда как вершина команда только отображает использование ЦП как процент единственного ЦП по умолчанию. Хотя, если Вы продолжаете читать, я пришел к выводу более вероятно, что htop является самым точным из трех"

Для разработки это, Если Вы выполняете свой сценарий снова, и при проигрывании видео YouTube Вы будете видеть вершина выставочный веб-контент высоко (Когда я выполнил Ваш сценарий, мой ЦП был в 97%), но если Вы нажмете SHIFT+i в окне терминала, куда Ваш вершина команда работает, для выключения режима Irix (который идет по умолчанию), Вы будете видеть веб-контент, который использование ЦП значительно отбросит.

вещь приблизительно вершина его вокруг начиная с UNIX появился и путь, прежде чем мульти-CPU появился, и это будет только когда-либо показывать процент процессорного времени, что процесс в настоящее время использует. Я никогда не использую htop, и я думал, что он был похож вершина с некоторыми хорошими улучшениями, судящими описанием в странице справочника, которая действительно не описывает то, что он преуспевает, он просто говорит в описании, "Это подобно вершине, но позволяет Вам прокручивать вертикально и горизонтально". но после использования его я вижу, что это также показывает каждое использование ЦП для систем мульти-CPU и когда я выполнил Ваш сценарий, я получал то же использование ЦП для каждого ЦП в [1 111] htop согласно Системный монитор и не видел несоответствий между ними. Исправление после выполнения нескольких дальнейших тестов, с точностью до которых это было бы больше, говорит, что htop и Системный монитор использование % ЦП время от времени является примерно тем же, но может варьироваться, и кажется, что нет никакого руководства для Системный монитор Gnome , хотя я нашел, что htop записан в c и пользуется библиотекой n-проклятий, таким образом, вероятно, что htop более точен, потому что оно работает в терминале, и поэтому оно не имеет дополнительных издержек загрузки и выполнения GUI, тогда как Системный монитор делает и использует GTK + (Хромой Инструментарий), так, чтобы факт был должен в теории давать htop край, так как мы говорим об отображении информации в реальном времени эти вещи вопрос, но я не знаю достаточно о том, как Системный монитор Gnome работы под капотом, я только знаю его из Базовых приложений Gnome, которые могли быть записаны в (Vala, C, C++, Схема, JavaScript, Python), но даже если оно было записано на самом эффективном языке, который вероятен (C/C++), оно все еще имеет GTK + наверху и очевидно путем сравнения htop по сравнению с [1 120] Системный монитор Gnome оба выполнения в [1 121] htop, ясно, что htop использует значительно меньше ресурсов особенно с точки зрения ЦП и Памяти, чем Системный монитор Gnome использует:

enter image description here

Также смотрят на страницы справочника для вершина команда конкретно следующая информация под разделом CPU:

  1. %CPU доля задачи прошедшего процессорного времени начиная с последнего экранного обновления, выраженного как процент общего процессорного времени.... Также для многопроцессорных сред, если режим Irix Выключен, вершина будет работать в режиме Solaris, где использование CPU задачи будет разделено на общее количество центральных процессоров. Вы переключаете режимы Irix/Solaris со 'мной' интерактивная команда.

наконец также помнят, что вершина , htop и Системный монитор Gnome каждый весь использует ресурсы, и таким образом выполнение всех трех одновременно собирается повлиять на производительность, таким образом, я рекомендовал бы только использовать один или другой.

Также относительно веб-браузеров Chrome загружает новый процесс для каждой новой вкладки, где как Firefox Quantum ограничивает количество процессов к четыре и таким образом, это означает, что FFQ должен в теории, по крайней мере, быть большей эффективной памятью.

1
ответ дан 11 November 2019 в 00:37