[Решено]Список процессов и информация о видеокарте.

Модератор: Модераторы разделов

Аватара пользователя
wolkolak
Сообщения: 49
ОС: ArchLinux 64

[Решено]Список процессов и информация о видеокарте.

Сообщение wolkolak »

Необходимо получить список процессов, вроде как используют структуру task_struct(или task_t), но описания ее нет (ядро 3.2) видимо, что-то другое придумали. Через /proc не радует все это делать.
И еще, необходимо получить информацию о видеокарте(производитель, объем и т.д) через файл устройства. Как понял, открываю файл - получаю дескриптор, а что дальше делать не знаю, Что -то через ioctl()? Вообщем тьма. (карточка Intel 945).
Спасибо сказали:
Аватара пользователя
Gloomy
Сообщения: 340
Статус: сочувствующий

Re: [Решено]Список процессов и информация о видеокарте.

Сообщение Gloomy »

wolkolak писал(а):
04.03.2012 11:15
вроде как используют структуру task_struct(или task_t), но описания ее нет (ядро 3.2) видимо, что-то другое придумали

Да куда б она делась-то, вот же объявление ;)

wolkolak писал(а):
04.03.2012 11:15
Как понял, открываю файл - получаю дескриптор, а что дальше делать не знаю

Не всякий драйвер не всякой карты создаёт файлы устройств в /dev. Тут скорее надо шарить по /sys и надеяться, что ядро имеет желание и возможность поделиться с user-space'ом информацией об устройстве.
Спасибо сказали:
Аватара пользователя
wolkolak
Сообщения: 49
ОС: ArchLinux 64

Re: [Решено]Список процессов и информация о видеокарте.

Сообщение wolkolak »

Gloomy писал(а):
04.03.2012 13:17
Да куда б она делась-то, вот же объявление ;)

По какой причине в моем файле sched.h отсутствует описание структуры?

Gloomy писал(а):
04.03.2012 13:17
Не всякий драйвер не всякой карты создаёт файлы устройств в /dev. Тут скорее надо шарить по /sys и надеяться, что ядро имеет желание и возможность поделиться с user-space'ом информацией об устройстве.

/dev/video0 наверное моя видеокарта. Про /sys можно по подробнее?
Спасибо сказали:
Аватара пользователя
sash-kan
Администратор
Сообщения: 13939
Статус: oel ngati kameie
ОС: GNU

Re: [Решено]Список процессов и информация о видеокарте.

Сообщение sash-kan »

wolkolak писал(а):
04.03.2012 14:00
По какой причине в моем файле sched.h отсутствует описание структуры?
после скачивания исходников с kernel.org таблетку запускали?
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
Спасибо сказали:
Аватара пользователя
Gloomy
Сообщения: 340
Статус: сочувствующий

Re: [Решено]Список процессов и информация о видеокарте.

Сообщение Gloomy »

wolkolak писал(а):
04.03.2012 14:00
По какой причине в моем файле sched.h отсутствует описание структуры?

Потому что заголовки ядра не полные?

wolkolak писал(а):
04.03.2012 14:00
/dev/video0 наверное моя видеокарта

Да, скорее всего. Однако, к примеру, моя видеокарта себя обозначает как сразу два девайса: /dev/nvidia0 и /dev/nvidiactl. А вот встроенное видео в нетбуке ничем в /dev себя не выдаёт. Вообще, именование устройств в /dev возлагается на udev (или его аналог) - пользователь волен настраивать всё как вздумается: хочешь - прячь USB-модем, маскируя его под раздел винта; хочешь - назови видеокарту /dev/moja_vidjahua_ge_force_plus_100500_gts_ultra_power.

wolkolak писал(а):
04.03.2012 14:00
Про /sys можно по подробнее?

Конечно: ич, ни, сан. В двух словах: sysfs это представление внутренних объектов ядра в виде виртуальной файловой системы. От /proc отличается тем, что /proc управляет процессами, а /sys - устройствами (ещё раз восхвалим авторов UNIX за столь изящное гениальное решение).
Спасибо сказали:
Аватара пользователя
sash-kan
Администратор
Сообщения: 13939
Статус: oel ngati kameie
ОС: GNU

Re: [Решено]Список процессов и информация о видеокарте.

Сообщение sash-kan »

Gloomy писал(а):
04.03.2012 17:15
ещё раз восхвалим авторов UNIX за столь изящное гениальное решение
точнее, авторов plan9·
кстати, procfs — из той же оперы…
это я так, к слову·
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
Спасибо сказали:
Аватара пользователя
wolkolak
Сообщения: 49
ОС: ArchLinux 64

