Как проверить, работает ли приложение под OpenOnload?

Мне нужно проверить, ускоряется ли мое приложение при запуске под OpenOnload или нет. Ограничение состоит в том, что нельзя использовать специфичный для Onload API — приложение не связано с библиотекой расширений Onload.

Как это можно сделать?

1

Решение

OpenOnload можно обнаружить по наличию предварительно загруженной общей библиотеки libonload.so,

В этом случае среда вашего приложения будет содержать LD_PRELOAD=libonload.so строка.

Или вы можете просто перечислить все загруженные общие библиотеки и проверить libonload.so,

#include <string>
#include <fstream>
#include <iostream>

// Checks is specific SO loaded in current process.
bool is_so_loaded(const std::string& so_name)
{
const std::string proc_path = "/proc/self/maps";
std::ifstream proc(proc_path);

std::string str;
while (std::getline(proc, str))
{
if (str.find(so_name) != std::string::npos) return true;
}

return false;
}

int main()
{
std::cout
<< "Running with OpenOnload: "<< (is_so_loaded("/libonload.so") ? "Yes" : "No")
<< std::endl;
return 0;
}
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]