Dedicando uma CPU para processos específicos
Publicado por Marcelo Moreira de Mello em 04/11/2009
[ Hits: 9.930 ]
Blog: http://tchellomello.blogspot.com
PID COMMAND PSR 1 init 0 2 migration/0 0 3 ksoftirqd/0 0 4 watchdog/0 0 5 migration/1 1 6 ksoftirqd/1 1 7 watchdog/1 1 8 events/0 0 9 events/1 1 10 khelper 0 11 kthread 0 15 kblockd/0 0 16 kblockd/1 1 17 kacpid 0 135 cqueue/0 0 136 cqueue/1 1 139 khubd 0 141 kseriod 0 208 pdflush 0 209 pdflush 0 210 kswapd0 0 211 aio/0 0 212 aio/1 1 367 pccardd 0 377 kpsmoused 0 409 ata/0 0 410 ata/1 1 411 ata_aux 0 415 scsi_eh_0 0 416 scsi_eh_1 0 417 scsi_eh_2 0 418 scsi_eh_3 0 425 kstriped 0 438 ksnapd 0 453 kjournald 0 481 kauditd 0 514 udevd 0 1178 iwl3945/0 0 1179 iwl3945/1 1 1181 iwl3945 0 1508 hd-audio0 0 2061 kcryptd_io 0 2062 kcryptd 0 2071 kmpathd/0 0 2072 kmpathd/1 1 2073 kmpath_handlerd 0 2162 kjournald 0 2170 kjournald 0 2175 kjournald 0 2413 kondemand/0 0 2414 kondemand/1 1 2503 auditd 0 2505 audispd 0 2537 syslogd 0 2540 klogd 0 2576 portmap 0 2606 rpciod/0 0 2607 rpciod/1 1 2614 rpc.idmapd 0 2639 dbus-daemon 0 2665 acpid 0 2679 hald 0 2680 hald-runner 0 2687 hald-addon-acpi 0 2694 hald-addon-keyb 0 2703 hald-addon-keyb 0 2706 hald-addon-keyb 0 2709 hald-addon-keyb 0 2715 hald-addon-stor 0 2754 sshd 0 2768 cupsd 0 2769 cups-polld 0 2784 xinetd 0 2807 sendmail 0 2815 sendmail 0 2830 gpm 0 2844 nasd 0 2858 crond 0 2890 xfs 0 2917 atd 0 2948 libvirtd 0 2963 rhnsd 0 3031 NetworkManager 0 3054 wpa_supplicant 0 3056 nm-system-setti 0 3058 dnsmasq 0 3072 smartd 0 3098 mingetty 0 3099 mingetty 0 3102 mingetty 0 3105 mingetty 0 3120 mingetty 0 3122 mingetty 0 3123 gdm-binary 0 3184 gdm-binary 0 3186 gdm-rh-security 0 3189 Xorg 0 3237 yum-updatesd 0 3239 gam_server 0 3251 gnome-session 0 3287 ssh-agent 0 3316 dbus-launch 0 3317 dbus-daemon 0 3323 gconfd-2 0 3326 gnome-keyring-d 0 3328 gnome-settings- 0 3348 metacity 0 3352 gnome-panel 0 3354 nautilus 0 3355 gnome-volume-ma 0 3357 bonobo-activati 0 3360 pidgin 0 3362 gnome-vfs-daemo 0 3366 eggcups 0 3376 bt-applet 0 3380 nm-applet 0 3385 puplet 0 3400 escd 0 3401 gnome-power-man 0 3418 mapping-daemon 0 3425 gweather-applet 0 3427 wnck-applet 0 3455 trashapplet 0 3482 gam_server 0 3501 stickynotes_app 0 3504 mixer_applet2 0 3506 clock-applet 0 3511 pam-panel-icon 0 3512 pam_timestamp_c 0 3516 notification-ar 0 3518 dhclient 0 3551 gnome-screensav 0 3566 gnome-terminal 0 3568 gnome-pty-helpe 0 3569 bash 0 3595 su 0 3598 bash 0 3702 bash 0 3741 run-mozilla.sh 0 3766 firefox 0 3803 npviewer.bin 0 3822 bash 0 3847 vim 0 3849 su 0 3852 bash 0 3891 bash 0 3918 su 0 3921 bash 0 3955 ps 0Obs.: Por mais que se isole um ou vários processadores do scheduler, alguns processos a nível de kernel-space já estarão alocados aguardando por tarefas user-space.
PID COMMAND PSR 1 init 0 4328 vsftpd 0Como podemos constatar, o scheduler atribuiu o CPU0 para as 2 tarefas. O que faremos agora é dedicar a CPU1 para os processos init e vsftpd.
PID COMMAND PSR 1 init 1 4328 vsftpd 1Pronto!!! Os processos init e vsftpd já estão rodando exclusivamente na CPU1. Outro recurso interessante do cpuset é que se o processo trabalhar com FORK, o processo filho irá herdar a cpu dedicada do processo pai, como no caso do vsftpd.
PID COMMAND PSR 1 init 1 4328 vsftpd 1 4352 vsftpd 1A cada novo processo o scheduler sempre irá atribuir a CPU0, afinal é a única CPU disponível (lembrem-se que isolamos a CPU1 do scheduler com o parâmetro isolcpus=1). Assim sendo, é extremamente recomendado a criação de um script que obtenha o PID do processo à ser isolado e envie para o conjunto cpuset desejado. Outra consideração também é que os diretórios criados dentro do /cpuset não são persistentes e portanto precisam ser recriados a cada reboot.
Atualizando o seu Fedora com o Preupgrade
Utilizando o RPM como ferramenta de recovery e auditoria
Ativando e desativando CPUs sob demanda
Tunando o sistema de arquivos - entendendo o journal do EXT3
Ataque de dicionário com OpenSSL - quebrando senhas
Compilando kernel 2.6 num Slackware 10.2
Kernel 3.19.3-smp no Slackware Current
Kernel 3.19 no Debian, Linux Mint e Ubuntu - Atualização rápida
Erro: "W: Possible missing firmware... for module" [Resolvido]
Obtendo os sources do kernel estável 'automagicamente'
Compartilhando a tela do Computador no Celular via Deskreen
Como Configurar um Túnel SSH Reverso para Acessar Sua Máquina Local a Partir de uma Máquina Remota
Configuração para desligamento automatizado de Computadores em um Ambiente Comercial
Como renomear arquivos de letras maiúsculas para minúsculas
Imprimindo no formato livreto no Linux
Vim - incrementando números em substituição
Efeito "livro" em arquivos PDF
Como resolver o erro no CUPS: Unable to get list of printer drivers
É cada coisa que me aparece! - não é só 3% (3)
Melhorando a precisão de valores flutuantes em python[AJUDA] (5)
[Python] Automação de scan de vulnerabilidades
[Python] Script para analise de superficie de ataque
[Shell Script] Novo script para redimensionar, rotacionar, converter e espelhar arquivos de imagem
[Shell Script] Iniciador de DOOM (DSDA-DOOM, Doom Retro ou Woof!)
[Shell Script] Script para adicionar bordas às imagens de uma pasta