Re: [Решено]Список процессов и информация о видеокарте.

Сообщение wolkolak »

Если через /sys,то получу драйвер, шину и т.д. Но как получить вендора, модель и сколько памяти на карточке? Каким образом работает lspci? Возможно ли вообще узнать информацию непосредственно через обращение к файлу устройства (или драйвера, я уже не знаю чего там еще)?
Спасибо сказали:
Аватара пользователя
deadhead
Сообщения: 1913
Статус: zzz..z

Re: [Решено]Список процессов и информация о видеокарте.

Сообщение deadhead »

Gloomy писал(а):
04.03.2012 17:15
Потому что заголовки ядра не полные?
требуйте долива после отстоя пены! ;-)
контекст употребления
#include <sched.h>
и
#include <linux/sched.h>
как бы разнится ;-)



wolkolak писал(а):
05.03.2012 08:58
Каким образом работает lspci?
use the source, Luke!
[x] close
Спасибо сказали:
Аватара пользователя
Gloomy
Сообщения: 340
Статус: сочувствующий

Re: [Решено]Список процессов и информация о видеокарте.

Сообщение Gloomy »

wolkolak писал(а):
05.03.2012 08:58
Каким образом работает lspci?

Элементарно - он тупо обходит дерево /sys. Чтобы в этом убедиться, достаточно закинуть проект в Eclipse (или другую IDE), включить отладку, собрать и пройтись отладчиком.

wolkolak писал(а):
05.03.2012 08:58
как получить вендора, модель

lspci это делает опять же примитивно: есть гигантский хидер, в который собраны классы всех известных человечеству устройств, и есть не менее гигантский список вендоров, моделей и ревизий железа.

wolkolak писал(а):
05.03.2012 08:58
сколько памяти на карточке?

А это уже не так тривиально. Xorg правильно показывает количество памяти: [15.490] (--) NVIDIA(0): Memory: 1048576 kBytes. Однако не уверен, что это работает на любых видеокартах. Надо поковырять Xorg, откуда он вообще извлекает это число. Подозреваю, что им делится драйвер.

wolkolak писал(а):
05.03.2012 08:58
Возможно ли вообще узнать информацию непосредственно через обращение к файлу устройства

Зависит от драйвера - как уж его разработчик сделал, так и будет. У той же nvidia драйвер даёт полное управление, в т.ч. всякий там разгон и т.д.

И вообще, какова задача - программно получить объём видеопамяти какой-то одной конкретной карты или создать универсальный инструмент, который будет работать с любой картой?
Спасибо сказали:
Аватара пользователя
wolkolak
Сообщения: 49
ОС: ArchLinux 64

Re: [Решено]Список процессов и информация о видеокарте.

Сообщение wolkolak »

Вообщем, если я правильно нарыл, вся требуемая мне информация храниться в самом файле устройства (в /dev/video0), А с помощью /sys я смогу точно определить этот файл устройств. Файл устройства - символьный, вся информация закодирована в байтах. Надо нарыть, как это все раскодировать.
Спасибо сказали:
watashiwa_daredeska
Бывший модератор
Сообщения: 4038
Статус: Искусственный интеллект (pre-alpha)
ОС: Debian GNU/Linux

Re: [Решено]Список процессов и информация о видеокарте.

Сообщение watashiwa_daredeska »

sash-kan писал(а):
04.03.2012 20:37
точнее, авторов plan9·
Дык это ж те же лица :)
Спасибо сказали:
Аватара пользователя
sash-kan
Администратор
Сообщения: 13939
Статус: oel ngati kameie
ОС: GNU

Re: [Решено]Список процессов и информация о видеокарте.

Сообщение sash-kan »

watashiwa_daredeska писал(а):
05.03.2012 19:39
sash-kan писал(а):
04.03.2012 20:37
точнее, авторов plan9·
Дык это ж те же лица :)
1. не совсем те же·
2. в unix-е не было ни procfs, ни sysfs, ни других интересных нововведений, реализованых именно в plan9; поэтому, даже если смешать разработчиков unix и plan9 в одну кучу, всё равно фраза "спасибо разработчикам _unix_ за идею файлсерверов, которую они реализовали в _plan9_" — звучит, скажем так, довольно странно·
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
Спасибо сказали:
watashiwa_daredeska
Бывший модератор
Сообщения: 4038
Статус: Искусственный интеллект (pre-alpha)
ОС: Debian GNU/Linux

