mirror of https://github.com/aria2/aria2
2007-12-06 Tatsuhiro Tsujikawa <tujikawa at rednoah dot com>
Changed Direct/IO enable/disable procesure in file allocation routine. * src/SingleFileAllocationIterator.cc (SingleFileAllocationIterator): Disable directIO if offset is not multiple of 512. (~SingleFileAllocationIterator): Removed a call to disableDirectIO. * src/MultiFileAllocationIterator.cc (allocateChunk): Enable created SingleFileAllocationIterator's directIO. * src/FileAllocationEntry.cc (FileAllocationEntry): Enable directIO here. (~FileAllocationEntry): Disable directIO here.pull/1/head
parent
30739b0763
commit
68579bd2f4
13
ChangeLog
13
ChangeLog
|
@ -1,3 +1,16 @@
|
||||||
|
2007-12-06 Tatsuhiro Tsujikawa <tujikawa at rednoah dot com>
|
||||||
|
|
||||||
|
Changed Direct/IO enable/disable procesure in file allocation routine.
|
||||||
|
* src/SingleFileAllocationIterator.cc
|
||||||
|
(SingleFileAllocationIterator):
|
||||||
|
Disable directIO if offset is not multiple of 512.
|
||||||
|
(~SingleFileAllocationIterator): Removed a call to disableDirectIO.
|
||||||
|
* src/MultiFileAllocationIterator.cc (allocateChunk):
|
||||||
|
Enable created SingleFileAllocationIterator's directIO.
|
||||||
|
* src/FileAllocationEntry.cc
|
||||||
|
(FileAllocationEntry): Enable directIO here.
|
||||||
|
(~FileAllocationEntry): Disable directIO here.
|
||||||
|
|
||||||
2007-12-06 Tatsuhiro Tsujikawa <tujikawa at rednoah dot com>
|
2007-12-06 Tatsuhiro Tsujikawa <tujikawa at rednoah dot com>
|
||||||
|
|
||||||
Fixed the bug: aria2 doesn't utilize fast set index offered by peer.
|
Fixed the bug: aria2 doesn't utilize fast set index offered by peer.
|
||||||
|
|
|
@ -42,10 +42,14 @@
|
||||||
FileAllocationEntry::FileAllocationEntry(RequestGroup* requestGroup, Command* nextCommand):
|
FileAllocationEntry::FileAllocationEntry(RequestGroup* requestGroup, Command* nextCommand):
|
||||||
RequestGroupEntry(requestGroup, nextCommand),
|
RequestGroupEntry(requestGroup, nextCommand),
|
||||||
_fileAllocationIterator(requestGroup->getPieceStorage()->getDiskAdaptor()->fileAllocationIterator())
|
_fileAllocationIterator(requestGroup->getPieceStorage()->getDiskAdaptor()->fileAllocationIterator())
|
||||||
{}
|
{
|
||||||
|
_requestGroup->getPieceStorage()->getDiskAdaptor()->enableDirectIO();
|
||||||
|
}
|
||||||
|
|
||||||
FileAllocationEntry:: ~FileAllocationEntry()
|
FileAllocationEntry:: ~FileAllocationEntry()
|
||||||
{}
|
{
|
||||||
|
_requestGroup->getPieceStorage()->getDiskAdaptor()->disableDirectIO();
|
||||||
|
}
|
||||||
|
|
||||||
int64_t FileAllocationEntry::getCurrentLength()
|
int64_t FileAllocationEntry::getCurrentLength()
|
||||||
{
|
{
|
||||||
|
|
|
@ -57,6 +57,7 @@ void MultiFileAllocationIterator::allocateChunk()
|
||||||
_entries.pop_front();
|
_entries.pop_front();
|
||||||
FileEntryHandle fileEntry = entry->getFileEntry();
|
FileEntryHandle fileEntry = entry->getFileEntry();
|
||||||
if(entry->size() < fileEntry->getLength()) {
|
if(entry->size() < fileEntry->getLength()) {
|
||||||
|
entry->getDiskWriter()->enableDirectIO();
|
||||||
_fileAllocationIterator =
|
_fileAllocationIterator =
|
||||||
new SingleFileAllocationIterator(entry->getDiskWriter().get(),
|
new SingleFileAllocationIterator(entry->getDiskWriter().get(),
|
||||||
entry->size(),
|
entry->size(),
|
||||||
|
|
|
@ -38,24 +38,24 @@
|
||||||
#include "a2io.h"
|
#include "a2io.h"
|
||||||
|
|
||||||
#define BUFSIZE (256*1024)
|
#define BUFSIZE (256*1024)
|
||||||
|
#define ALIGNMENT 512
|
||||||
|
|
||||||
SingleFileAllocationIterator::SingleFileAllocationIterator(BinaryStream* stream, int64_t offset, int64_t totalLength):_stream(stream), _offset(offset), _totalLength(totalLength), _buffer(0)
|
SingleFileAllocationIterator::SingleFileAllocationIterator(BinaryStream* stream, int64_t offset, int64_t totalLength):_stream(stream), _offset(offset), _totalLength(totalLength), _buffer(0)
|
||||||
{
|
{
|
||||||
if(_offset%512 == 0) {
|
if(_offset%ALIGNMENT != 0) {
|
||||||
_stream->enableDirectIO();
|
_stream->disableDirectIO();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
SingleFileAllocationIterator::~SingleFileAllocationIterator()
|
SingleFileAllocationIterator::~SingleFileAllocationIterator()
|
||||||
{
|
{
|
||||||
delete [] _buffer;
|
delete [] _buffer;
|
||||||
_stream->disableDirectIO();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void SingleFileAllocationIterator::init()
|
void SingleFileAllocationIterator::init()
|
||||||
{
|
{
|
||||||
#ifdef HAVE_POSIX_MEMALIGN
|
#ifdef HAVE_POSIX_MEMALIGN
|
||||||
_buffer = (unsigned char*)Util::allocateAlignedMemory(512, BUFSIZE);
|
_buffer = (unsigned char*)Util::allocateAlignedMemory(ALIGNMENT, BUFSIZE);
|
||||||
#else
|
#else
|
||||||
_buffer = new unsigned char[BUFSIZE];
|
_buffer = new unsigned char[BUFSIZE];
|
||||||
#endif // HAVE_POSIX_MEMALIGN
|
#endif // HAVE_POSIX_MEMALIGN
|
||||||
|
|
Loading…
Reference in New Issue