реклама на сайте
подробности

 
 
> Прочитать точный счетчик из пространства пользователя(rdtsc), счетчик нужен в ПО(на Си) работающим под Андроид
Kris2007
сообщение Feb 28 2012, 08:31
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 75
Регистрация: 15-03-07
Пользователь №: 26 193



Нужно поюзать какой-нибудь точный счетчик циклов из-под ОС Linux из пространства пользователя.
Кроме clock_gettime ничего в голову не приходит. Существует ли какой-нибудь счетчик типа rdtsc для x86, который можно использовать из пространства пользователя(для включения которого не нужен kernel mode)?

Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Olej
сообщение Feb 28 2012, 16:13
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 351
Регистрация: 11-09-05
Из: Харьков
Пользователь №: 8 458



Цитата(Kris2007 @ Feb 28 2012, 11:31) *
(для включения которого не нужен kernel mode)?


это вопрос уже а). архитектуры ARM и на разных семействах ARM могут быть различия, б). вопрос того, что разработчики kernel сочли нужным в архитектурно-зависимой части включить в kernel API ... (посмотрю на досуге).

а если вы знаете что-то подходящее из kernel API под ваши цели - сделайте под него syscall() под ваши цели, который можно подгружать и динамически, чтоб не отходить от типового ядра Linux.

вот я беру на своём Android (кстати, какой вас интересует Android, версия?) делаю:
Код
[olej@notebook platform-tools]$ ./adb devices
* daemon not running. starting it now on port 5037 *
* daemon started successfully *
List of devices attached
0123456789ABCDEF        device
[olej@notebook platform-tools]$ ./adb -s 0123456789ABCDEF shell
# cd /proc
# cat /proc/kallsyms | grep sys_ | grep T
c00173c8 T proc_sys_init
c002ff88 T sys_call_table
c003060c T sys_oabi_call_table
c0033024 T sys_rt_sigreturn
c00330e0 T sys_sigreturn
c0033180 T sys_sigaction
...

- вот они все kernel API, родёмые, как на ладони...
- adb - это из состава Android SDK, вы уже развернули Android SDK?
Go to the top of the page
 
+Quote Post
Kris2007
сообщение Feb 29 2012, 08:40
Сообщение #3


Частый гость
**

Группа: Участник
Сообщений: 75
Регистрация: 15-03-07
Пользователь №: 26 193



Да развернул.
clock_gettime(другого решения пока не нашел( ) насколько я понимаю использует системный вызов sys_timer_gettime.
Но это много дольше, чем просто прочитать регистр таймера в x86(

Go to the top of the page
 
+Quote Post
Olej
сообщение Feb 29 2012, 09:58
Сообщение #4


Местный
***

Группа: Свой
Сообщений: 351
Регистрация: 11-09-05
Из: Харьков
Пользователь №: 8 458



Цитата(Kris2007 @ Feb 29 2012, 11:40) *
clock_gettime(другого решения пока не нашел( ) насколько я понимаю использует системный вызов sys_timer_gettime.


Код
[olej@notebook 2012_WORK]$ cat /proc/kallsyms | grep T | grep clock_gettime
c045a5ee T sys_clock_gettime


Цитата(Kris2007 @ Feb 29 2012, 11:40) *
Но это много дольше, чем просто прочитать регистр таймера в x86(

при чём здесь вообще "дольше" или "короче" при таких элементарных операциях?
если вас устраивает разрешение с дискретностью HZ (счётчик ядра jiffies - системное время), то clock_gettime() или что-то подобное из <linux/time.h> - это самое то, что вам и надо... rdtsc и в x86 используется только в крайних случаях, и исключительно когда дискретность измерений должна быть мельче HZ.

Go to the top of the page
 
+Quote Post
Kris2007
сообщение Feb 29 2012, 14:31
Сообщение #5


Частый гость
**

Группа: Участник
Сообщений: 75
Регистрация: 15-03-07
Пользователь №: 26 193



Цитата(Olej @ Feb 29 2012, 13:58) *
Код
[olej@notebook 2012_WORK]$ cat /proc/kallsyms | grep T | grep clock_gettime
c045a5ee T sys_clock_gettime



при чём здесь вообще "дольше" или "короче" при таких элементарных операциях?
если вас устраивает разрешение с дискретностью HZ (счётчик ядра jiffies - системное время), то clock_gettime() или что-то подобное из <linux/time.h> - это самое то, что вам и надо... rdtsc и в x86 используется только в крайних случаях, и исключительно когда дискретность измерений должна быть мельче HZ.


Это критичный момент. Код портируется на много платформ x86, mips, porepc, IOS(на ARM) и т п для всех своя реализация на асме. Для IOS через функцию mach_absolute_time(), андроиде подобной увы нет.
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 31st July 2025 - 02:50
Рейтинг@Mail.ru


Страница сгенерированна за 0.04173 секунд с 7
ELECTRONIX ©2004-2016