Re: [Решено]Список процессов и информация о видеокарте.

Сообщение watashiwa_daredeska »

sash-kan писал(а):
05.03.2012 23:15
1. не совсем те же·
Скажем так, основные лица всё те же. С поправкой на прошедшее время, изменение служебного положения и т.п.
Plan 9 from Bell Labs was originally developed by members of the Computing Science Research Center at Bell Labs, the same group that originally developed UNIX and C.
Естественно, состав "Computing Science Research Center at Bell Labs" немножко изменился за 20 лет.

sash-kan писал(а):
05.03.2012 23:15
2. в unix-е не было ни procfs, ни sysfs, ни других интересных нововведений, реализованых именно в plan9
Plan9 is more UNIX than the UNIXes themselves. Считай, что Plan9 — это Unix 2.0. Тяжело с первого раза реализовать все идеи так, чтобы абстракции не начали протекать через 10–20 лет. Вот через 20 лет и появился Plan9, который вернул к жизни принцип "everything is file", который декларировался еще в UNIX, но довольно быстро перестал там работать. Все эти файлсерверы и пр. — всего лишь инструменты, которые позволяют нормально реализовать этот основополагающий принцип.

sash-kan писал(а):
05.03.2012 23:15
"спасибо разработчикам _unix_ за идею файлсерверов, которую они реализовали в _plan9_" — звучит, скажем так, довольно странно·
Идея "everything is file" была сформулирована еще разработчиками UNIX, и даже в какой-то форме реализована. Plan9 лишь адаптировал реализацию под изменившиеся реалии жизни, чтобы этот принцип продолжал работать, ибо в самом UNIX он уже перестал.
Спасибо сказали:
Аватара пользователя
sash-kan
Администратор
Сообщения: 13939
Статус: oel ngati kameie
ОС: GNU

Re: [Решено]Список процессов и информация о видеокарте.

Сообщение sash-kan »

watashiwa_darede...
ты всё очень верно говоришь, но файлсерверы вообще и procfs/sysfs в частности, были реализованы не в unix, а в plan9·
и plan9 отстоит от unix (в данном контектсе) так же далеко, как unix, например, от leo i 'lyons electronic office·
а то и гораздо дальше·
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
Спасибо сказали:
Аватара пользователя
DaemonTux
Сообщения: 1480
Статус: Юный падаван
ОС: Gentoo

Re: [Решено]Список процессов и информация о видеокарте.

Сообщение DaemonTux »

wolkolak писал(а):
05.03.2012 18:41
Вообщем, если я правильно нарыл, вся требуемая мне информация храниться в самом файле устройства (в /dev/video0)

С чего вы решили что /dev/video0 это видео карта. У меня этот файл от веб камеры. Также он может быть от тв тюнера.
Vladivostok Linux User Group
Спасибо сказали:
Аватара пользователя
wolkolak
Сообщения: 49
ОС: ArchLinux 64

Re: [Решено]Список процессов и информация о видеокарте.

Сообщение wolkolak »

DaemonTux писал(а):
06.03.2012 11:16
wolkolak писал(а):
05.03.2012 18:41
Вообщем, если я правильно нарыл, вся требуемая мне информация храниться в самом файле устройства (в /dev/video0)

С чего вы решили что /dev/video0 это видео карта. У меня этот файл от веб камеры. Также он может быть от тв тюнера.


Да, действительно вчера вечером еще это обнаружил. Остается только fb0 или всетаки через /sys. Вот вывод информации о нем через udevadm. Есть вывод информации о видеокарте ('/devices/pci0000:00/0000:00:02.0':), правда без объема памяти.

Код: Выделить всё

