Notas IBM-AIX


Detecção automática de xlC está faltando no Autoconf, portando um comando configure deste tipo é necessário quando estiver compilando o MariaDB (Este exemplo usa o compilador IBM):

export CC='xlc_r -ma -O3 -qstrict -qoptimize=3 -qmaxmem=8192 '
export CXX='xlC_r -ma -O3 -qstrict -qoptimize=3 -qmaxmem=8192'
export CFLAGS='-I /usr/local/include'
export LDFLAGS='-L /usr/local/lib'
export CPPFLAGS=$CFLAGS export CXXFLAGS=$CFLAGS
./configure --prefix=/usr/local \
 --localstatedir=/var/mysql \
 --sysconfdir=/etc/mysql \
 --sbindir='/usr/local/bin' \
 --libexecdir='/usr/local/bin' \
 --enable-thread-safe-client \
 --enable-large-files

Acima estão as opções usadas para compilar a distribuição MariaDB que pode ser encontrada em http://www-frec.bull.com/.

Se você alterar o -O3 para -O2 na linha de configuração acima, você também deve remover a opção -qstrict (isto é uma limitação no compilador C da IBM).

Se você estiver usando gcc ou egcs para compilar o MySQL, você DEVE usar a opção -fno-exceptions, já que o manipulador de exceções no gcc/egcs não é seguro para threads! (Isto foi testado com egcs 1.1). Existem também alguns problemas conhecidos com o assembler da IBM que pode gerar código errado quando usado com gcc.

Nós recomendamos a seguinte linha do configure com egcs e gcc 2.95 no AIX:

CC='gcc -pipe -mcpu=power -Wa,-many' \
CXX='gcc -pipe -mcpu=power -Wa,-many' \
CXXFLAGS='-felide-constructors -fno-exceptions -fno-rtti' \
./configure --prefix=/usr/local/mysql --with-low-memory

O -Wa,-many é necessário para o compilador ser bem sucedido. IBM está ciente deste problema mas não está com pressa de corrigí-lo devido ao fato do problema poder ser contornado. Nós não sabemos se o -fno-exceptions é necessário com gcc 2.9.5, mas como o MariaDB não utiliza exceções e a opção acima gera código mais rápido, recomendamos que você sempre use esta opção com o egcs/gcc.

Se você tiver algum problema com código assembler tente alterar o -mcpu=xxx para o seu processador. Normalmente power2, power ou powerpc podem ser usados, de uma maneira alternativa você pode precisar usar 604 ou 604e. Não tenho certeza mas acredito que usar 'power' deve satisfazer a maioria dos casos, mesmo em uma máquina power2.

Se você não sabe qual é o seu processador, utilize o comando 'uname -m', isto irá fornecer a você uma string que parece com '000514676700', com um formato de xxyyyyyymmss onde xx e ss são sempre 0s, yyyyyy é o ID único do sistema e mm é o ID da CPU Planar. Uma tabela destes valores podem ser encontrados em http://publib.boulder.ibm.com/doc_link/en_US/a_doc_lib/cmds/aixcmds5/uname.htm. Isto irá lhe fornecer um tipo de máquina e um modelo de máquina que você pode usar para determinar que tipo de cpu você tem.

Se você tiver problemas com sinais (MySQL finaliza sem notificação sob alta carga) você pode ter encontrado um bug de SO com threads e sinais. Neste caso você pode dizer ao MariaDB para não usar sinais configurando-o com:

shell> CFLAGS=-DDONT_USE_THR_ALARM CXX=gcc \
 CXXFLAGS='-felide-constructors -fno-exceptions -fno-rtti \
 -DDONT_USE_THR_ALARM' \
 ./configure --prefix=/usr/local/mysql --with-debug --with-low-memory

Isto não afeta a performance do MariaDB, mas tem o efeito colateral que você não pode matar clientes que estão dormindo em uma conexão com mysqladmin kill ou mysqladmin shutdown. Neste caso, o cliente morrerá quando ele chegar no próximo comando.

Em algumas versões do AIX, ligando com libbind.a faz o getservbyname descarregar core. Isto é erro no AIX e deve ser relatado para a IBM.

Para o AIX 4.2.1 e gcc você tem que fazer as seguintes alterações.

Depois de configurar, edite o config.h e include/my_config.h e altere a linha que diz

#define HAVE_SNPRINTF 1

para

#undef HAVE_SNPRINTF

E finalmente, no mysqld.cc você precisa adicionar um protótipo para initgroups.

#ifdef _AIX41
extern 'C' int initgroups(const char *,int);
#endif

Se você precisar se alocar muita memória para o processo mysqld, não é suficiente apenas definir 'ulimit -d unlimited'. Você também deve configurar no mysqld_safe algo do tipo:

export LDR_CNTRL='MAXDATA=0x80000000'

Você pode encontrar mais sobre o uso de muita memória em: http://publib16.boulder.ibm.com/pseries/en_US/aixprggd/genprogc/lrg_prg_support.htm.

Retornar