Cloudflare నుండి డెవలపర్లు
CDNలో కంటెంట్ను కాష్ చేయడానికి ఉపయోగించే నిల్వ పరికరాలలో డేటాను గుప్తీకరించడానికి Cloudflare dm-cryptని ఉపయోగిస్తుంది. Dm-crypt బ్లాక్ పరికర స్థాయిలో పనిచేస్తుంది మరియు I/O అభ్యర్థనలను గుప్తీకరిస్తుంది మరియు రీడ్ రిక్వెస్ట్లను డీక్రిప్ట్ చేస్తుంది, బ్లాక్ పరికరం మరియు ఫైల్ సిస్టమ్ డ్రైవర్ మధ్య పొరగా పనిచేస్తుంది.
ప్యాకేజీని ఉపయోగించి dm-crypt పనితీరును అంచనా వేయడానికి
మొదట, కెర్నల్ క్రిప్టోసిస్టమ్లో అసమర్థమైన అల్గారిథమ్ల ఉపయోగం గురించి అనుమానం వచ్చింది. కానీ పరీక్షలు 256 ఎన్క్రిప్షన్ కీలతో వేగవంతమైన అల్గోరిథం, aes-xtsని ఉపయోగించాయి, "క్రిప్ట్సెట్అప్ బెంచ్మార్క్"ని అమలు చేస్తున్నప్పుడు దీని పనితీరు RAM డిస్క్ను పరీక్షించేటప్పుడు పొందిన ఫలితం కంటే రెండు రెట్లు ఎక్కువ. పనితీరు ట్యూనింగ్ కోసం dm-crypt ఫ్లాగ్లతో చేసిన ప్రయోగాలు ఫలితాలను ఇవ్వలేదు: “--perf-same_cpu_crypt” ఫ్లాగ్ని ఉపయోగిస్తున్నప్పుడు, పనితీరు 136 MB/sకి తగ్గింది మరియు “--perf-submit_from_crypt_cpus” ఫ్లాగ్ను పేర్కొన్నప్పుడు అది మాత్రమే పెరిగింది. 166 MB/s వరకు.
ఆపరేటింగ్ లాజిక్ యొక్క లోతైన విశ్లేషణలో dm-క్రిప్ట్ అనిపించినంత సులభం కాదని తేలింది - FS డ్రైవర్ నుండి వ్రాత అభ్యర్థన వచ్చినప్పుడు, dm-crypt దానిని వెంటనే ప్రాసెస్ చేయదు, కానీ దానిని “kcryptd” క్యూలో ఉంచుతుంది. తక్షణమే అన్వయించబడదు, కానీ అనుకూలమైన క్షణం ఉన్నప్పుడు. క్యూ నుండి, గుప్తీకరణను నిర్వహించడానికి అభ్యర్థన Linux Crypto APIకి పంపబడుతుంది. కానీ క్రిప్టో API అసమకాలిక అమలు నమూనాను ఉపయోగిస్తుంది కాబట్టి, ఎన్క్రిప్షన్ కూడా వెంటనే నిర్వహించబడదు, కానీ మరొక క్యూను దాటవేస్తుంది. ఎన్క్రిప్షన్ పూర్తయిన తర్వాత, శోధన ట్రీని ఉపయోగించి పెండింగ్లో ఉన్న వ్రాత అభ్యర్థనలను క్రమబద్ధీకరించడానికి dm-crypt ప్రయత్నించవచ్చు
చదివేటప్పుడు, డ్రైవ్ నుండి డేటాను స్వీకరించడానికి dm-crypt ముందుగా “kcryptd_io” క్యూకి అభ్యర్థనను జోడిస్తుంది. కొంత సమయం తర్వాత, డేటా అందుబాటులోకి వస్తుంది మరియు డిక్రిప్షన్ కోసం “kcryptd” క్యూలో ఉంచబడుతుంది.
Kcryptd Linux Crypto APIకి అభ్యర్థనను పంపుతుంది, ఇది సమాచారాన్ని అసమకాలికంగా డీక్రిప్ట్ చేస్తుంది. అభ్యర్థనలు ఎల్లప్పుడూ అన్ని క్యూల గుండా వెళ్లవు, కానీ చెత్త సందర్భంలో, వ్రాత అభ్యర్థన 4 సార్లు వరకు క్యూలలో ముగుస్తుంది మరియు 3 సార్లు చదివే అభ్యర్థన వరకు ఉంటుంది. క్యూకి ప్రతి హిట్ ఆలస్యంలకు కారణమవుతుంది, ఇది dm-క్రిప్ట్ పనితీరు గణనీయంగా తగ్గడానికి ప్రధాన కారణం.
అంతరాయాలు ఏర్పడే పరిస్థితుల్లో పని చేయాల్సిన అవసరం కారణంగా క్యూల ఉపయోగం. 2005లో, dm-crypt యొక్క ప్రస్తుత క్యూ-ఆధారిత ఆపరేటింగ్ మోడల్ అమలు చేయబడినప్పుడు, Crypto API ఇంకా అసమకాలికంగా లేదు. క్రిప్టో API అసమకాలిక ఎగ్జిక్యూషన్ మోడల్కు బదిలీ చేయబడిన తర్వాత, తప్పనిసరిగా డబుల్ ప్రొటెక్షన్ ఉపయోగించడం ప్రారంభమైంది. కెర్నల్ స్టాక్ వినియోగాన్ని ఆదా చేయడానికి క్యూలు కూడా ప్రవేశపెట్టబడ్డాయి, అయితే 2014లో దాని పెరుగుదల తర్వాత, ఈ ఆప్టిమైజేషన్లు వాటి ఔచిత్యాన్ని కోల్పోయాయి. అడ్డంకిని అధిగమించడానికి "kcryptd_io" అదనపు క్యూ పరిచయం చేయబడింది, ఫలితంగా పెద్ద సంఖ్యలో అభ్యర్థనలు వచ్చినప్పుడు మెమరీ కేటాయింపు కోసం వేచి ఉంటుంది. 2015లో, మల్టీప్రాసెసర్ సిస్టమ్లపై ఎన్క్రిప్షన్ అభ్యర్థనలు క్రమం తప్పినందున (డిస్క్కు సీక్వెన్షియల్ యాక్సెస్కు బదులుగా, యాక్సెస్ యాదృచ్ఛిక క్రమంలో నిర్వహించబడుతుంది మరియు CFQ షెడ్యూలర్ సమర్థవంతంగా పని చేయలేదు) అదనపు సార్టింగ్ దశ ప్రవేశపెట్టబడింది. ప్రస్తుతం, SSD డ్రైవ్లను ఉపయోగిస్తున్నప్పుడు, సార్టింగ్ దాని అర్థాన్ని కోల్పోయింది మరియు CFQ షెడ్యూలర్ ఇకపై కెర్నల్లో ఉపయోగించబడదు.
ఆధునిక డ్రైవ్లు వేగంగా మరియు తెలివిగా మారాయని పరిగణనలోకి తీసుకుంటే, Linux కెర్నల్లోని వనరుల పంపిణీ వ్యవస్థ సవరించబడింది మరియు కొన్ని ఉపవ్యవస్థలు పునఃరూపకల్పన చేయబడ్డాయి, Cloudflare ఇంజనీర్లు
ఫలితంగా, RAM డిస్క్ను పరీక్షిస్తున్నప్పుడు, dm-crypt పనితీరు కంటే రెట్టింపు సాధ్యమైంది - పనితీరు 294 MB/s (2 x 147 MB/s) నుండి 640 MB/sకి పెరిగింది, ఇది చాలా దగ్గరగా ఉంటుంది బేర్ ఎన్క్రిప్షన్ పనితీరు (696 MB/s).
నిజమైన సర్వర్లపై లోడ్ను పరీక్షించేటప్పుడు, కొత్త అమలు ఎన్క్రిప్షన్ లేకుండా నడుస్తున్న కాన్ఫిగరేషన్కు చాలా దగ్గరగా పనితీరును చూపుతుంది మరియు క్లౌడ్ఫ్లేర్ కాష్తో సర్వర్లపై ఎన్క్రిప్షన్ను ప్రారంభించడం ప్రతిస్పందన వేగంపై ప్రభావం చూపలేదు. భవిష్యత్తులో, క్లౌడ్ఫ్లేర్ సిద్ధం చేసిన ప్యాచ్లను ప్రధాన లైనక్స్ కెర్నల్కు బదిలీ చేయాలని యోచిస్తోంది, అయితే అంతకు ముందు అవి తిరిగి పని చేయాల్సి ఉంటుంది, ఎందుకంటే అవి నిర్దిష్ట లోడ్ కోసం ఆప్టిమైజ్ చేయబడ్డాయి మరియు అప్లికేషన్ యొక్క అన్ని రంగాలను కవర్ చేయవు, ఉదాహరణకు, తక్కువ గుప్తీకరణ -పవర్ ఎంబెడెడ్ పరికరాలు.
మూలం: opennet.ru