Udevadm info starts with the device specified by the devpath and then
walks up the chain of parent devices. It prints for every device
found, all possible attributes in the udev rules key format.
A rule to match, can be composed by the attributes of the device
and the attributes from one single parent device.

  looking at device '/devices/pci0000:00/0000:00:02.0/graphics/fb0':
    KERNEL=="fb0"
    SUBSYSTEM=="graphics"
    DRIVER==""
    ATTR{bits_per_pixel}=="32"
    ATTR{blank}==""
    ATTR{console}==""
    ATTR{cursor}==""
    ATTR{mode}==""
    ATTR{modes}=="U:1024x600p-0"
    ATTR{pan}=="0,0"
    ATTR{virtual_size}=="1024,600"
    ATTR{name}=="inteldrmfb"
    ATTR{stride}=="4096"
    ATTR{rotate}=="0"
    ATTR{state}=="0"

  looking at parent device '/devices/pci0000:00/0000:00:02.0':
    KERNELS=="0000:00:02.0"
    SUBSYSTEMS=="pci"
    DRIVERS=="i915"
    ATTRS{vendor}=="0x8086"
    ATTRS{device}=="0xa011"
    ATTRS{subsystem_vendor}=="0x144d"
    ATTRS{subsystem_device}=="0xc0a8"
    ATTRS{class}=="0x030000"
    ATTRS{irq}=="46"
    ATTRS{local_cpus}=="00000000,0000000f"
    ATTRS{local_cpulist}=="0-3"
    ATTRS{numa_node}=="-1"
    ATTRS{dma_mask_bits}=="36"
    ATTRS{consistent_dma_mask_bits}=="36"
    ATTRS{broken_parity_status}=="0"
    ATTRS{msi_bus}==""
    ATTRS{boot_vga}=="1"

  looking at parent device '/devices/pci0000:00':
    KERNELS=="pci0000:00"
    SUBSYSTEMS==""
    DRIVERS==""

Вопрос остается открытым, каким образом получить информацию о видеокарте средствами языка си?
Спасибо сказали:
Аватара пользователя
DaemonTux
Сообщения: 1480
Статус: Юный падаван
ОС: Gentoo

Re: [Решено]Список процессов и информация о видеокарте.

Сообщение DaemonTux »

wolkolak писал(а):
06.03.2012 14:27
Остается только fb0 ...

Драйвера для фреймбуфера и иксов могут быть разные

ну и брать инфу из /sys самое правильное решение. /sys предназначен для выдачи инфы про все железо
Vladivostok Linux User Group
Спасибо сказали:
Аватара пользователя
Gloomy
Сообщения: 340
Статус: сочувствующий

Re: [Решено]Список процессов и информация о видеокарте.

Сообщение Gloomy »

wolkolak писал(а):
06.03.2012 14:27
каким образом получить инофрмацию о видеокарте средствами языка си?

Я таки снова спрошу - информацию только по какой-то одной конкретной карте или вообще о любой?
Спасибо сказали:
Аватара пользователя
wolkolak
Сообщения: 49
ОС: ArchLinux 64

Re: [Решено]Список процессов и информация о видеокарте.

Сообщение wolkolak »

Gloomy писал(а):
06.03.2012 18:07
Я таки снова спрошу - информацию только по какой-то одной конкретной карте или вообще о любой?

По идее прога должна выводить информацию по любой видеокарте,
Спасибо сказали:
Аватара пользователя
wolkolak
Сообщения: 49
ОС: ArchLinux 64

Re: [Решено]Список процессов и информация о видеокарте.

Сообщение wolkolak »

Остался вопрос с хидерами. linux-headers установил, интересующие меня хидеры находятся в /usr/src/linux-3.2.../include/
как сделать так что бы это все работало через /usr/include. Ссылку не создает, жалуется, что есть такой файл. Тупое копирование на крайнии случай.
Спасибо сказали:
Аватара пользователя
sash-kan
Администратор
Сообщения: 13939
Статус: oel ngati kameie
ОС: GNU

Re: [Решено]Список процессов и информация о видеокарте.

Сообщение sash-kan »

wolkolak писал(а):
07.03.2012 19:03
как сделать так что бы это все работало через /usr/include
$ man -P 'less -rp "-I dir"' gcc
QUOTE писал(а):-I dir
Add the directory dir to the list of directories to be searched for header files.
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
Спасибо сказали:
Аватара пользователя
wolkolak
Сообщения: 49
ОС: ArchLinux 64

Re: [Решено]Список процессов и информация о видеокарте.

Сообщение wolkolak »

Теперь вот что.
linux/sched.h

Код: Выделить всё

...
#define for_each_process(p) \
    for (p = &init_task ; (p = next_task(p)) != &init_task ; )
...


sys.c

Код: Выделить всё

#include <stdio.h>
#include <linux/sched.h>
...
void main(void){
...
struct task_struct *task;
for_each_process(task){
printf("%s %d",task->comm,task->pid);
}
...
}


Код: Выделить всё

