ClickHouse prend en charge s390x à titre expérimental.
Compilation de ClickHouse pour s390x
Comme les autres plateformes, s390x compile OpenSSL sous forme de bibliothèque statique. Si vous souhaitez effectuer la compilation avec une version dynamique d’OpenSSL, vous devez passer -DENABLE_OPENSSL_DYNAMIC=1 à CMake.
Ces instructions partent du principe que la machine hôte est sous Linux x86_64/ARM et dispose de tous les outils nécessaires pour une compilation native, comme indiqué dans les instructions de compilation. Elles supposent également que l’hôte utilise Ubuntu 22.04, mais les instructions suivantes devraient aussi fonctionner sur Ubuntu 20.04.
En plus d’installer les outils utilisés pour compiler nativement, vous devez installer les paquets supplémentaires suivants :
apt-get mold
rustup target add s390x-unknown-linux-gnuPour compiler pour l’architecture s390x :
cmake -DCMAKE_TOOLCHAIN_FILE=cmake/linux/toolchain-s390x.cmake ..
ninjaExécution
Pour l’émulation, vous aurez besoin du binaire utilisateur statique de QEMU pour s390x. Sous Ubuntu, il peut être installé avec :
apt-get install binfmt-support binutils-s390x-linux-gnu qemu-user-staticUne fois compilé, le binaire peut être lancé, par exemple, avec :
qemu-s390x-static -L /usr/s390x-linux-gnu ./programs/clickhouse local --query "Select 2"
2Débogage
Installez LLDB :
apt-get install lldb-21Pour déboguer un exécutable s390x, exécutez ClickHouse à l’aide de QEMU en mode de débogage :
qemu-s390x-static -g 31338 -L /usr/s390x-linux-gnu ./clickhouseDans un autre shell, lancez LLDB et attachez-le, puis remplacez <ClickHouse Parent Directory> et <build directory> par les valeurs correspondant à votre environnement.
lldb-15
(lldb) target create ./clickhouse
Current executable set to '/<ClickHouse Parent Directory>/ClickHouse/<build directory>/programs/clickhouse' (s390x).
(lldb) settings set target.source-map <build directory> /<ClickHouse Parent Directory>/ClickHouse
(lldb) gdb-remote 31338
Process 1 stopped
* thread #1, stop reason = signal SIGTRAP
frame #0: 0x0000004020e74cd0
-> 0x4020e74cd0: lgr %r2, %r15
0x4020e74cd4: aghi %r15, -160
0x4020e74cd8: xc 0(8,%r15), 0(%r15)
0x4020e74cde: brasl %r14, 275429939040
(lldb) b main
Breakpoint 1: 9 locations.
(lldb) c
Process 1 resuming
Process 1 stopped
* thread #1, stop reason = breakpoint 1.1
frame #0: 0x0000004005cd9fc0 clickhouse`main(argc_=1, argv_=0x0000004020e594a8) at main.cpp:450:17
447 #if !defined(FUZZING_MODE)
448 int main(int argc_, char ** argv_)
449 {
-> 450 inside_main = true;
451 SCOPE_EXIT({ inside_main = false; });
452
453 /// PHDR cache is required for query profiler to work reliablyIntégration à Visual Studio Code
- L’extension CodeLLDB est requise pour le débogage visuel.
- L’extension Command Variable peut faciliter les lancements dynamiques si vous utilisez CMake Variants.
- Assurez-vous de configurer le backend pour qu’il pointe vers votre installation LLVM, par exemple :
"lldb.library": "/usr/lib/x86_64-linux-gnu/liblldb-21.so" - Assurez-vous d’exécuter l’exécutable ClickHouse en mode de débogage avant le lancement. (Il est également possible de créer une
preLaunchTaskpour automatiser cela)
Exemples de configuration
cmake-variants.yaml
buildType:
default: relwithdebinfo
choices:
debug:
short: Debug
long: Emit debug information
buildType: Debug
release:
short: Release
long: Optimize generated code
buildType: Release
relwithdebinfo:
short: RelWithDebInfo
long: Release with Debug Info
buildType: RelWithDebInfo
tsan:
short: MinSizeRel
long: Minimum Size Release
buildType: MinSizeRel
toolchain:
default: default
description: Select toolchain
choices:
default:
short: x86_64
long: x86_64
s390x:
short: s390x
long: s390x
settings:
CMAKE_TOOLCHAIN_FILE: cmake/linux/toolchain-s390x.cmakelaunch.json
{
"version": "0.2.0",
"configurations": [
{
"type": "lldb",
"request": "custom",
"name": "(lldb) Launch s390x with qemu",
"targetCreateCommands": ["target create ${command:cmake.launchTargetPath}"],
"processCreateCommands": ["gdb-remote 2159"],
"preLaunchTask": "Run ClickHouse"
}
]
}settings.json
Cela placerait également différents builds dans des sous-dossiers distincts du dossier build.
{
"cmake.buildDirectory": "${workspaceFolder}/build/${buildKitVendor}-${buildKitVersion}-${variant:toolchain}-${variant:buildType}",
"lldb.library": "/usr/lib/x86_64-linux-gnu/liblldb-21.so"
}run-debug.sh
#! /bin/sh
echo 'Starting debugger session'
cd $1
qemu-s390x-static -g 2159 -L /usr/s390x-linux-gnu $2 $3 $4tasks.json
Définit une tâche pour exécuter l’exécutable compilé en mode server dans un dossier tmp situé à côté des binaires, avec la configuration issue de programs/server/config.xml.
{
"version": "2.0.0",
"tasks": [
{
"label": "Run ClickHouse",
"type": "shell",
"isBackground": true,
"command": "${workspaceFolder}/.vscode/run-debug.sh",
"args": [
"${command:cmake.launchTargetDirectory}/tmp",
"${command:cmake.launchTargetPath}",
"server",
"--config-file=${workspaceFolder}/programs/server/config.xml"
],
"problemMatcher": [
{
"pattern": [
{
"regexp": ".",
"file": 1,
"location": 2,
"message": 3
}
],
"background": {
"activeOnStart": true,
"beginsPattern": "^Starting debugger session",
"endsPattern": ".*"
}
}
]
}
]
}