diff options
Diffstat (limited to 'meta-openbmc-mods/meta-common/recipes-phosphor/state/phosphor-post-code-manager/0001-Use-binary-serialization-instead-of-JSON.patch')
-rw-r--r-- | meta-openbmc-mods/meta-common/recipes-phosphor/state/phosphor-post-code-manager/0001-Use-binary-serialization-instead-of-JSON.patch | 104 |
1 files changed, 104 insertions, 0 deletions
diff --git a/meta-openbmc-mods/meta-common/recipes-phosphor/state/phosphor-post-code-manager/0001-Use-binary-serialization-instead-of-JSON.patch b/meta-openbmc-mods/meta-common/recipes-phosphor/state/phosphor-post-code-manager/0001-Use-binary-serialization-instead-of-JSON.patch new file mode 100644 index 000000000..91992e260 --- /dev/null +++ b/meta-openbmc-mods/meta-common/recipes-phosphor/state/phosphor-post-code-manager/0001-Use-binary-serialization-instead-of-JSON.patch @@ -0,0 +1,104 @@ +From 3f362d5e15dd3c20d1026bd814fe52b9793025e5 Mon Sep 17 00:00:00 2001 +From: Jonathan Doman <jonathan.doman@intel.com> +Date: Wed, 23 Nov 2022 15:04:17 -0800 +Subject: [PATCH 1/2] Use binary serialization instead of JSON + +The binary format is much more efficient than JSON in terms of +computational speed and disk space consumption. The former is important +in case the host is sending a constant stream of POST codes. +post-code-manager can fall behind because it takes too long to store +each new POST code on disk, causing D-Bus messages to pile up and +increase memory consumption inside dbus-broker. + +Tested: +Rebooted the host a few times and observed that POST code history is +populated normally in Redfish. After upgrading to this change, old POST +code history stored in JSON format is lost, but remains on disk until it +gets overwritten during subsequent host boots. + +Signed-off-by: Jonathan Doman <jonathan.doman@intel.com> +Change-Id: Id55909a55d950e6e62b78b3333df687b4c582c42 +Signed-off-by: Manish Baing <manish.baing@intel.com> +--- + inc/post_code.hpp | 6 ------ + src/post_code.cpp | 17 ++++++++++++----- + 2 files changed, 12 insertions(+), 11 deletions(-) + +diff --git a/inc/post_code.hpp b/inc/post_code.hpp +index be800f2..3d790b8 100644 +--- a/inc/post_code.hpp ++++ b/inc/post_code.hpp +@@ -18,12 +18,6 @@ + #include <fcntl.h> + #include <unistd.h> + +-#include <cereal/access.hpp> +-#include <cereal/archives/json.hpp> +-#include <cereal/cereal.hpp> +-#include <cereal/types/map.hpp> +-#include <cereal/types/tuple.hpp> +-#include <cereal/types/vector.hpp> + #include <chrono> + #include <filesystem> + #include <fstream> +diff --git a/src/post_code.cpp b/src/post_code.cpp +index 1fcbe55..dfe6ce7 100644 +--- a/src/post_code.cpp ++++ b/src/post_code.cpp +@@ -17,6 +17,13 @@ + + #include "iomanip" + ++#include <cereal/access.hpp> ++#include <cereal/archives/binary.hpp> ++#include <cereal/cereal.hpp> ++#include <cereal/types/map.hpp> ++#include <cereal/types/tuple.hpp> ++#include <cereal/types/vector.hpp> ++ + PostCodeDataHolder* PostCodeDataHolder::instance = 0; + + void PostCode::deleteAll() +@@ -129,18 +136,18 @@ fs::path PostCode::serialize(const std::string& path) + { + fs::path idxPath(path + strCurrentBootCycleIndexName); + std::ofstream osIdx(idxPath.c_str(), std::ios::binary); +- cereal::JSONOutputArchive idxArchive(osIdx); ++ cereal::BinaryOutputArchive idxArchive(osIdx); + idxArchive(currentBootCycleIndex); + + uint16_t count = currentBootCycleCount(); + fs::path cntPath(path + strCurrentBootCycleCountName); + std::ofstream osCnt(cntPath.c_str(), std::ios::binary); +- cereal::JSONOutputArchive cntArchive(osCnt); ++ cereal::BinaryOutputArchive cntArchive(osCnt); + cntArchive(count); + + std::ofstream osPostCodes( + (path + std::to_string(currentBootCycleIndex))); +- cereal::JSONOutputArchive oarchivePostCodes(osPostCodes); ++ cereal::BinaryOutputArchive oarchivePostCodes(osPostCodes); + oarchivePostCodes(postCodes); + } + catch (const cereal::Exception& e) +@@ -163,7 +170,7 @@ bool PostCode::deserialize(const fs::path& path, uint16_t& index) + if (fs::exists(path)) + { + std::ifstream is(path.c_str(), std::ios::in | std::ios::binary); +- cereal::JSONInputArchive iarchive(is); ++ cereal::BinaryInputArchive iarchive(is); + iarchive(index); + return true; + } +@@ -190,7 +197,7 @@ bool PostCode::deserializePostCodes(const fs::path& path, + if (fs::exists(path)) + { + std::ifstream is(path.c_str(), std::ios::in | std::ios::binary); +- cereal::JSONInputArchive iarchive(is); ++ cereal::BinaryInputArchive iarchive(is); + iarchive(codes); + return true; + } +-- +2.17.1 + |