<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=Windows-1252">
<meta name="Generator" content="Microsoft Word 15 (filtered medium)">
<style><!--
/* Font Definitions */
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Aptos;
        panose-1:2 11 0 4 2 2 2 2 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0in;
        font-size:12.0pt;
        font-family:"Aptos",sans-serif;
        mso-ligatures:standardcontextual;}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:#467886;
        text-decoration:underline;}
span.EmailStyle17
        {mso-style-type:personal-compose;
        font-family:"Aptos",sans-serif;
        color:windowtext;}
.MsoChpDefault
        {mso-style-type:export-only;}
@page WordSection1
        {size:8.5in 11.0in;
        margin:1.0in 1.0in 1.0in 1.0in;}
div.WordSection1
        {page:WordSection1;}
--></style>
</head>
<body lang="EN-US" link="#467886" vlink="#96607D" style="word-wrap:break-word">
<div class="WordSection1">
<p class="MsoNormal"><span style="font-size:11.0pt">Hello team, <o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">After the relatively recent kernel update:<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt"><a href="https://github.com/torvalds/linux/commit/a23634644afc2f7c1bac98776440a1f3b161819e">https://github.com/torvalds/linux/commit/a23634644afc2f7c1bac98776440a1f3b161819e</a><o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">and some fixe after that:<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt"><a href="https://github.com/torvalds/linux/commit/9c0ba14828d64744ccd195c610594ba254a1a9ab">https://github.com/torvalds/linux/commit/9c0ba14828d64744ccd195c610594ba254a1a9ab</a><o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">/sys/block/<dev_labeL>/queue/optimal_io_size contains now much bigger values for SCSI disks
<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">(actaully equal to the maximum DMA buffer size as I get it).<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">For example, I have a setup:<o:p></o:p></span></p>
<p class="MsoNormal" style="margin-left:.5in"><span style="font-size:11.0pt"># cat /sys/block/sdp/queue/optimal_io_size<o:p></o:p></span></p>
<p class="MsoNormal" style="margin-left:.5in"><span style="font-size:11.0pt">16773120<o:p></o:p></span></p>
<p class="MsoNormal" style="margin-left:.5in"><span style="font-size:11.0pt"># cat /sys/block/sdp/queue/minimum_io_size<o:p></o:p></span></p>
<p class="MsoNormal" style="margin-left:.5in"><span style="font-size:11.0pt">4096<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">A that, actually leads us to the next questions:<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">1. PED_DEFAULT_ALIGNMENT (1MiB) used in linux_get_optimum_alignment function is not effective for SCSI disks, as SCSI hosts now seem to have bigger maximum DMA buffer sizes.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">   Is this needed to be revisited in parted? Like, having bigger alignment blocks can lead to some tricky behavior (like obvious thing partitions creation by user in MiBs will often lead to unaligned partitions)<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">2. We faced suboptimal behavior in our environment (at least it looks so), that can be easily reproduced with scsi_debug driver:<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt"><o:p> </o:p></span></p>
<p class="MsoNormal" style="margin-left:.5in"><span style="font-size:11.0pt"># Load scsi_debug with desired geometry (logical=512, physical=4096=512*2^3)<o:p></o:p></span></p>
<p class="MsoNormal" style="margin-left:.5in"><span style="font-size:11.0pt">sudo modprobe scsi_debug dev_size_mb=160 sector_size=512 physblk_exp=3<o:p></o:p></span></p>
<p class="MsoNormal" style="margin-left:.5in"><span style="font-size:11.0pt"><o:p> </o:p></span></p>
<p class="MsoNormal" style="margin-left:.5in"><span style="font-size:11.0pt"># Identify the created device (e.g., /dev/sdb)<o:p></o:p></span></p>
<p class="MsoNormal" style="margin-left:.5in"><span style="font-size:11.0pt">lsscsi -g | grep scsi_debug<o:p></o:p></span></p>
<p class="MsoNormal" style="margin-left:.5in"><span style="font-size:11.0pt">[3:0:0:0]    disk    Linux    scsi_debug       0190  /dev/sdb   /dev/sg2<o:p></o:p></span></p>
<p class="MsoNormal" style="margin-left:.5in"><span style="font-size:11.0pt"><o:p> </o:p></span></p>
<p class="MsoNormal" style="margin-left:.5in"><span style="font-size:11.0pt"># Verify geometry<o:p></o:p></span></p>
<p class="MsoNormal" style="margin-left:.5in"><span style="font-size:11.0pt">cat /sys/block/sdb/queue/minimum_io_size<o:p></o:p></span></p>
<p class="MsoNormal" style="margin-left:.5in"><span style="font-size:11.0pt">4096<o:p></o:p></span></p>
<p class="MsoNormal" style="margin-left:.5in"><span style="font-size:11.0pt">cat /sys/block/sdb/queue/optimal_io_size<o:p></o:p></span></p>
<p class="MsoNormal" style="margin-left:.5in"><span style="font-size:11.0pt">524288<o:p></o:p></span></p>
<p class="MsoNormal" style="margin-left:.5in"><span style="font-size:11.0pt">blockdev --getsize64 /dev/sdb<o:p></o:p></span></p>
<p class="MsoNormal" style="margin-left:.5in"><span style="font-size:11.0pt">167772160<o:p></o:p></span></p>
<p class="MsoNormal" style="margin-left:.5in"><span style="font-size:11.0pt"><o:p> </o:p></span></p>
<p class="MsoNormal" style="margin-left:.5in"><span style="font-size:11.0pt"><o:p> </o:p></span></p>
<p class="MsoNormal" style="margin-left:.5in"><span style="font-size:11.0pt">sudo ./parted --script /dev/sdb unit KiB mklabel gpt mkpart primary 256 100% print<o:p></o:p></span></p>
<p class="MsoNormal" style="margin-left:.5in"><span style="font-size:11.0pt">Warning: The resulting partition is not properly aligned for best performance: 512s % 2048s != 0s<o:p></o:p></span></p>
<p class="MsoNormal" style="margin-left:.5in"><span style="font-size:11.0pt">Model: Linux scsi_debug (scsi)<o:p></o:p></span></p>
<p class="MsoNormal" style="margin-left:.5in"><span style="font-size:11.0pt">Disk /dev/sdb: 163840kiB<o:p></o:p></span></p>
<p class="MsoNormal" style="margin-left:.5in"><span style="font-size:11.0pt">Sector size (logical/physical): 512B/4096B<o:p></o:p></span></p>
<p class="MsoNormal" style="margin-left:.5in"><span style="font-size:11.0pt">Partition Table: gpt<o:p></o:p></span></p>
<p class="MsoNormal" style="margin-left:.5in"><span style="font-size:11.0pt">Disk Flags:<o:p></o:p></span></p>
<p class="MsoNormal" style="margin-left:.5in"><span style="font-size:11.0pt"><o:p> </o:p></span></p>
<p class="MsoNormal" style="margin-left:.5in"><span style="font-size:11.0pt">Number  Start   End        Size       File system  Name     Flags<o:p></o:p></span></p>
<p class="MsoNormal" style="margin-left:.5in"><span style="font-size:11.0pt">1      256kiB  163823kiB  163568kiB               primary<o:p></o:p></span></p>
<p class="MsoNormal" style="margin-left:.5in"><span style="font-size:11.0pt"><o:p> </o:p></span></p>
<p class="MsoNormal" style="margin-left:.5in"><span lang="NL" style="font-size:11.0pt">echo $?<o:p></o:p></span></p>
<p class="MsoNormal" style="margin-left:.5in"><span lang="NL" style="font-size:11.0pt">0</span><span style="font-size:11.0pt"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin-left:.5in"><span style="font-size:11.0pt"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">And then we tried to create enctypted partition with optimized block size:<o:p></o:p></span></p>
<p class="MsoNormal" style="margin-left:.5in"><span style="font-size:11.0pt">sudo cryptsetup luksFormat --type luks2 --sector-size 4096 /dev/sdb1<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">With this parted prints just warning and leaves partition unaligned:<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">Warning: The resulting partition is not properly aligned for best performance: 512s % 2048s != 0s<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">But, I think we can optimize the behavior aligning the first block to the optimal sector size (if optimal sector size is bigger).<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">And, instead of creating unaligned partition, provide user with the properly aligned one. This looks better to me as a "best effort" action.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">What do you think?<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">Thank you, <o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">Anton Butenko<br>
<br>
P.S. I’m attaching patch variant, but that may be done in better way (like creating some new function that does that)<br>
<br>
---<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">diff --git pkgsrc.orig/parted/parted.c pkgsrc/parted/parted.c<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">index fc2aeba..b317c2c 100644<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">--- pkgsrc.orig/parted/parted.c<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">+++ pkgsrc/parted/parted.c<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">@@ -750,6 +761,12 @@ do_mkpart (PedDevice** dev, PedDisk** diskp)<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">         else<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">                 dev_constraint = ped_device_get_constraint(*dev);<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">         PED_ASSERT (dev_constraint != NULL);<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">+        if (user_constraint->start_range->end < dev_constraint->start_align->grain_size) {<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">+                /* We should always start partition from the aligned point or<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">+                   parted will be not able to resolve the partition constraints.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">+                */<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">+                user_constraint->start_range->end = dev_constraint->start_align->grain_size;<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">+        }<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt"><o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">         final_constraint = ped_constraint_intersect (user_constraint,<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">                         dev_constraint); 
<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">---<o:p></o:p></span></p>
</div>
</body>
</html>