From 88c4ac13012e1a874cfd48cf5b3f85332c82bf60 Mon Sep 17 00:00:00 2001 From: evmanz Date: Tue, 17 Sep 2024 18:14:37 -0400 Subject: [PATCH] updated CV --- ...rror-Correction-to-appear-in-MICRO-2024.md | 17 ++++++----------- assets/cv_e.manzhosov.pdf | Bin 146405 -> 146789 bytes 2 files changed, 6 insertions(+), 11 deletions(-) diff --git a/_posts/2024-7-19-Polymorphic-Error-Correction-to-appear-in-MICRO-2024.md b/_posts/2024-7-19-Polymorphic-Error-Correction-to-appear-in-MICRO-2024.md index e15b3546a..07e1e3877 100644 --- a/_posts/2024-7-19-Polymorphic-Error-Correction-to-appear-in-MICRO-2024.md +++ b/_posts/2024-7-19-Polymorphic-Error-Correction-to-appear-in-MICRO-2024.md @@ -12,15 +12,10 @@ The paper's main idea is to co-design for security and reliability. We assume that the baseline system already comes with MACs for data integrity (e.g., Intel TDX) and standard level of ECC, i.e., Intel's SDDC. -We design a new scheme with iterative error correction (like Intel's SDDC) that -relies on MAC verification to validate the correction outcome. To improve error -coverage, we design a novel ECC scheme that can reinterpret the same set of ECC -check bits for any fault model. In other words, you encode the check bits once, -like with any other error correction method, but the decoding can be done for a -variety of fault models: ChipKill, Single Symbol Correction, Double-bit error, -Tripple-bit Error, Double Bounded Fault, etc. Thus, unlike conventional error -correction schemes with limited fault model support, Polymorphic ECC corrects -more errors. We evaluated our scheme on a series of DDR4-based Rowhammer -patterns and found that Polymorphic ECC corrects more patterns than other -state-of-the-art ECC schemes. + + +**Abstract** -- In this paper, we propose a new memory error correction scheme, Polymorphic ECC, based on a novel idea of *redundancy polymorphism* for error correction. With redundancy polymorphism, we can use the check bits, i.e., parity bits in traditional ECC, to correct errors from different fault models. For example, the error correction procedure will use the same redundancy value for single-bit errors, double-bit errors, ChipKill, and others. As a result, Polymorphic ECC corrects more errors than traditional codes, which typically target a single fault model or require multiple redundancies for multi-fault model support, leading to higher storage overheads. Our construction is very compact, allowing us to embed an *inlined* cryptographic message authentication code (MAC) with each cacheline, ensuring data integrity and near 100% error detection without needing any extra storage. The MAC, further permits iterative correction among the many supported fault models. In the paper, we show that the novel combination of redundancy polymorphism with iterative correction, corrects errors due to fault models not covered by traditional codes and guarantees data integrity with up to 60-bit MACs while using 64-byte cachelines and standard 40-bit DDR5 memory channels. + + + diff --git a/assets/cv_e.manzhosov.pdf b/assets/cv_e.manzhosov.pdf index b705f08f70809567f2a417e609012d62dfeafad5..9d02287eb678a905f5bd40c67b41ad88476e0036 100644 GIT binary patch delta 12777 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