$ gcc -I /usr/src/linux-3.2.8-1-ARCH/include sys.c
sys.c: В функции «main»:
sys.c:64:23: ошибка: expected «;» before «{» token
Спасибо сказали:
Аватара пользователя
deadhead
Сообщения: 1913
Статус: zzz..z

Re: [Решено]Список процессов и информация о видеокарте.

Сообщение deadhead »

wolkolak писал(а):
08.03.2012 13:35
Теперь вот что.

см. сообщение #8 ;-)
[x] close
Спасибо сказали:
Аватара пользователя
wolkolak
Сообщения: 49
ОС: ArchLinux 64

Re: [Решено]Список процессов и информация о видеокарте.

Сообщение wolkolak »

deadhead писал(а):
08.03.2012 13:53
wolkolak писал(а):
08.03.2012 13:35
Теперь вот что.

см. сообщение #8 ;-)

я везде использую linux/sched.h Как раз в нем все и описано, что мне нужно.
Спасибо сказали:
Аватара пользователя
deadhead
Сообщения: 1913
Статус: zzz..z

Re: [Решено]Список процессов и информация о видеокарте.

Сообщение deadhead »

wolkolak писал(а):
08.03.2012 14:05
я везде использую linux/sched.h Как раз в нем все и описано, что мне нужно.

Код: Выделить всё

$ grep -n __KERNEL__ include/linux/sched.h
44:#ifdef __KERNEL__
2558:#endif /* __KERNEL__ */

все что находится под дефайном (а это почти весь фаил!) используется лишь в контексте, как тут принято говорить, "программы linux"...

P.S.
#define __KERNEL__
Вас не спасет, пожалейте свое (и не только) время ;-)
[x] close
Спасибо сказали:
Аватара пользователя
Janik
Сообщения: 864
Статус: Оператор вычислительных машин
ОС: Debian

Re: [Решено]Список процессов и информация о видеокарте.

Сообщение Janik »

А если через OpenGL?
Кто ищет, тот всегда найдет!
Опыт - это когда все получается с первого раза.
Спасибо сказали:
Аватара пользователя
Gloomy
Сообщения: 340
Статус: сочувствующий

Re: [Решено]Список процессов и информация о видеокарте.

Сообщение Gloomy »

wolkolak писал(а):
06.03.2012 18:23
По идее прога должна выводить информацию по любой видеокарте

Тогда всё плохо. Поковырял на досуге несколько драйверов и модулей Xorg - нет у них общего интерфейса, получающего информацию о карте. Всё в разнобой, кто в лес, кто по дрова :rolleyes: Следовательно, нужно или закапываться совсем глубоко в ядро (даже предположить не берусь, куда именно), либо придумывать какие-то альтернативные вариации. Для каких целей требуется знать точный объём видеопамяти? Может, для решения задачи его и знать не надо, а времени будет потрачено немеряно?

wolkolak писал(а):
08.03.2012 14:05
я везде использую linux/sched.h Как раз в нем все и описано, что мне нужно.

Не следует путать user-space и kernel-space. Всё, что доступно под макросом __KERNEL__, доступно только из ядра и только в том случае, если это либо его неотъемлемая часть, либо подгружаемый внешний модуль. В user-space, подключив хидер ядра к "Hello, World!", ничего, кроме ошибок компиляции, не получится. Равно как в kernel-space нельзя вызвать что-то вроде "printf("Hello, World!\n");" - это функция user-space.

Janik писал(а):
09.03.2012 05:13
А если через OpenGL?

Увы, не все видеокарты поддерживают OpenGL аппаратно :(
Спасибо сказали:
Аватара пользователя
Janik
Сообщения: 864
Статус: Оператор вычислительных машин
ОС: Debian

Re: [Решено]Список процессов и информация о видеокарте.

Сообщение Janik »

Gloomy писал(а):
09.03.2012 22:23
Увы, не все видеокарты поддерживают OpenGL аппаратно

Например, какие? Voodoo?
Кто ищет, тот всегда найдет!
Опыт - это когда все получается с первого раза.
Спасибо сказали:
Аватара пользователя
Gloomy
Сообщения: 340
Статус: сочувствующий

Re: [Решено]Список процессов и информация о видеокарте.

Сообщение Gloomy »

Janik писал(а):
10.03.2012 05:05
Например, какие? Voodoo?

Например встроенные в материнку, особенно на ноутбуках.
Спасибо сказали:
Аватара пользователя
wolkolak
Сообщения: 49
ОС: ArchLinux 64

Re: [Решено]Список процессов и информация о видеокарте.

Сообщение wolkolak »

Всем спасибо. Сделал через /sysfs и /proc, В тупую просматривая директории и читая файлы. Так и не понял откуда Xorg и др. берут объем видеокарты, но это мелочи.
Спасибо сказали: