Well, I haven't though about this in a while, but the 8ms point only holds if 
the disk write buffer is turned off, no? Otherwise, the disk will be able to do 
a better job with scheduling the writes.

-Flavio


On Friday, October 17, 2014 4:46 PM, Ivan Kelly <[email protected]> wrote:
 

>
>
>Are you running this on SSD? 2941 seems like a lot, given that for
>each write you need to fsync to disk, which takes at least 8ms.
>
>On 17 October 2014 17:42, Ivan Kelly <[email protected]> wrote:
>> Are you running this on SSD? 2941 seems like a lot, given that for
>> each write you need to fsync to disk, which takes at least 8ms.
>>
>> On 17 October 2014 17:28, sky_cord <[email protected]> wrote:
>>> Thanks for your help.
>>> After adding the two config items into bk_server.conf :
>>>
>>> journalFlushWhenQueueEmpty=true
>>> journalMaxGroupWaitMSec=0
>>>
>>> The write speed rise up to 800-900 entries per second in one ledger, length
>>> of each entry is 50 bytes.
>>>
>>> But it's still lower than I expected(The sync write  speed is 2941 entries/s
>>> based onbookkeepr-4.2.2).
>>>
>>> Could you describe your test result?   And Is there any way to improve write
>>> performance ?
>>>
>>> Thank you.
>>>
>>>
>>>
>>>
>>> At 2014-10-17 20:13:07, "Ivan Kelly" <[email protected]> wrote:
>>>>Ah, I know what this is. Twitter added some changes that makes write
>>>>throughput much higher when there's a high write rate. In this case
>>>>the latency for a single writes goes go up though (as it's doing more
>>>>buffering on the journal). Try setting:
>>>>
>>>>journalFlushWhenQueueEmpty=true
>>>>journalMaxGroupWaitMSec=0
>>>>
>>>>in bk_server.conf
>>>>
>>>>
>>>>Also, the journal and ledger directories are on the same disk. This
>>>>will have a detrimental affect once the write buffers start flushing.
>>>>We always recommend that you put the journal on its own independent
>>>>disk.
>>>>
>>>>The reads are fast because it doesn't need to hit disk, as there's not
>>>>much data that has been written.
>>>>
>>>>-Ivan
>>>>
>>>>On 17 October 2014 13:32, [email protected] <[email protected]> wrote:
>>>>> The write speed of bookkeper that version less than 4.30 is bigger than
>>>>> 1200
>>>>> entries per second when i use the same test code
>>>>>
>>>>> ________________________________
>>>>> [email protected]
>>>>>
>>>>>
>>>>> From: Jiannan Wang
>>>>> Date: 2014-10-17 18:31
>>>>> To: [email protected]
>>>>> CC: [email protected]
>>>>> Subject: Re: hi, why write speed of bookkeeper-4.3.0 is very slow?
>>>>> Could you share more information:
>>>>>    - What's the number of write_num?
>>>>>    - What's the read throughput under your test?
>>>>>    - Does the 5 bookie servers run in same machine?
>>>>>    - Could you check whether StringUtil.div works well?
>>>>>    - Could you also try async write API and tell us the output?
>>>>>
>>>>> Regards,
>>>>> Jiannan
>>>>>
>>>>> From: "[email protected]" <[email protected]>
>>>>> Reply-To: "[email protected]"
>>>>> <[email protected]>
>>>>> Date: Friday, October 17, 2014 at 3:38 PM
>>>>> To: bookkeeper-user <[email protected]>
>>>>> Subject: hi, why write speed of bookkeeper-4.3.0 is very slow?
>>>>>
>>>>> hi,
>>>>>      I have tried bookkeeper-4.3.0 today. But its write speed is 4
>>>>> entries
>>>>> per sec in my environment.
>>>>>      There are 5 bookkeeper-server-4.3.0 in my env.
>>>>>      Is there anything wrong? Test codes as follows:
>>>>> public void syncWriteLedger(long write_num) throws InterruptedException,
>>>>> BKException {
>>>>> byte[] pwd = "foobar".getBytes();
>>>>> LedgerHandle lh = client.createLedger(3, 2,
>>>>> DigestType.MAC, pwd);
>>>>>
>>>>> long ledgerId = lh.getId();
>>>>> System.out.println("ledgerId=" + ledgerId);
>>>>> System.out
>>>>> .println("data_len="
>>>>> + ("Hello World!afdafdafdfxtyb457u8n9,7.,pbesgcerfqx" + write_num)
>>>>> .getBytes().length);
>>>>> byte[] data = ("Hello World!afdafdafdfxtyb457u8n9,7.,pbesgcerfqx" +
>>>>> write_num).getBytes();
>>>>> long st = System.currentTimeMillis();
>>>>> for (int i = 0; i < write_num; i++) {
>>>>> lh.addEntry(data);
>>>>> }
>>>>> long ut = System.currentTimeMillis() - st;
>>>>> lh.close();
>>>>> double uts = StringUtil.div(ut, 1000, 3);
>>>>> double wspeed = StringUtil.div(write_num, uts, 2);
>>>>> System.out.println("ut=" + ut + " ms, write_num=" + write_num
>>>>> + ", write speed=" + wspeed + "/s");
>>>>>
>>>>>
>>>>> LedgerHandle lh2 = client.openLedger(ledgerId, BookKeeper.DigestType.MAC,
>>>>> pwd);
>>>>> long lastEntry = lh2.getLastAddConfirmed();
>>>>> st = System.currentTimeMillis();
>>>>> Enumeration<LedgerEntry> entries = lh2.readEntries(0, lastEntry);
>>>>> while (entries.hasMoreElements()) {
>>>>> byte[] bytes = entries.nextElement().getEntry();
>>>>> System.out.println(new String(bytes));
>>>>> }
>>>>> ut = System.currentTimeMillis() - st;
>>>>> lh2.close();
>>>>> uts = StringUtil.div(ut, 1000, 3);
>>>>> double rspeed = StringUtil.div(write_num, uts, 2);
>>>>> System.out.println("ut=" + ut + " ms, read_num=" + write_num
>>>>> + ", read speed=" + rspeed + "/s");
>>>>>
>>>>> }
>>>>> ________________________________
>>>>> [email protected]
>>>
>>>
>>>
>
>

Reply via email to