Я только что установил Ubuntu 12.04 64bit с рабочим столом Cinnamon и ядром 3.5.0-030500 на свой новый ноутбук с IvyBridge i7.
Я решил проверить его производительность, запустив однопоточную программу, требующую много ресурсов процессора, которую я часто использую для калибровки камеры. К сожалению, все закончилось намного медленнее, чем я ожидал. После некоторых исследований выяснилось, что приоритет программы автоматически меняется с нормального на низкий, что делает программу еще медленнее.
Я также заметил, что все пользовательские программы, такие как Skype и Firefox, имеют низкий приоритет. Я попытался вручную сбросить приоритет на нормальный или даже очень высокий, используя команду renice
, которая работает временно, пока планировщик ядра (я полагаю) не сбрасывает приоритет на низкий.
Это нормальное поведение и как я могу преодолеть проблему медленного выполнения?
P.S. Я также пытался с ядром 3.2, но проблема все еще присутствует.
Вы можете установить значение по умолчанию для конкретного пользователя или группы в файле /etc/security/limits.conf
.
/etc/security/limits.conf
Он использует этот синтаксис: [username] [hard|soft] priority [nice value]
Поскольку вы пытаетесь поместить своего пользователя в этот файл и установить желаемый приоритет.
Вот способ навсегда повысить приоритет для Firefox в Ubuntu. Вы также можете использовать его для Skype или других процессов.
Шаг 1: Используйте следующий код C ( источник: http://and.sourceforge.net/highpriostart.c)
Если вы назовете файл «inchange_ff_priority.c», затем
скомпилируйте и установите следующим образом:
# gcc increase_ff_priority.c -o increase_ff_priority
# sudo cp increase_ff_priority /usr/local/bin
# sudo chmod +s /usr/local/bin/increase_ff_priority
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/time.h>
#include <sys/resource.h>
/*********************************************************************
High priority task starter.
USE AT OWN RISK! THIS PROGRAM COMES WITHOUT *ANY*
WARRANTY WHATSOEVER!
This program executes a program (as defined in PROGRAM)
at a given (usually higher than normal) priority (as
defined in PRIORITY). Edit PROGRAM and PRIORITY to meet
your needs. Sensible programs may be: cdrecord, MP3 or
DVD players, etc. Sensible priorities range from -1 to -5.
The program itself is *not* started SUID root but as the
user invoking the task starter. Root privilegues are used
*only* to set the desired priority (aka. nice level).
Compile and install as follows:
# gcc increase_ff_priority.c -o increase_ff_priority
# sudo cp increase_ff_priority /usr/local/bin
# sudo chmod +s /usr/local/bin/increase_ff_priority
2002, Patrick Schemitz <schemitz@users.sourceforge.net>
This program is released under the GNU Public License (GPL).
*********************************************************************/
/* The program to start with higher priority, with full path. */
#define PROGRAM "/usr/bin/firefox"
/* The desired priority, ranging from 19 (very low) to -20 (too
high). Sensible values from 0 (normal) to maybe -5 (pretty
high).
WARNING:
DO NOT SET THIS TO -20, OR YOU WILL SEVERELY AND PERMANENTLY
DAMAGE YOUR SYSTEM! Setting the priority too high causes your
program to interfere with very important system tasks (like
the swapper or the RAID daemons). Messing with the RAID
daemons is a *VERY* bad idea!
*/
#define PRIORITY -20
/* You can increase this if your program can sensibly handle a
very large number of parameters (like tar, ls, etc); normally
the default (1024) should be plenty.
*/
#define MAX_ARGS 1024
int main (int argc, char **argv)
{
int i;
pid_t pid;
char* args [MAX_ARGS+1] = { PROGRAM, NULL };
/* first thing to do: drop privilegues */
seteuid(getuid());
/* copy over arguments */
for (i=1; i<argc && i<MAX_ARGS; i++)
args[i] = argv[i];
args[i] = NULL;
/* fork process for the program to be started */
pid = fork();
if (pid == 0) {
/* new process starts actual program */
execvp(PROGRAM,args);
} else {
/* original process regains privilegues */
seteuid(0);
/* set desired priority */
setpriority(PRIO_PROCESS,pid,PRIORITY);
}
return 0;
}
Шаг 2: Создайте следующий файл с именем увеличить_ff_priority.desktop и скопируйте в ~/.config/autostart (используйте sudo cp)
[Desktop Entry]
Type=Application
Exec="/usr/local/bin/increase_ff_priority"
Hidden=false
NoDisplay=false
X-GNOME-Autostart-enabled=true
Name[en_IN]=increase_ff_priority
Name=increase_ff_priority
Comment[en_IN]=AnyComment
Comment=AnyComment
Шаг 3: Перезапустите
Шаг 4: Используйте команду Top или системный монитор для проверки приоритетов.