From mboxrd@z Thu Jan 1 00:00:00 1970 Content-Type: multipart/mixed; boundary="===============0593222619362817574==" MIME-Version: 1.0 From: Harris, James R Subject: Re: [SPDK] Rocksdb test case issue Date: Fri, 15 Jun 2018 01:09:00 +0000 Message-ID: In-Reply-To: F1151624ABEE794C8A34A4CA571EEAA850A39C@BGSMSX105.gar.corp.intel.com List-ID: To: spdk@lists.01.org --===============0593222619362817574== Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Hi Kunal, We have come up with a slightly different approach than spdk_bdev_io_reserv= e() =E2=80=93 this one is called spdk_bdev_queue_io_wait(). Please see htt= ps://review.gerrithub.io/#/c/spdk/spdk/+/415074/. When an SPDK bdev I/O submission function is called (i.e. read, readv, read= _blocks, write, unmap, etc.) and it fails with =E2=80=93ENOMEM, it means no= spdk_bdev_io structure was available. The caller can then request a callb= ack using spdk_bdev_queue_io_wait() to be notified when an spdk_bdev_io is = available on the same thread. The caller is responsible for providing the = storage for the spdk_bdev_io_wait_entry structure, and saving any state so = that it knows where to continue when the spdk_bdev_io is available. In you= r striping case, that might mean keeping track if the first child I/O is su= ccessfully submitted, but you need to wait for an spdk_bdev_io for subseque= nt child I/O. Even the most basic case, where the striping translation res= ults in only one child I/O =E2=80=93 and that one fails with =E2=80=93ENOME= M =E2=80=93 will need to be accounted for. (All virtual bdev modules will = need to make similar changes). Note that other patches have been pushed this week to allow specifying the = spdk_bdev_io pool size - specifically to help with developing and testing t= his new code and applications/drivers that will be using the new API. The patch still needs a bit more work but I wanted to bring it to your atte= ntion so you could provide feedback. The bdevperf utility has been updated= in this patch to make use of the new API and served well as a test case (i= .e. limit the spdk_bdev_io pool to 32 but run with a queue depth of 128). Regards, -Jim On 6/11/18, 8:30 AM, "SPDK on behalf of Sablok, Kunal" wrote: Thanks Ben, As I understand from one of your recent review comment, som= ebody is working on SPDK API spdk_bdev_io_reserve(). I will be using this A= PI and then waitq and poller will be removed, also the RocksDB test case is= sue should go away with this. Please let me know when spdk_bdev_io_reserve(= ) is up in SPDK, I will merge with this. = Regards, Kunal = [=E2=80=A6] --===============0593222619362817574==--