Re: Delete

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi, thank you for your reply :))

On Wed, Aug 30, 2017 at 7:54 AM, Sitsofe Wheeler <sitsofe@xxxxxxxxx> wrote:
> Hi,
>
> On 30 August 2017, Abdelkhalek Oussama Elhamer <Abdelkhalekdev@xxxxxxxxx> wrote:
>> I have a simple question that I promise won’t take much of your time (
>> the mailing list doesn’t look like the right place for such questions
>> :/), hoping for your kind help.
>
> The mailing list is absolutely the right place for this one (and
> tagged on to the end of an issue that is totally unrelated is the
> wrong place I'm afraid ;-) so as a one off I've taken this question to
> the mailing list for you (but you may want to subscribe).
>
> Please, please avoid only asking me about fio questions. I know it's
> tempting but it will lead to bad results in the long run.

Thank you, and sorry for that, i've removed my question from the
unrelated Issue.

>> I want to test how a couple of Intel devices perform with a specific
>> workload that contains mainly random 128k writes, but the random
>> offsets must be generated using a Fisher and Yates shufflealgorithm
>> (basically to make sure that there are zero collisions between
>> requested offsets ).
>
> I'm going to stop you right there: do you know that fio maintains an
> "axmap" by default (Jens swears it wasn't named after him over in
> https://github.com/axboe/fio/blob/308d69b5d340577b7886696f39753b7ba5ae9e11/lib/axmap.c
> ) to ensure when you choose a random workload (which is uniform by
> default) every block is hit only once per pass with no overlaps (i.e.
> no collisions)? See
> http://fio.readthedocs.io/en/latest/fio_doc.html#cmdoption-arg-norandommap
> which turns this behvaiour off for more details. Anyway...
>

I am afraid there there was a bunch of collisions between the offsets
and i didn't set the norandommap attribute,
i have printed the generated offsets (the values of *b) for different
offsets (on a size of 2M using bs=128k): http://prntscr.com/gex940
Unfortunately, the collisions are visible :/.

>> So, i added an implementation to that random generator to fio, and
>> added a “get_next_Fisher_and_Yates_offset” function toretrieve the
>> next offset each time.
>>
>> To quickly test that, i replaced the default TAUSWORTHE random offset
>> function call, more precisely I’ve changed the __get_next_rand_offset
>> function from the io_u.c file to something like that:
>>
>> //…
>> static int __get_next_rand_offset(struct thread_data *td, struct fio_file *f,
>>  enum fio_ddir ddir, uint64_t *b,
>>  uint64_t lastb)
>> {
>> uint64_t r;
>>
>> if (td->o.random_generator == FIO_RAND_GEN_TAUSWORTHE ||
>>    td->o.random_generator == FIO_RAND_GEN_TAUSWORTHE64) {
>>
>> r = __rand(&td->random_state);
>>
>> dprint(FD_RANDOM, "off rand %llu\n", (unsigned long long) r);
>>
>> //*b = lastb * (r / (rand_max(&td->random_state) + 1.0));
>>                   b = get_next_Fisher_and_Yates_offset (…)
>>               // update
>
> Surely it will still need to be *b =
> get_next_Fisher_and_Yates_offset(...) as you don't want to set the
> pointer but the contents of the memory it is pointing at?
>
Yes sure, that was a typo :))

>> } else {
>> uint64_t off = 0;
>>
>>  //….
>>
>> Is that enough to replace the default random generator (for a quick test)??
>>
>> PS: the reason i am asking is that after doing that, i am getting top
>> performances each run, even on limited fully written device range.
>> this doesn’t look right! :/
>>
>> Here a sample of my test fio file:
>>
>> [global]
>> ioengine=libaio
>> iodepth=256
>
> Fairly high depth which is good for your NVMe disk.
>
>> io_size=256G
>
> You aren't going to write much data before stopping (so it's highly
> unlikely you will ever fall to garbage collection speeds)...
>
Actually, i did get a drop of bandwidth using randwrites (with the
default random generator) !

>> size=1117G
>
> ...because I'm guessing this is closer to the true size of the disk?
>
>> direct=1
>> do_verify=0
>> continue_on_error=all
>> filename=/dev/nvme0n1
>> randseed=29
>
> You're using a fixed seed so you'll write the same sequence of the
> same data again and again which mildly friendly to an SSD because you
> are likely writing data in the order it hit the cells last time so you
> will most likely be erasing the cells in the order they were
> previously written (see
> http://codecapsule.com/2014/02/12/coding-for-ssds-part-5-access-patterns-and-system-optimizations/
> for more details). Are you sure you want this - perhaps
> http://fio.readthedocs.io/en/latest/fio_doc.html#cmdoption-arg-randrepeat
> would be better as the sequence used would be most likely different to
> the last one used...
>
>> sync=1
>> [write-job]
>> rw=randwrite
>> bs=128k
>
> And your block size is quite chunky and large which again is very
> friendly to the SSD. An additional tip: your NVMe disk may have really
> clever compression and depduplication allowing it to do less work. You
> may want to look into using
> http://fio.readthedocs.io/en/latest/fio_doc.html#cmdoption-arg-refill-buffers
> .
>
>> Thank you in advance.
>
> In all honesty, I'd guess this workload would offer very stable and
> good performance on the sort of disk you are using but I'm not an SSD
> manufacturer so take my advice with a grain of salt :-)
>

Thank you, i will check those out.
> --
> Sitsofe | http://sucs.org/~sits/
--
To unsubscribe from this list: send the line "unsubscribe fio" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html




[Index of Archives]     [Linux Kernel]     [Linux SCSI]     [Linux IDE]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux SCSI]

  Powered by Linux