[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Discuss-gnuradio] issues with thread priority
From: |
Marcus Müller |
Subject: |
Re: [Discuss-gnuradio] issues with thread priority |
Date: |
Sun, 21 Feb 2016 13:58:33 +0100 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101 Thunderbird/38.5.0 |
Probably :)
you could test that by running
ps -Lo rtprio,pid,args a
Which should list all (a) the GNU Radio threads (-l), and display them
using the user format (-o) priority,process ID, command
Best regards,
Marcus
On 21.02.2016 13:20, Simone Ciccia S210664 wrote:
> Thanks Marcus,
>
> I set
>
> set_thread_priority(99);
>
> in the block constructor and retrieved it in the work function, it
> returns the correct priority.
> Therefore, can I neglect the UHD warning and set the priority in this
> way?
>
> Il 21.02.2016 12:50 Marcus Müller ha scritto:
>> Hi Simone,
>>
>> In the scheduler, GR sets the thread priority of a block to the default
>> if it had been set before[1]:
>>
>> // Set thread priority if it was set before fg was started
>> if(block->thread_priority() > 0) {
>> gr::thread::set_thread_priority(d->thread,
>> block->thread_priority());
>> }
>>
>> So, I'd actuall expect that to work if block->thread_priority() returns
>> the right value.
>> However, before the flowgraph is started,
>>> gr::thread::set_thread_priority(gr::thread::get_current_thread_id(),99);
>>>
>> doesn't set the right thread priority, because get_current_thread_id()
>> doesn't return the right id -- it's still running in the "main" thread
>> of the scheduler, not in the block thread.
>> So, what happens if you replace that line with
>>
>> set_thread_priority(99);
>>
>> in your block constructor?
>>
>> Best regards,
>> Marcus
>>
>> [1]
>> https://github.com/gnuradio/gnuradio/blob/master/gnuradio-runtime/lib/tpb_thread_body.cc#L87
>>
>>
>> On 21.02.2016 12:31, Simone Ciccia S210664 wrote:
>>> Hi Marcus,
>>> thank you for the support.
>>>
>>> Yes, I configured the files as follows:
>>>
>>> /etc/security/limits.conf
>>>
>>> #<domain> <type> <item> <value>
>>> #
>>>
>>> #* soft core 0
>>> #root hard core 100000
>>> #* hard rss 10000
>>> address@hidden hard nproc 20
>>> address@hidden soft nproc 20
>>> address@hidden hard nproc 50
>>> #ftp hard nproc 0
>>> #ftp - chroot /ftp
>>> address@hidden - maxlogins 4
>>> #di base:
>>> @usrp - rtprio 99
>>>
>>> # End of file
>>>
>>> /etc/group
>>>
>>> simone:x:1000:
>>> usrp:x:1001:simone
>>>
>>> I discovered that, testing the following code (e.g in codeblocks),
>>>
>>> #include <iostream>
>>> #include <sched.h> //cpu_set_t , CPU_SET
>>> #include <pthread.h> //pthread_t
>>> #include <stdio.h>
>>>
>>> using namespace std;
>>>
>>> int main()
>>> {
>>> int policy = SCHED_RR;
>>> int min_pri = sched_get_priority_min(policy);
>>> int max_pri = sched_get_priority_max(policy);
>>>
>>> sched_param sp;
>>> sp.sched_priority = int((max_pri - min_pri)) + min_pri;
>>>
>>> int ret1 = pthread_setschedparam(pthread_self(), policy, &sp);
>>> if (ret1 != 0)
>>> std::cout << "\nError in pthread_setschedparam\n";
>>> else
>>> std::cout << "\nPriority success\n";
>>> }
>>>
>>> it succeed to set priority.
>>> However, within a gnuradio block it fails.
>>> Any suggestion?
>>>
>>>
>>>
>>> Il 20.02.2016 15:57 Marcus Müller ha scritto:
>>>> Hi Simone,
>>>>
>>>> is your user allowed to set thread priority? See the Linux notes
>>>> under [1].
>>>>
>>>> Best regards,
>>>> Marcus
>>>>
>>>> [1] http://files.ettus.com/manual/page_general.html#general_threading
>>>>
>>>>
>>>> On 02/19/2016 12:22 PM, Simone Ciccia S210664 wrote:
>>>>> Hello,
>>>>>
>>>>> I'm experiencing some issue trying to set block thread priorities.
>>>>>
>>>>> I discovered that my USRP is not able to set thread priorities since
>>>>> the function pthread_setschedparam(pthread_self(), policy, &sp);
>>>>> fails.
>>>>>
>>>>> Therefore, I tryed to test a simple block (whatever), inserting the
>>>>> core affinity to a processor (e.g. CPU 0) directly in the block GUI,
>>>>> then, in the block constructor I set the thread priority with
>>>>>
>>>>> gr::thread::set_thread_priority(gr::thread::get_current_thread_id(),99);
>>>>>
>>>>>
>>>>>
>>>>> The priority value is retrieved in the work function, and tells that
>>>>> the thread priority is set to 0 (wrong).
>>>>>
>>>>> I suspect that there is a limitation somewhere (probably in the linux
>>>>> kernel or in some configuration file), I tryed it on another machine
>>>>> without problems (all works correctly).
>>>>>
>>>>> Can you help me?
>>>>>
>>>>> _______________________________________________
>>>>> Discuss-gnuradio mailing list
>>>>> address@hidden
>>>>> https://lists.gnu.org/mailman/listinfo/discuss-gnuradio
>>>>
>>>>
>>>> _______________________________________________
>>>> Discuss-gnuradio mailing list
>>>> address@hidden
>>>> https://lists.gnu.org/mailman/listinfo/discuss-gnuradio
>>>
>